
Nuclei 탐지 템플릿: CVE-2026-41473, CyberPanel AI Scanner 2.4.4 이전 버전의 인증되지 않은 읽기/쓰기 API 접근 결함입니다. 두 개의 HTTP 프로브를 사용하여 인증 누락을 확인합니다.
2.4.4 이전 버전의 CyberPanel에 영향을 미치는 CVE-2026-41473용 Nuclei 탐지 템플릿입니다.
CyberPanel의 AI Scanner 기능은 인증 없이 두 개의 API 엔드포인트를 노출합니다:
| 엔드포인트 | 메서드 | 영향 |
|---|---|---|
/api/ai-scanner/list-api-keys | GET | 관리자 사용자 이름, API 키 접두사, 호스팅된 도메인 이름 및 스캔 ID를 공개합니다 |
/api/ai-scanner/callback | POST | 인증 없이 스캔 기록에 임의 쓰기를 허용합니다 |
두 엔드포인트 모두 /api/* URL 접두사 아래에 위치하며, CyberPanel의 secMiddleware는 이 접두사를 무조건적으로 세션 인증 검사에서 제외합니다. 두 엔드포인트에 도달하는 데 토큰, 세션 쿠키 또는 어떤 종류의 자격 증명도 필요하지 않습니다.
읽기 엔드포인트는 대상 열거를 가능하게 합니다. 쓰기 엔드포인트는 스캔 기록 손상을 가능하게 하며, AI Scanner 대시보드의 저장형 XSS(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 (중요 기능에 대한 인증 누락)
수정 버전: CyberPanel 2.4.4 (커밋 8eb29181cb137baa4adb4bba5dce60f601d55a5f)
템플릿은 두 개의 요청을 보냅니다:
요청 1 — GET /api/ai-scanner/list-api-keys
대상이 AI Scanner 기능이 활성화되어 있고 읽기 엔드포인트가 보호되지 않은 CyberPanel 인스턴스인지 확인합니다. HTTP 200과 함께 JSON 구조(api_keys, recent_scans, is_payment_configured)를 매칭합니다. 관리자 사용자 이름, API 키 접두사, 도메인 이름 및 스캔 ID를 명명된 출력으로 추출합니다.
요청 2 — 빈 본문 {}이 포함된 POST /api/ai-scanner/callback
실제 쓰기를 수행하지 않고 쓰기 엔드포인트를 탐색합니다. 빈 본문은 scan_id가 없음을 의미하므로 서버는 기존 ScanHistory 레코드를 매칭하거나 수정할 수 없습니다. 취약한 서버(< 2.4.4)에서는 인증 검사가 건너뛰어지고 Django는 오류 본문에 scan_id가 포함된 HTTP 400을 반환합니다. 즉, 서버는 인증을 전혀 적용하지 않은 채 입력 검증에 도달했습니다. 패치된 서버(≥ 2.4.4)에서는 X-API-Key 헤더 검사가 먼저 실행되어 scan_id가 읽히기 전에 HTTP 401을 반환합니다.
매칭에는 다음이 모두 필요합니다:
scan_id + application/json 콘텐츠 유형이 조합은 두 요청 모두에서 인증이 적용되지 않은 채 CyberPanel AI Scanner 로직에 도달했음을 확인하며, WAF 차단, 리버스 프록시 오류 및 무관한 400 응답을 배제합니다.
nuclei -t cyberpanel-aisscanner-unauth-rw-cve-2026-41473.yaml -u https://target:8090
# Against a list of targets
nuclei -t cyberpanel-aisscanner-unauth-rw-cve-2026-41473.yaml -l targets.txt
| 버전 | 상태 |
|---|---|
| AI Scanner가 있는 CyberPanel < 2.4.4 | 취약함 |
| CyberPanel ≥ 2.4.4 | 패치됨 |
| AI Scanner 모듈이 없는 CyberPanel | 영향 없음 |
AI Scanner 기능이 없는 CyberPanel 인스턴스(일반적으로 2.3 이전 버전)는 매칭되지 않습니다. list-api-keys 엔드포인트가 404를 반환하고 템플릿이 트리거되지 않습니다.