
CVE-2026-41940 (SessionScribe)에 대한 탐지, 완화 및 리버스 엔지니어링 도구: 2026-04-28에 공개된 cPanel/WHM 인증되지 않은 세션 위조 취약점. 심층 방어 능동 완화 심, ModSec 규칙 팩, 원격 프로브, 호스트 내 IOC 스캐너 및 계층별 RE 스냅샷 수집기. GPL v2.
cPanel 및 WHM의 중요 인증되지 않은 원격 코드 실행(RCE) 취약점. 네 번의 HTTP 요청으로 CRLF 주입을 통해 사전 인증 세션의 비밀번호 필드에 삽입하여 루트 세션을 위조합니다. 인증 불필요, 사전 조건 없음, 지원되는 모든 티어에 영향을 미칩니다. 2026년 4월 28일 Sina Kheirkhah / watchTowr Labs가 공개.
Quickstart · ioc-scan · mitigate · remote-probe · Affected builds · Priority order
[!IMPORTANT] 티어 112, 114, 116, 120, 122, 128에는 공급업체 패치가 없습니다. 해당 티어의 모든 빌드가 취약합니다. 업그레이드 또는 마이그레이션이 유일한 영구적인 해결책입니다. 그때까지는 방화벽 TCP/2082, 2083, 2086, 2087, 2095, 2096을 관리 CIDR로 제한하십시오 (
mitigate.sh --apply가 이를 수행합니다). 나머지 표면은 ModSec 규칙 팩으로 보호하십시오.
운영자 우선순위 순서로 된 세 가지 원라인 명령어:```bash
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-mitigate.sh | bash -s -- --apply
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-remote-probe.sh | bash -s -- --target HOST
종료 코드는 플릿 자동화를 위해 설계되었습니다: `ioc-scan`은 COMPROMISED 상태에서 `4`를 반환하고, VULNERABLE 상태에서 `1`을 반환합니다; `mitigate`는 `0` (정상), `1` (적용됨), `2` (수동), `3` (도구 오류)를 반환합니다; `remote-probe`는 대상 중 하나라도 VULN이면 `2`를 반환합니다.
---
## Tools
운영 우선순위 순서로 정렬됩니다. 모든 아티팩트는 구조화된 출력(`--json` / `--jsonl` / `--csv`)을 생성하며, 플릿 집계를 위해 `host`, `os`, `cpanel_version`, `ts`를 키로 사용합니다.
| Tool | 역할 | 실행 위치 |
|---|---|---|
| **[`sessionscribe-ioc-scan.sh`](#sessionscribe-ioc-scansh---ioc-ladder--kill-chain)** | 1차 분류. IOC 사다리, 코드 상태 + 호스트 상태 판정, 킬 체인 재구성, IR 번들. | cPanel 호스트에서 실행 |
| **[`sessionscribe-mitigate.sh`](#sessionscribe-mitigatesh---mitigation-orchestrator)** | 취약점 창을 닫습니다. 단계별 완화: 패치 확인, 방화벽, proxysub, ModSec. | cPanel 호스트에서 실행 |
| **[`sessionscribe-remote-probe.sh`](#sessionscribe-remote-probesh---non-destructive-fleet-probe)** | 보조 자료. 비파괴 4단계 프로브 → 호스트별 VULN/SAFE. | `curl`이 있는 모든 곳 |
| [`modsec-sessionscribe.conf`](#supporting-collateral) | `mitigate`에 의해 배포되는 ModSec 규칙 팩. | Apache 프론트엔드 |
| [`sessionscribe-revsnap.sh`](#supporting-collateral) | 바이너리 비교를 위한 계층별 RE 스냅샷 수집기. | cPanel 호스트에서, `upcp` 주변에서 실행 |
GPL v2. 모든 아티팩트는 위의 raw URL을 통해 `curl`로 바로 다운로드할 수 있습니다.
---
## `sessionscribe-ioc-scan.sh` - IOC 사다리 + 킬 체인
**이것을 먼저 실행하세요.** 기본적으로 탐지 전용입니다 (빠르고 플릿에 적합); `--full`을 추가하여 포렌식 단계를 인라인으로 실행합니다 (방어 타임라인, 공격 수집, 조정, 킬 체인 렌더러, IR 번들).```bash
# fast triage (detection only)
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash
# full kill-chain reconstruction inline
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash -s -- --full
# full + ship IR bundle to intake
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash -s -- --full --upload
# JSONL for SIEM ingest
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash -s -- --jsonl --quiet > host.jsonl
# host IOCs only - periodic post-patch sweep, last 7 days
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash -s -- --ioc-only --since 7
# replay forensic phases against a saved envelope (no re-scan)
curl -fsSL https://raw.githubusercontent.com/rfxn/cpanel-sessionscribe/main/sessionscribe-ioc-scan.sh | bash -s -- --replay /var/cpanel/sessionscribe-ioc/<run_id>.json
두 축이 독립적으로 보고합니다. code_verdict (PATCHED / VULNERABLE / INCONCLUSIVE)는 버전, Perl 소스 패턴 및 cpsrvd 바이너리 핑거프린트에서 비롯됩니다. host_verdict (CLEAN / SUSPICIOUS / COMPROMISED)는 세션 파일 IOC 사다리, 액세스 로그 스캔 및 패턴 A–G 파괴 프로브에서 비롯됩니다. 패치된 호스트라도 이전에 악용으로 인해 IOC가 디스크에 남아 있으면 종료 코드 4가 발생할 수 있습니다.
| 종료 코드 | 코드 상태 | 호스트 상태 | 분류 조치 |
|---|---|---|---|
| 0 | CLEAN/PATCHED | CLEAN | 없음 |
| 1 | VULNERABLE | (any) | cpsrvd 패치 |
| 2 | INCONCLUSIVE | (any) | 수동 코드 상태 검토 (또한: 도구 오류) |
| 3 | (any) | SUSPICIOUS | 세션/액세스 로그 검토 |
| 4 | (any) | COMPROMISED | 전체 IR; 번들 + 업로드 |
원격 프로브가 남긴 nxesec_canary_<nonce> 태그가 있는 세션은 PROBE_ARTIFACT로 분류되며 COMPROMISED로 에스컬레이션되지 않습니다.
--full은 모든 IOC를 방어 활성화와 대조하여 각각을 PRE-DEFENSE, POST-DEFENSE, POST-PARTIAL 또는 UNDEFENDED로 분류한 후, 판정 + 방어 지연 헤드라인으로 요약합니다. PRE-DEFENSE = 호스트가 지표가 도착했을 때 익스플로잇에 대해 열려 있었음; POST-DEFENSE = 부수적 손상 또는 사전 완화 잡음.```
+-- CVE-2026-41940 / IC-5790 --------------------------------------------
| host cpanel.example.com ()
| cpanel unknown os unknown
| verdict COMPROMISED score 315 ioc-scan v2.5.0
| defenses patch x absent modsec + up csf + clean mitigate + ran
+------------------------------------------------------------------------
| -- PRE-DEFENSE (32 events) -- | 2026-03-25T09:43:19Z ! pattern X ioc_attacker_ip_2xx_on_cpsess 57 hit(s) (last 90d) from IC-5790 IPs returned 2xx on /cpsess/ paths - real exploitation | 2026-04-28T14:35:56Z ! pattern X ioc_cve_2026_41940_crlf_access_chain 15 CRLF-bypass chain(s) — POST /login 401 then GET /cpsess 2xx as root within 2s | 2026-04-28T16:38:45Z ! pattern E ioc_pattern_e_websocket_shell_hits 45 external IP(s) reached /cpsess*/websocket/Shell with 2xx | 2026-04-29T08:41:22Z ! pattern F ioc_pattern_f_smark_envelope S_MARK/E_MARK harvester envelope in /root/.bash_history | 2026-04-29T16:41:24Z ! pattern A ioc_pattern_a_ransom_readme /home/user1/README.md | … (22 more Pattern A ransom_readme events across customer homedirs) | 2026-04-29T16:42:09Z ! pattern A ioc_pattern_a_sorry_files_present 608 .sorry-encrypted files present | 2026-04-29T17:52:58Z ! pattern D ioc_pattern_d_acctlog_encrypted /var/cpanel/accounting.log.sorry
| -- DEFENSES -- | 2026-04-29T23:48:21Z + DEFENSE mitigate_first sessionscribe-mitigate.sh first run | 2026-04-29T23:48:21Z + DEFENSE csf csf.conf cpsrvd ports stripped | 2026-04-29T23:48:46Z + DEFENSE modsec modsec rule 1500030 installed
| -- POST-PARTIAL (1 event) -- | 2026-04-30T12:23:42Z ! pattern E ioc_pattern_e_handoff_burst_present 3 distinct external IPs each minted cpsess + reached websocket Shell within 15-min window
| HEADLINE | verdict COMPROMISED (score 315) | defense lag 37d 9h LATE (first IOC 2026-03-25T09:43:19Z, defense up 37d 9h later)
<details>
<summary><b>검사 참조 + 포렌식 단계 + 번들 레이아웃</b> (클릭하여 펼치기)</summary>