Я только что получил удар по аудиту безопасности от Deloitte от имени SFDC. В основном мы используем flex и общаться через AMF. Для этого мы используем FluorineFX (в отличие от LCDS и Blaze). Нам говорят, что, поскольку AMF-ответ не закодирован и кто-то может манипулировать параметрами AMF и вставить Javascript, это уязвимость XSS. Я изо всех сил пытаюсь понять, как ответ AMF назад, который мог бы повторить переданный в JS в сообщении об ошибке, может быть выполнен браузером или что-то еще в этом отношении. Я довольно опытен с XSS с HTML и JS, но, увидев, что его отметили AMF, было немного сюрпризом. Я общаюсь с командой FluorineFx, и они тоже озадачены.
Я был бы удивлен, увидев, что библиотека AMF кодирует данные ответа, Фтор не уверен. Похоже, что такие приложения безопасности, как PortSwigger и IBM AppScan, включают этот тип теста в сундук для инструментов. Вы столкнулись с этой уязвимостью с AMF и можете ли вы объяснить, как может возникнуть проблема XSS? Просто любопытно. Мне нужно либо аргументировать свой выход из этого, если существует аргумент, либо исправить дыру. Учитывая использование AMF с помощью Flex, я подумал, что у вас может быть некоторое понимание.
Дополнительная информация...
Итак, немного больше об этом от фактического поставщика PortSwigger. Я задал им вопрос, и нетто, нет, они признают, что этот тип атаки чрезвычайно сложный. Первоначально они классифицируют это как проблему безопасности High Severity, но я думаю, что их мелодия меняется сейчас. Я думал, что я опубликую содержание их ответов для всех вас, поскольку я думаю, что перспектива интересна ни к чему.
--- От PortSwigger по вопросу ---
Спасибо за ваше сообщение. Я думаю, что ответ заключается в том, что это потенциально уязвимость, но не является тривиальной для использования.
Вы правы, проблема не возникнет, когда ответ будет потреблен Клиент AMF (если он не делает что-то немое), а скорее, если злоумышленник может спроектируйте ситуацию, когда ответ потребляется браузером. Наиболее браузеры будут игнорировать заголовок HTTP Content-Type и будут смотреть на фактический контент ответа, и если он будет выглядеть так, как HTML, обрабатывать его как таковой. Исторически сложилось, что многочисленные нападения существовали там, где люди встраивать содержимое HTML/JS в другие форматы ответов (XML, изображения, другие содержимое приложения), и это выполняется браузером как таковым.
Таким образом, проблема заключается не столько в формате ответа, сколько в формат запроса, требуемого для его изготовления. Это не тривиально для атакующему, чтобы спроектировать кросс-доменный запрос, содержащий действительное сообщение AMF. Аналогичная ситуация возникает с XML-запросами/ответами, которые содержат XSS-подобные поведение. Это, безусловно, возможно для создания действительного XML-ответа, который получает обработанный браузером как HTML, но проблема в том, как отправить необработанный XML в междоменная область HTTP-объекта. Это невозможно сделать, используя стандартную HTML-форму, поэтому злоумышленнику необходимо найти другую клиентскую технологию или сделай это. Исторически подобные вещи были возможны в разное время, пока они не будут исправлены поставщиками браузеров/плагинов. Я ничего не знаю что позволило бы в данный момент.
Короче говоря, это теоретическая атака, которая зависит от вашего профиля риска вы можете полностью игнорировать или блокировать использование проверки на стороне сервера или путем кодирования вывода на сервере и повторного декодирования на клиенте.
Я действительно думаю, что Burp должен помечать формат запроса AMF в качестве смягчения для этот вопрос, и понизите влияние на низкое - я исправлю это.
Надеюсь, что это поможет.
Приветствия PortSwigger
--- больше информации об аудите ---
то, что делает portSwigger, не обязательно связано с бинарной полезной нагрузкой, то, что они делают, путается с фактическими параметрами AMF, которые отправляются в обработчик для направления запроса. Например, здесь приведен фрагмент из аудита, и он показывает часть ответа AMF на запрос...
HTTP/1.1 200 OK
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
P3P: CP="CAO PSA OUR"
Content-Type: application/x-amf
Vary: Accept-Encoding
Expires: Tue, 06 Apr 2010 18:02:10 GMT
Date: Tue, 06 Apr 2010 18:02:10 GMT
Connection: keep-alive
Content-Length: 2595
......../7/onStatus.......
.SIflex.messaging.messages.ErrorMessage.faultCode.faultString
.faultDetail.rootCause.extendedData.correlationId.clientId.destination
.messageId.timestamp.timeToLive body.headers.#Server.Processing..kFailed
to locate the requested type
com.Analytics.ca.Services.XXX5c2ce<script>alert(1)</script>9ccff0bda62..
....I506E8A27-8CD0-598D-FF6E-D4490E3DA69F.Id95ab281-d83b-4beb-abff-c668b9fd42d5
[email protected]...
. DSId.Aeb5eeabcbc1d4d3284cbcc7924451711.../8/onRes
...[SNIP]...
обратите внимание на "alert" script там... то, что они сделали, было добавлено в какой-то script закрытый JS к одному из передаваемых параметров, содержащему метод для вызова именно "com.Analytics.ca.Services. XXX". Таким образом, JS вернулась в сообщение об ошибке, но есть много вещей, которые должны произойти для этого JS, чтобы добраться где-нибудь близко к выполнению. В лучшем случае представляется косвенной угрозой.
- Последняя точка зрения аудитора безопасности -
Я обсуждал с более крупной командой, и мы все считаем его действительной атакой. Как отмечает PortSwigger в своем первом абзаце, теоретически, поскольку вы установили контент-тип в x-amf и надеетесь, что он не будет отображаться в браузере, большинство браузеров будут игнорировать этот запрос и в любом случае отображать его. Я думаю, что поставщики в значительной степени полагаются на то, что задан тип контента; однако популярные браузеры, такие как IE и некоторые версии Safari, будут игнорировать это.
Атака может быть легко вызвана использованием CSRF или любой другой формой инициирования атаки XSS.