
Шаблон обнаружения Nuclei для CVE-2026-41473 — уязвимости неаутентифицированного доступа к API на чтение/запись в CyberPanel AI Scanner до версии 2.4.4. Использует два HTTP-запроса для подтверждения отсутствия аутентификации.
| Конечная точка | Метод | Воздействие |
|---|
/api/ai-scanner/list-api-keys | GET | Раскрывает имена администраторов, префиксы API-ключей, имена размещённых доменов и ID сканирований |
/api/ai-scanner/callback | POST | Принимает произвольную запись в историю сканирований без аутентификации |
Обе конечные точки находятся под префиксом URL /api/*, который secMiddleware в CyberPanel безусловно освобождает от проверок сессионной аутентификации. Для доступа к любой из конечных точек не требуется ни токена, ни сессионного cookie, ни каких-либо учётных данных.
Конечная точка чтения позволяет перечислять цели. Конечная точка записи позволяет повреждать историю сканирований, а при объединении с сохранённым XSS в панели AI Scanner (CVE-2026-41472) достигает неаутентифицированного удалённого выполнения кода через манипуляцию cron-задачами.
CVSS 3.1: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — 9.8 Critical
CWE: CWE-306 (Missing Authentication for Critical Function)
Исправлено в: CyberPanel 2.4.4 (коммит 8eb29181cb137baa4adb4bba5dce60f601d55a5f)
Шаблон отправляет два запроса:
Запрос 1 — GET /api/ai-scanner/list-api-keys
Подтверждает, что цель является экземпляром CyberPanel с включённой функцией AI Scanner и незащищённой конечной точкой чтения. Сопоставление выполняется по структуре JSON (api_keys, recent_scans, is_payment_configured) с HTTP 200. Извлекает имена администраторов, префиксы API-ключей, имена доменов и ID сканирований как именованные выходные данные.
Запрос 2 — POST /api/ai-scanner/callback с пустым телом {}
Проверяет конечную точку записи без выполнения реальной записи. Пустое тело означает отсутствие scan_id, поэтому сервер не может сопоставить или изменить ни одну существующую запись ScanHistory. На уязвимом сервере (< 2.4.4) проверка аутентификации пропускается, и Django возвращает HTTP 400 с scan_id в теле ошибки — сервер достигает проверки входных данных, так и не применив аутентификацию. На исправленном сервере (≥ 2.4.4) сначала срабатывает проверка заголовка X-API-Key и возвращается HTTP 401 до того, как scan_id будет прочитан.
Для совпадения требуются все условия:
scan_id в теле ответа + тип содержимого application/jsonТакая комбинация подтверждает, что логика AI Scanner CyberPanel была достигнута в обоих запросах без применения аутентификации, исключая при этом блокировки WAF, ошибки обратного прокси и посторонние ответы 400.
nuclei -t cyberpanel-aisscanner-unauth-rw-cve-2026-41473.yaml -u https://target:8090
# Против списка целей
nuclei -t cyberpanel-aisscanner-unauth-rw-cve-2026-41473.yaml -l targets.txt
| Версия | Статус |
|---|---|
| CyberPanel < 2.4.4 с AI Scanner | Уязвима |
| CyberPanel ≥ 2.4.4 | Исправлена |
| CyberPanel без модуля AI Scanner | Не затронута |
Экземпляры CyberPanel без функции AI Scanner (как правило, версии до 2.3) не будут совпадать — конечная точка list-api-keys вернёт 404, и шаблон не сработает.