
Доказательство концепции эксплуатации уязвимости CVE-2021-46398
В этом репозитории вы найдете доказательство концепции эксплуатации уязвимости CVE-2021-46398 с помощью docker compose, а также анализ влияния этой уязвимости на информационные системы.
# Exploit Title: FileBrowser 2.17.2 - Cross Site Request Forgery (CSRF) to Remote Code Execution (RCE)
# Date: 05/02/2022
# Exploit Author: FEBIN MON SAJI
# Vendor Homepage: https://filebrowser.org/
# Software Link: https://github.com/filebrowser/filebrowser
# Version:
FileBrowser <= 2.17.2
# Tested on: Ubuntu 20.04
# CVE : CVE-2021-46398
Согласно веб-сайту FileBrowser, FileBrowser — это популярное программное обеспечение в духе «создай своё собственное облако», которое можно установить на сервер, указать ему путь и затем получать доступ к своим файлам через удобный веб-интерфейс, разработанный на языке Go, со множеством функций. Это немного похоже на Google Drive, за исключением того, что каждый может владеть и размещать собственный экземпляр.
Администраторы FileBrowser могут создавать несколько пользователей, в том числе другого пользователя с правами администратора, и предоставлять доступ к любой директории, к которой пожелают. Создание пользователей обрабатывается конечной точкой /api/users. Эта конечная точка принимает входные данные в формате JSON для создания пользователей, но не проверяет заголовок Content-Type HTTP, значение которого должно быть application/json, а вместо этого принимает text/plain; именно здесь и возникает уязвимость. Кроме того, заголовок Origin не проверяется и не реализованы анти-CSRF токены. Следовательно, злоумышленник может легко использовать эту уязвимость для создания бэкдор-пользователя с правами администратора и доступом к домашней директории или к любой другой директории, к которой хочет получить доступ, просто отправив легитимному администратору URL-адрес вредоносной веб-страницы и получив доступ ко всей файловой системе сервера (более подробное объяснение этого процесса приведено в разделе демонстрации).
Кроме того, администратор может выполнять команды в системе, поэтому эта уязвимость приводит к RCE.
Вот диаграмма последовательности, которая обобщает процесс атаки (Алиса — хакер, а Боб — администратор и владелец экземпляра FileBrowser):
sequenceDiagram
Alice (hacker) ->> Alice (hacker): *Maliciously creates the malicious HTML page*
Alice (hacker) ->> Bob (admin): Here is a cool page! You must check that bro!
Bob (admin) ->> Alice (hacker): Thanks dude, let's open that!
Bob (admin) ->> Bob (admin): *Opens the page thinking it's something cool*
Bob (admin) -->> FileBrowser: *Sends a request to create a user without knowing it*
FileBrowser -->> FileBrowser: *Creates a new admin privileged user as requested*
Alice (hacker) ->> FileBrowser: Eheheh Bob is so dumb! *Connect to FileBrowser with the backdoor user*
FileBrowser ->> Alice (hacker): *Accept Alice connection with the new user created*
Alice (hacker) ->> FileBrowser: *Request shell access to FileBrowser with the appropriate button then makes sytem calls on Bob's computer*
Цель этой демонстрации — создать мини-архитектуру, состоящую из двух/трёх машин:
Это действительно упрощённая архитектура, цель которой — подчеркнуть технический аспект уязвимости.
Для этого эксперимента вам понадобится только docker.
В этой конфигурации целевая машина основана на образе FileBrowser v2.17.2 (который уязвим к этой ошибке), в котором единственная учётная запись FileBrowser — это учётная запись администратора с логином/паролем admin/admin.
Запуск целевой машины:
mkdir srv && docker compose up
Со стороны злоумышленника вредоносная веб-страница позволит нам выполнить вызов API FileBrowser и создать нашего бэкдор-пользователя с компьютера администратора.
Пример такой страницы приведён в этом репозитории под именем index.html. Это простая страница HTML со скрытой формой, которая выполняет POST запрос к конечной точке /api/users FileBrowser с полезной нагрузкой в атрибуте name элемента input. Эта полезная нагрузка создаёт пользователя с правами администратора, логин которого — «oui», а пароль — «oui», и срабатывает при нажатии кнопки.
Мы, конечно, могли бы создать более красивую и привлекательную страницу, чем эта, и скрыть отправку HTTP запроса в другом элементе веб-сайта; это сделано лишь для того, чтобы вы могли увидеть технический аспект эксплуатации уязвимости. Помните, что цель этой вредоносной веб-страницы — быть открытой администратором FileBrowser, чтобы он ничего не заподозрил!
Со стороны администратора мы спокойно занимаемся администрированием FileBrowser. Перейдите на 127.0.0.1:8080 и войдите, используя учётные данные администратора admin/admin.
Затем мы получаем вредоносную веб-страницу любым способом, например, в фишинговом письме, и выполняем действие, которое запускает эксплойт. Откройте веб-страницу index.html и нажмите кнопку; это запустит полезную нагрузку.
Теперь вернёмся на сторону злоумышленника: у нас есть бэкдор-пользователь с правами администратора на сервере FileBrowser.
Откройте ваш любимый веб-браузер в режиме инкогнито, чтобы убедиться, что вы не используете какие-либо средства аутентификации администратора. Перейдите на localhost:8080 и войдите, используя учётные данные бэкдор-пользователя oui/oui.
Поздравляем! Теперь у вас есть доступ к файловой системе сервера FileBrowser, а значит, и ко всем файлам пользователей сервера!
А поскольку FileBrowser — это отличная платформа с множеством функций, вы можете запустить экземпляр терминала, нажав кнопку «toggle shell»... попробуйте ввести whoami и делайте всё, что захотите, от имени root :)
Чтобы разрешить бэкдор-пользователю использовать команды оболочки, они должны быть явно указаны в полезной нагрузке. Загляните в
index.html, чтобы добавить свои!
Уязвимость исправлена, начиная с версии v2.18.0. Информация об этом доступна в их GitHub. Внедрение исправления не потребовало больших затрат, так как нужно было изменить всего 6 строк кода в одном файле программы. Поскольку уязвимость возникла из-за ошибки разбора (см. описание уязвимости), достаточно было гарантировать, что любой запрос перед обработкой преобразуется в формат application/json.