
Лаборатория на базе Docker, воспроизводящая CVE-2024-31218 — уязвимость неаутентифицированного создания администратора PocketBase в Webhood, с PoC, обнаружением и проверкой исправления.
Этот проект представляет собой контролируемую лабораторию для исследования безопасности и воспроизведения уязвимости CVE-2024-31218 — критической уязвимости аутентификации, затрагивающей Webhood версий до 0.9.1.
Уязвимость связана с неаутентифицированным созданием учётной записи администратора PocketBase при отсутствии учётной записи администратора. Злоумышленник, имеющий доступ к уязвимому API, может создать административную учётную запись без предварительной аутентификации.
Цели данной лаборатории:
Безопасность: Этот проект предназначен только для изолированной локальной лабораторной среды. Уязвимое приложение никогда не должно быть доступно из публичного Интернета или использоваться против систем без авторизации.
| Поле | Детали |
|---|
| CVE | CVE-2024-31218 |
| Проект | Webhood |
| Затронутые версии | Webhood <= 0.9.0 |
| Исправленная версия | Webhood 0.9.1 |
| Критичность | Критическая |
| CVSS v3.1 | 9.8 |
| CWE | CWE-306 — Отсутствие аутентификации для критической функции |
| Вектор атаки | Сеть |
| Сложность атаки | Низкая |
| Требуемые привилегии | Отсутствуют |
| Взаимодействие с пользователем | Отсутствует |
| Конфиденциальность | Высокая |
| Целостность | Высокая |
| Доступность | Высокая |
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
2. Описание уязвимости
CVE-2024-31218 вызвана недостаточной защитой аутентификации при создании администратора в затронутом приложении Webhood/PocketBase.
Когда в приложении не настроена учётная запись администратора, функциональность создания администратора может быть доступна без аутентификации.
Злоумышленник, способный достичь уязвимого API, может попытаться создать первую учётную запись администратора.
Успешная эксплуатация может привести к административному доступу к приложению.
Уязвимость классифицируется как:
CWE-306: Отсутствие аутентификации для критической функции
3. Затронутые и исправленные версии
Уязвимый диапазон:
Webhood <= 0.9.0
Уязвимость была исправлена в:
Webhood 0.9.1
Таким образом, для проверки устранения следует использовать исправленную версию.
4. Поверхность атаки
Соответствующей поверхностью атаки является административный API PocketBase.
Уязвимая функциональность связана с созданием учётной записи администратора.
Концептуально поток атаки выглядит так:
Attacker
|
| HTTP request
v
Webhood / PocketBase API
|
| Administrator creation endpoint
v
Admin account creation
|
v
Unauthorized administrative access
Атака не требует существующей аутентифицированной сессии при наличии уязвимого условия начального администратора.
5. Первопричина
Первопричиной является сбой контроля аутентификации.
Функциональность создания администратора не обеспечивала достаточного ограничения доступа при отсутствии учётной записи администратора.
Граница безопасности должна гарантировать, что привилегированная административная функциональность не может быть использована неаутентифицированным удалённым клиентом.
Таким образом, уязвимое поведение представляет собой отсутствие проверки аутентификации вокруг операции, критичной для безопасности.
6. Архитектура контролируемой лаборатории
Лаборатория воспроизводит поведение административного API PocketBase,
лежащее в основе CVE-2024-31218.
Docker-среда использует компонент PocketBase напрямую, а не
претендует на упаковку полного приложения Webhood 0.9.0.
Архитектура лаборатории:
+-------------------------+
| Host Machine |
| |
| PowerShell / Python |
+------------+------------+
|
| 127.0.0.1:8090
v
+-------------------------+
| Docker Container |
| |
| +-------------------+ |
| | PocketBase | |
| | Administrative API| |
| +-------------------+ |
| |
+-------------------------+
Сервис привязан только к localhost и не предназначен для доступа
из публичного Интернета.
Все учётные данные, используемые при воспроизведении, являются синтетическими лабораторными учётными данными.
7. Структура репозитория
CVE-2024-31218-WEBHOOD-LAB/
│
├── README.md
│
├── vulnerable/
│ ├── Dockerfile
│ └── docker-compose.yml
│
├── exploit/
│ └── reproduce.py
│
├── detection/
│ └── detect.py
│
├── patched/
│ └── README.md
│
├── evidence/
│ └── README.md
│
└── blog/
└── CVE-2024-31218-Technical-Blog.pdf
8. Уязвимая среда
Уязвимая среда предназначена для воспроизведения поведения административного API PocketBase,
связанного с CVE-2024-31218, в изолированном
Docker-контейнере.
Лаборатория использует PocketBase напрямую как затронутый компонент, а не
претендует на воспроизведение полного приложения Webhood 0.9.0.
Конфигурация Docker:
- Собирает лабораторную среду.
- Запускает PocketBase локально.
- Привязывает сервис к localhost.
- Изолирует сервис от внешних систем.
- Обеспечивает воспроизводимую среду для тестирования.
- Позволяет скрипту воспроизведения взаимодействовать с административным API.
Текущая лаборатория использует синтетическую учётную запись администратора и не
содержит реальных пользовательских данных или учётных данных.
9. Методология воспроизведения
Процедура воспроизведения предназначена только для локальной лаборатории.
Шаг 1 — Запуск уязвимого контейнера
docker compose up --build
Шаг 2 — Проверка сервиса
Убедитесь, что сервис PocketBase, используемый для компонентной лаборатории, отвечает локально.
Шаг 3 — Выполнение контролируемого скрипта воспроизведения
Скрипт воспроизведения отправит соответствующий запрос к локальному уязвимому экземпляру.
Пример:
python exploit/reproduce.py
Шаг 4 — Наблюдение за ответом
Ответ должен продемонстрировать, принимает ли приложение неаутентифицированный запрос на создание администратора.
Шаг 5 — Проверка результирующего состояния
Лаборатория должна проверить, была ли создана учётная запись администратора.
Никогда не следует использовать внешнюю цель.
10. Обнаружение
Обнаружение должно выявлять индикаторы, связанные с несанкционированными попытками создания администратора.
Потенциальные индикаторы включают:
Запросы к функциональности создания администратора
Неаутентифицированные запросы к административным эндпоинтам
Неожиданное создание первой учётной записи администратора
HTTP-запросы от неожиданного клиента
Повторяющиеся попытки создания администратора
Создание административной учётной записи сразу после инициализации приложения
Скрипт обнаружения находится в:
detection/detect.py
11. Устранение
Основной мерой устранения является обновление Webhood до исправленной версии:
Webhood 0.9.1
Уязвимый выпуск не должен использоваться в производственной среде.
Документированный обходной путь — ограничить доступ к затронутой функциональности административного API, если обновление не может быть выполнено немедленно.
После устранения:
Остановите уязвимый контейнер.
Замените уязвимую версию на исправленную.
Пересоберите контейнер.
Запустите исправленную среду.
Повторите попытку воспроизведения.
Убедитесь, что уязвимое поведение больше невозможно.
Проверьте журналы приложения на предмет неожиданных административных запросов.
12. Устранение и проверка
Официальное исправление Webhood для CVE-2024-31218 было проверено с использованием фактического исходного выпуска Webhood `v0.9.1`.
Исправляющий коммит:
`735e7fa2814edeec9a2c07778ed51b3c018609f9`
Исправление добавляет миграцию:
`src/backend/migrations/1712252550_generate_random_admin.js`
Миграция проверяет, существует ли уже администратор. Если администратор отсутствует, она создаёт учётную запись администратора со случайно сгенерированным паролем. Это предотвращает захват первого администратора неаутентифицированным запрашивающим через открытый эндпоинт `/api/admins`.
#### Процедура проверки
1. Был извлечён официальный исходный тег Webhood `v0.9.1`.
2. Бэкенд был собран локально из официального исходного кода с использованием его Dockerfile.
3. Полученный образ был запущен на localhost на порту `8091`.
4. Тот же неаутентифицированный запрос на создание администратора, использованный против уязвимой лаборатории, был повторён против исправленного бэкенда.
5. Уязвимая среда ранее принимала запрос с HTTP `200`.
6. Исправленный бэкенд `v0.9.1` отклонил тот же запрос с HTTP `401`.
Наблюдаемый ответ исправленной среды:
```text
HTTP status: 401
{"code":401,"message":"The request requires valid admin authorization token to be set.","data":{}}
Это подтверждает, что ранее продемонстрированный путь атаки через неаутентифицированное создание администратора был заблокирован в локально собранном бэкенде Webhood v0.9.1.
REMEDIATION VERIFIED: YES
Доказательства:
evidence/05-remediation-verified.png
13. Влияние на безопасность
Успешная эксплуатация может предоставить административные привилегии несанкционированной стороне.
Потенциальные последствия включают:
Несанкционированный административный доступ
Изменение данных приложения
Раскрытие информации приложения
Изменение или удаление записей
Дальнейшее административное злоупотребление приложением
Таким образом, критичность классифицируется как Критическая в соответствии с опубликованной оценкой CVSS.
14. Доказательства
Каталог evidence/ предназначен для хранения скриншотов, демонстрирующих:
Запуск уязвимого приложения
Состояние Docker-контейнера
Уязвимую версию
Запрос воспроизведения
Успешное уязвимое поведение
Вывод обнаружения
Исправленную версию
Неудачное/заблокированное воспроизведение после устранения
Скриншоты не должны содержать реальные учётные данные, персональную информацию, API-ключи или другие конфиденциальные данные.
15. Ограничения
Во время подготовки этой лаборатории локальная среда Windows столкнулась с проблемами при запуске бэкенда Docker Linux.
Windows вернула:
Error: 14098
The component store has been corrupted.
Требуемые функции Windows также изначально были отключены:
VirtualMachinePlatform
Microsoft-Windows-Subsystem-Linux
Поэтому любой результат воспроизведения или скриншот должен точно различать:
Исследование уязвимости
Конфигурацию лаборатории
Предполагаемую процедуру воспроизведения
Успешно выполненное воспроизведение
Не следует заявлять об успешной эксплуатации, если она не была фактически выполнена в изолированной лаборатории.
16. Соображения безопасности
Этот проект предназначен только для авторизованного исследования безопасности.
Лаборатория должна:
Работать локально.
Избегать публичного доступа.
Избегать реальных учётных данных.
Избегать реальных пользовательских данных.
Избегать тестирования против сторонних систем.
Использовать одноразовые тестовые учётные записи.
Использовать изолированную сеть Docker.
Уничтожать уязвимую среду после тестирования.
Пример очистки:
docker compose down
17. Ссылки
National Vulnerability Database — CVE-2024-31218
Webhood security advisory
Webhood/PocketBase source repository
Fixing commit associated with CVE-2024-31218
CWE-306 — Missing Authentication for Critical Function
FIRST CVSS v3.1 specification
18. Отказ от ответственности
Этот репозиторий является проектом по образованию в области кибербезопасности и исследованию уязвимостей.
Уязвимая конфигурация намеренно воспроизведена для контролируемого тестирования. Она не должна развёртываться как общедоступный сервис.
Автор не несёт ответственности за несанкционированное использование методов или артефактов, содержащихся в этом репозитории.