12 сентября 2016

[developer.store.yandex.ru] Stored XSS


Нестандартная XSS в сервисе для публикации Android приложений в Яндекс.Store.

При добавлении нового приложения из apk извлекаются иконки, которые доступны по адресу
https://developer.store.yandex.ru/static/icon/<app_id>/<name>.png

Я обнаружил, что для иконок проверяется только расширение по белому списку (png, gif, jpg), но отсутствует проверка содержимого и регистра названия. Оказалось, что использование нестандартного регистра в расширении (например, ic_launcher.PNG) не поддерживается веб-сервером и заголовок Content-Type начинает определяться по контенту файла.

Таким образом, если в Android приложении заменить иконку файлом <html><script>alert(1)</script></html> с названием ic_launcher.PNG, подписать его и загрузить на сервер, то получается Stored XSS.

Аналогичным образом можно было загрузить вместо иконки SWF-файл и, используя дополнительные уязвимости, найденные ранее, довести атаку до полного захвата пользовательской сессии.

А именно:
1) Небезопасная настройка crossdomain.xml на browser.export.yandex.com (файл уже недоступен)
<allow-access-from domain="*"/>

2) XScript сценарий, выводящий все Cookie пользователя, включая Session_id. Для доступа к нему необходим был заголовок Referer, соответствующий регулярному выражению yandex сайтов.
browser.export.yandex.com/xml/common.xml (файл уже недоступен)

Примеры используемых apk:
https://blackfan.ru/bugbounty/xss_html.apk
https://blackfan.ru/bugbounty/xss_flash.apk


Комментариев нет :

Отправить комментарий