Меня только что забили на Аудит Безопасности от Делойт от имени SFDC.В основном мы используем flex и общаемся через AMF.Для этого мы используем FluorineFX (в отличие от LCDS и Blaze).Нам говорят, что поскольку ответ AMF не закодирован и что кто-то может манипулировать параметрами AMF и вставить Javascript, это является уязвимостью XSS.Я изо всех сил пытаюсь понять, как ответ AMF, который может отражать переданный в JS в сообщении об ошибке, может быть выполнен браузером или чем-то еще в этом отношении.У меня большой опыт работы с XSS с HTML и JS, но увидеть, как его помечают с помощью AMF, было немного удивительно.Я нахожусь в контакте с командой FluorineFx, и они также озадачены.
Я был бы удивлен, увидев, что библиотека AMF кодирует данные ответов, а Fluorine, конечно, этого не делает.Казалось бы, однако, что приложения для обеспечения безопасности, такие как PortSwigger и IBM AppScan, включают этот тип теста в свой набор инструментов.Сталкивались ли вы с этой уязвимостью с помощью AMF и можете ли вы объяснить, как проблема XSS может проявиться?Просто любопытно.Мне нужно или аргументировать свой выход из этого, если аргумент существует, или исправить дыру.Учитывая использование AMF в Flex, я подумал, что вы можете кое-что понять.
Дополнительная информация ...
Итак, еще немного об этом от настоящего продавца, PortSwigger.Я задал им вопрос, и нет, нет, они допускают, что этот тип атаки чрезвычайно сложен.Первоначально они классифицируют это как проблему безопасности высокой степени серьезности, но я думаю, что их мелодия сейчас меняется.Я думал, что опубликую содержание их ответа для вас всех, так как я думаю, что перспектива тем не менее интересна.
--- От 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
..fluorine.I04165c8e-f878-447f-a19a-a08cbb7def2a.A.q..@............
. DSId.Aeb5eeabcbc1d4d3284cbcc7924451711.../8/onRes
...[SNIP]...
обратите внимание на сценарий "оповещения" там ... что они сделали, был добавлен какой-то сценарийзаключил JS в один из передаваемых параметров, содержащий метод для вызова, а именно: com.Analytics.ca.Services.XXX.При этом JS вернулось с сообщением об ошибке, но для этого JS должно произойти много вещей, приближающихся к выполнению.В лучшем случае это косвенная угроза.
- последний взгляд Аудитора безопасности -
Я обсуждал с большой командой, и мы все считаем, что это правильная атака.Как PortSwigger упоминает в своем первом абзаце, хотя теоретически, так как вы устанавливаете тип контента на x-amf, и надеетесь, что он не будет отображаться в браузере, большинство браузеров проигнорируют этот запрос и все равно выполнят его.Я думаю, что поставщики сильно полагаются на тот факт, что установлен тип контента;однако популярные браузеры, такие как IE и некоторые версии Safari, будут игнорировать это.
Атака может быть легко инициирована с помощью CSRF или любой другой формы инициирования атаки XSS.