
Эксплойт для CVE-2023-22518 в Atlassian Confluence. Предоставляет подробное описание уязвимости, включая настройку среды, анализ первопричин через diffing и шаги эксплуатации для получения доступа администратора.
CVE-2023-22518 в Confluence
CVE-2023-22518: Эта уязвимость описывается как “уязвимость неправильной авторизации в базе данных и сервере Confluence”. Ошибка затрагивает локальные версии продуктов Atlassian.
Настройка среды
Используйте уязвимую версию 8.0.4
URL для загрузки:
https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.0.4-x64.exe

Выберите Trial Installation, затем нажмите на ссылку, чтобы получить бесплатный пробный ключ. После этого настройте кластер: выберите non-cluster

Затем перейдите к настройке базы данных -> Выберите MySQL

Следуйте инструкциям:
Настройка базы данных, создание пользователя и пароля
CREATE DATABASE securedb CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'admin123'@'localhost' IDENTIFIED BY 'supersecure';
GRANT ALL PRIVILEGES ON securedb.* TO 'admin123'@'localhost';
GRANT SUPER ON *.* TO 'your_username'@'your_host';
FLUSH PRIVILEGES;
Затем отредактируйте /etc/mysql/my.cnf. Добавьте следующие строки:
transaction-isolation = READ-COMMITTED
log_bin_trust_function_creators = 1

После этого перезапустите MySQL и Confluence. Затем перейдите на страницу настройки по адресу localhost:8090 и используйте созданную базу данных для заполнения.

Проверьте успешность подключения, нажмите Next. Затем зарегистрируйтесь.

Отладка

Разница между исправленной и неисправленной версиями заключается в аннотациях @WebSudoRequired и @SystemAdminOnly.
WebSudoRequired — это функция для повышения безопасности сеансов администратора. При попытке доступа к админке система потребует повторного ввода пароля, даже если вы уже вошли в систему. Это добавляет дополнительный шаг аутентификации для обеспечения прав административного доступа.
SystemAdminOnly: это функция, которая ограничивает административные функции только учетными записями администраторов. Это помогает гарантировать, что только авторизованные учетные записи могут выполнять критические и влияющие на систему операции.
Установите точку останова на validate() в RestoreAction.class

функция сохранения загруженного файла с помощью getRestoreFileFromUpload

getExportDescriptor используется для распаковки и чтения содержимого zip-файла


Однако после отладки первопричина уязвимости все еще не найдена.
Причина, описанная в CVE, — уязвимость авторизации. Это заставляет нас обратить внимание на исследования уязвимостей Java в процессе разграничения прав разработчиками.
Перенаправляем внимание на файл struts.xml — он содержит информацию о действиях и маршрутизации на основе пространств имен, а также перехватчиках (interceptors).




Мы видим, что пространство имен /json расширяет функциональность пространства имен /admin. Следовательно, маршруты, созданные для пространства имен /admin, также могут быть доступны через пространство имен /json.
В контексте пространства имен /json процесс маршрутизации запроса включает прохождение через цепочку перехватчиков (interceptors). Один из этих перехватчиков, называемый WebSudoInterceptor, выполняет проверку на основе URI запроса.
В частности, WebSudoInterceptor выполняет следующие проверки:
Если путь запроса — /authenticate.action, он игнорируется.
Если путь запроса — /admin, он проверяет, пусто ли свойство WebSudoNotRequired.
Если запрос отправляется к '/json', то запрос к '/json/action' будет перенаправлен на '/setup/action' и 'admin/action'. В этом CVE уязвимый путь — / 'json/setup-restore.action?synchronous=true'
Перехватите запрос в Burp Suite, GET /json/setup-restore.action . Однако получен ответ "Method Not Allowed response" .
Попробуйте POST /json/setup-restore.action?synchronous=true
и получите ответ 200


Загрузите файл xmlexport-200123123001.zip

и получите ответ

Теперь мы можем войти с учетной записью admin :admin

И получаем следующий результат
