What are “top level JSON arrays” and why are they a security risk?

In the video below, at time marker 21:40, the Microsoft PDC presenter says it's important that all JSON be wrapped so it's not a top level array:

https://channel9.msdn.com/Events/PDC/PDC09/FT12

What is the risk of an unwrapped top level array?

How should I check and see if I'm vulnerable? I purchase many components from 3rd parties and have external vendors who develop my code.

66
задан goodguys_activate 27 January 2017 в 14:02
поделиться

2 ответа

Это потому, что несколько лет назад Джереми Гроссман обнаружил очень интересную уязвимость, которая затрагивает Gmail . Некоторые люди устранили эту уязвимость с помощью неразборчивого мусора (техническое описание мистера Бобинса на этой странице просто фантастическое.)

Microsoft говорит об этом потому, что они не установили патч для своего браузера ( пока что). ( Изменить: Последние версии Edge и IE 10/11 решили эту проблему.) Mozilla считает это уязвимостью в спецификации json и поэтому исправила ее в Firefox 3 . Для записи я полностью согласен с Mozilla и, к сожалению, с ней, но каждому разработчику веб-приложений придется защищаться от этой очень малоизвестной уязвимости.

40
ответ дан 24 November 2019 в 15:08
поделиться

Я думаю, это потому, что конструктор Array () может быть переопределен. Однако эта проблема на самом деле не уникальна для массивов.

Я думаю, что атака (или один из возможных способов) выглядит примерно так:

function Array(n) {
  var self = this;
  setTimeout(function() {
    sendToEvilHackers(self);
  }, 10);
  return this;
}

Браузер (или некоторые браузеры) используют этот конструктор для записи массива [n, n, n] . Таким образом, CSRF-атака может использовать ваш открытый сеанс с вашим банком, поразить известный URL-адрес JSON с тегом