Cross-Domain Scripting (CDS) был связан с недостатками в модели безопасности всем известного «ослика» aka Internet Explorer (IE). Однако, т.к. архитектурные особенности современных браузеров не сильно отличаются друг от друга, то атакам данного типа в настоящее время подвержены практически все известные веб-браузеры. Тем не менее, существующие отличия между программами этого класса приводят к тому, что чаще всего найденный CDS является «браузерозависимым», т.е., например, работает на IE, но не работает на Opera или наоборот.
В основе уязвимостей типа CDS лежит понятие «домена».
В основе модели безопасности любого веб-браузера лежит тот принцип, что ресурсы различных доменов (странички, скрипты и т.д.) не могут никоим образом пересекаться друг с другом.Более того, согласно архитектуре Windows и концепциям построения современных браузеров, любой сетевой ресурс в локальной сети и собственная файловая система клиента это тоже «домены», а значит к ним возможно обращение из скриптов точно так же, как к любому ресурсу в Интернете! Собственно именно локальная файловая система клиента и является чаще всего целью cross-domain атак.
Так что же такое Cross-Domain Scripting? – «междоменный скриптинг», т.е. «пересечение скриптом границ домена» - нарушение той заветной линии безопасности, выход за которую дает доступ к данным других доменов, в том числе к локальной файловой системе клиента. Такое нарушение чаще всего сопровождается возможностью записывать и выполнять произвольный HTML и Java код в контексте других доменов, читать данные других доменов (например, формы с паролями или файлы на системе клиента) и даже выполнять произвольные команды на удаленном компьютере.
Часто понятие «cross-domain scripting» подменяют понятием «cross site scripting» (XSS). Действительно, зачастую бывает, что внешние проявления этих уязвимостей очень похожи, - особенно, когда в результате CDS происходит вставка Java-кода в контекст другого домена. Однако, несмотря на сходство, суть этих уязвимостей различна:
Во-первых, область действия XSS по определению ограничена одним доменом. В то время, как CDS в общем случае подвержены все домены + локальная файловая система клиента.
Во-вторых, причина XSS уязвимостей кроется в ошибках скриптов, расположенных на сервере, и, как правило, заключается в недостаточной фильтрации данных, полученных от пользователя. Источник CDS уязвимостей – клиентское программное обеспечение (браузер и операционная система), и он обычно никак не связан с пользовательскими данными.
Ну и не надо забывать, что уровень опасности от успешной эксплуатации злоумышленником XSS намного ниже, чем от CDS. Ведь в первом случае, как максимум, произойдет утечка конфиденциальных данных пользователя (пароли и т.д.), причем лишь с одного сайта, а при CDS возможно похищение конфиденциальный данных с любых сайтов, а зачастую и исполнение произвольных команд на системе клиента, что позволяет взять над ней полный контроль.
Как это работает?
«Линия безопасности» между доменами создается искусственно, что всю работу по предотвращению междоменного скриптинга выполняет веб-браузер и его компоненты – нет архитектурных ограничений. А значит, всегда есть вероятность ошибки в процедурах проверки, возможность их обойти, что в настоящее время с успехом и делается.
За более чем десятилетнюю историю использования веб-браузеров было найдено множество способов преодолеть заветную границу домена. Однако большинство из них можно условно разделить на два класса:
*.Эксплуатация ошибок безопасности в объектно-ориентированной модели браузеров;
*Использование промежуточного звена для выполнения атаки.
Примеры CDS
Similar Method Name Redirection Cross Domain Vulnerability – CAN-2004-0727
PHP код:
w=window.open("jаvascript:setInterval(function(){try{x=opener.location.href;}catch(e){location.assign('jаvascript:alert(document.cookie)');window.close();}},100)"); w.location.assign=location.assign; location.href="/click?http://localhost";
DHTML Editing Component ActiveX Control Cross Domain Vulnerability
1.Загрузить DHTML ActiveX.
2.Загрузить в ActiveX объект нужную нам страницу (произвольный домен). Это делается путем выполнения в контексте DHTML ActiveX нашего скрипта.
Код:
exploit.DOM.Sсript.execSсript("window.name="new";open("http://localhost","new");");
3.Ну а после этого уже можно вставлять наш HTML и Java код. Он будет выполняться в контексте загруженного домена.
Код HTML:
exploit.DOM.Sсript.execSсript("alert(document.cookie)");