Mozilla Firefox: огляд та експлуатація вразливостей
Mozilla Firefox – це open-source веб-браузер, розроблений компанією Mozilla Corporation та великою спільнотою добровольців зі всього світу. Він є одним із найпопулярніших веб-браузерів у світі та використовується мільйонами користувачів. Firefox доступний для різних операційних систем, таких як: Windows, macOS, Linux. Мобільних платформ, таких як: Android та iOS.
Основні особливості Mozilla Firefox містять у собі швидкий рендеринг для відображення сторінок, посилену безпеку, вбудований блокувальник реклами та відстежуючих файлів cookie, можливість встановлення розширень (додаткових модулів) для розширення функціональності браузера, та акцент на приватності користувача. Проте навіть наявність такої кількості security-фіч не звільняє цей браузер від вразливостей, які знаходять дослідники по всьому світу регулярно. Про дві з таких, ми хочемо розказати вам сьогодні.
CVE-2023-28161
· Base Score: 8.8 HIGH
· Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
· CWE-281 Improper Preservation of Permissions
· Affected versions: Mozilla Firefox <115 version.
Вразливість полягає у несанкціонованому доступі до камери девайсу для всіх локальних файлів з розширенням .html (HyperText Markup Language), після того я користувач надав дозвіл до камери з одного такого файлу. Таким чином, якщо користувач відкриє скачаний з .html файл і дасть йому дозвіл до камери, всі інші файли з таким же розширенням будуть мати цей доступ. Причому неважливо, з яких джерел і як отримані ці файли. Важливо те, щоб ці файли були відкриті в одній вкладці браузера!
Для демонстрації атаки, було створено два довільних html файли: test1.html та test2.html, що будуть запрошувати доступ до камери за натисканням кнопки:
Файл становить простий HTML-документ зі вбудованим JavaScript-кодом, який використовує WebRTC (Web Real-Time Communication) для отримання доступу до відеокамери користувача:
- <video id=”gum–local” autoplay playsinline></video> – елемент <video>, який буде використовуватися для відображення відеопотоку з камери користувача. Атрибути autoplay та playsinline вказують на те, щоб відео автоматично почало відтворення, та щоб воно відтворювалося всередині контейнера не виходячи за його межі.
- <button id=”showVideo“>Open camera</button> – кнопка, яку можна натискати для відкриття камери.
- <script src=”https://webrtc.github.io/samples/src/content/getusermedia/gum/js/main.js”></script> – посилання на зовнішній JavaScript-файл main.js, який містить код для роботи з WebRTC та обробки взаємодії з відеокамерою.
- <script>var myButton = document.getElementById(‘showVideo’); myButton.click(); </script> коли сторінка завантажиться, скрипт автоматично натискатиме кнопку з ідентифікатором “showVideo”
Спробуємо запустити файл:
Як бачимо, одразу після запуску отримуємо повідомлення про запрошення дозволу до камери девайсу. Якщо користувач натисне Allow (дозволити), то ми побачимо трансляцію його веб-камери на екрані:
Запис одразу з’являється на екрані. Тепер спробуємо запустити інший файл, test2.html з аналогічним функціоналом:
Вразливість проексплуатовано! Користувач не отримав повідомлення про те, що сайт запрошує доступ до камери його девайсу й скрипт автоматично запустився, що дозволило несанкціонований доступ до конфіденційної інформації жертви. Експлойт можна зробити більш якісним, маскуючись під легальний сайт та приховавши основні елементи (кнопку та інші елементи). Також хорошою ідеєю буде надсилання відеопотоку з камери на віддалений сервер під управлінням нападника.
Комбінування вразливості з соціальною інженерією або фішингом дає змогу атакуючому отримати образи та відеозаписи з приватного простору користувача без його дозволу. Зловмисники можуть використовувати отримані відеозаписи для шантажу, загроз або вимагань від користувача. На додаток, отримані дані можуть використовуватися для вчинення інших злочинів, таких як крадіжка особистих облікових записів, атаки на особисту інформацію користувача тощо.
CVE-2023-28163
- Base Score: 6.5 MEDIUM
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N
- NVD-CWE-noinfo Insufficient Information
- Affected versions: Firefox < 111, Firefox ESR < 102.9, and Thunderbird < 102.9.
Щодо цієї вразливості, то вона дозволяє нам викрадати змінні оточення (Environment Variables) через функціонал збереження файлу “Save As”. Зазвичай, коли файл зберігається за допомогою діалогового вікна “Зберегти як” в браузері Firefox, користувач захищений від різних типів атак, тому що браузер фільтрує небезпечні розширення та символи. Проте в даній вразливості зловмисник може розмістити змінні оточення в кінці розширення файлу, що дозволяє знакам % проходити без фільтрації. Відповідно, це може бути використаним для викрадення збережених змінних середовища жертви, таких як різні секретні ключі (AWS, AZURE, Firebase тощо) або ж токени.
Проте, для активації цієї вразливості, потрібно встановити діалогове вікно “Зберегти як” як опцію завантаження за замовчуванням (Settings → Files and Applications → Downloads → “Always ask you where to save files”):
В іншому випадку, доведеться застосовувати методи соціальної інженерії для того, щоб заманити жертву до використання методу завантаження правою кнопкою миші, який завжди відкриває діалогове вікно “Зберегти як” для завантаження файлу.
Створимо локальний файл експлойт test3.html, який дозволить нам ексфільтрувати назву комп’ютера користувача:
HTML код визначає сторінку 3, яка дозволяє користувачеві завантажити файл key.pem%computername% і потім виводить інформацію про завантажений файл:
- посилання <a> для завантаження файла з текстом “Download”. Параметр download вказує ім’я файлу, включаючи %username% в якості плейсхолдера.
- форма <form> з полем для вибору файлу <input type=”file” id=”fileInput” />.
- елемент <p> з ідентифікатором “fileInfo”, в якому буде виводитися інформація про завантажений файл.
- Javascript код отримує доступ до елементів HTML за допомогою document.getElementById. Створюється регулярний вираз regex, який призначений для вилучення інформації з імені файлу. У цьому випадку, використовується регулярний вираз для пошуку тексту між “key.pem_” і “.pem%” у назві файлу.
Тепер завантажимо наш файл, натиснувши відповідну кнопку:
Поглянемо на файл після його успішного збереження:
Помічаємо, що змінна оточення успішно виконалась та надала нам інформацію щодо імені девайсу користувача. Звіривши назву, ми впевнились в її коректності.
Тепер спробуємо завантажити наш файл на сайт для вилучення імені комп’ютера:
Одразу отримуємо ім’я нашого файлу та вилучену інформацію:
Таким чином, ми маємо доступ до змінних оточення машини Windows. Змінні оточення можуть містити інформацію про систему, таку як шляхи до деяких системних каталогів чи імена користувачів. Причому деякі, можуть надавати інформацію, яка допомагає в ідентифікації конкретної системи. Це може бути використано для створення профілю системи для подальших атак.
Патчі безпеки для обох вразливостей вже є, тому для їх усунення потрібно оновити програмне забезпечення Mozilla до останньої наявної версії.
Посилання:
https://nvd.nist.gov/vuln/detail/CVE-2023-28161
https://security.snyk.io/vuln/SNYK-UNMANAGED-FIREFOX-5668546
https://www.tenable.com/cve/CVE-2023-28161/plugins
https://nvd.nist.gov/vuln/detail/CVE-2023-28163
https://cve.report/CVE-2023-28163
https://www.tenable.com/cve/CVE-2023-28163/plugins
Аудит подій в операційних системах Linux: Розгляд інструменту auditd (Linux Audit Daemon) та обхід його захисного механізму