Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cpanel2shell-scanner — CVE-2026-41940 (cPanel 및 WHM 인증 우회)를 위한 고정밀 스캐너 | Kitploit
도구/GitHubGitHub/assetnote/cpanel2shell-scanner
Vulnerability ScannersExploitationWeb Application ExploitationPenetration TestingAuthenticationPayload Development
GitHubassetnote/cpanel2shell-scanner

cpanel2shell-scanner

CVE-2026-41940 (cPanel 및 WHM 인증 우회)를 위한 고정밀 스캐너

저장소 보기
92243개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

cpanel2shell-scanner

cPanel/WHM 인증 우회 취약점(CVE-2026-41940)을 탐지하는 고정밀 스캐너입니다. 공개된 개념 증명(PoC)이나 탐지 도구에서 흔히 발생하는 거짓 음성(false negative) 없이 취약한 호스트를 식별하며, 계정 잠금 및 root IP 허용 목록 메커니즘을 트리거하지 않아 순진한 스캐닝을 방해하지 않습니다.

이 도구는 또한 동일 계열의 cpdavd (일반 2079 포트 / TLS 2080 포트) 에서 발생하는 CalDAV 경로 순회 버그(CVE-2026-29205)에 대한 별도의 옵트인(opt-in) 익스플로잇 체인을 제공합니다. 이 체인은 소규모 SMTP 기반 설정 단계가 성공하면 원격 공격자가 루트 권한으로 임의 파일을 읽을 수 있게 합니다. cPanel 11.134.0.26은 기본 RAII 수명 버그를 수정하여 이제 읽기가 권한이 없는 계정 소유자 권한으로 실행됩니다. 경로 순회 자체는 여전히 cpdavd에 도달하지만 해당 계정이 이미 읽을 수 있는 범위를 넘어설 수는 없습니다. CalDAV 체인은 --exploit 플래그 뒤에 있으며, 확인된 대상으로 실제 이메일을 보내고 파일을 읽기 때문에 기본적으로 비활성화되어 있습니다. 자세한 내용은 Exploit 모드 (활성) 섹션을 참조하세요.

이 스캐너가 필요한 이유

CVE-2026-41940에 대한 대부분의 공개 탐지 방법에는 세 가지 문제점이 있습니다. 이 스캐너는 각 문제를 해결합니다.

이 탐지 기술에 대한 블로그 게시물은 여기에서 읽을 수 있습니다: https://slcyber.io/research-center/high-fidelity-check-for-the-cpanel-authentication-bypass-cve-2026-41940/

프록시 경로도 확인합니다 (관리 포트만 확인하지 않음)

cPanel의 가상 호스트별 Apache 설정은 요청의 Host 헤더와 관계없이 /___proxy_subdomain_whm을 127.0.0.1:2086으로, /___proxy_subdomain_cpanel을 127.0.0.1:2080으로 전달하는 ProxyPass를 설치합니다. RewriteCond는 관리 서브도메인을 프록시 경로에 매핑하는 재작성만 제한할 뿐입니다. ProxyPass 자체는 무조건적입니다. cPanel 관리 Apache가 제공하는 모든 가상 호스트에서 이러한 경로에 접근하면 관리 포트와 동일한 취약한 백엔드에 도달합니다.

포트 2082/2083/2086/2087만 프로브하는 스캐너는 해당 포트가 방화벽으로 차단된 경우 호스트를 취약하지 않다고 보고하지만, 실제로는 443 포트를 통해 완전히 접근 가능합니다. 이 스캐너는 기본적으로 2087, 2083 및 443의 두 프록시 경로를 프로브합니다.

cphulkd 또는 root IP 허용 목록에 차단되지 않음

cPanel은 소수의 실패한 비밀번호 시도 후 계정을 잠그는 cphulkd와 루트 로그인을 구성된 소스 주소 목록으로 제한하는 authorized_whm_root_ips를 제공합니다. 우회를 악용하여 root 세션을 주입하려는 스캐너는 다음과 같은 문제가 있습니다.

  • 스캐너의 IP가 root 허용 목록에 없을 때 자동으로 무시되어 거짓 음성이 발생합니다.
  • 대상 계정에 대해 실패한 비밀번호 이벤트를 누적시켜 결국 계정을 잠그고 탐지 및 정당한 로그인을 모두 방해합니다.

이 스캐너는 WHM 측에서 expired=1을 무작위로 생성된 사용자 이름 아래의 세션 페이로드에 주입하여 두 문제를 모두 피합니다. 세션 주입은 결과로 생성된 cpsessXXXX URL을 방문하고 응답 본문에서 msg_code:[expired_session]을 일치시켜 확인됩니다. 이는 주입이 성공한 경우에만 존재합니다. 실제 계정이 대상이 아니므로 실제 계정이 잠길 수 없으며, root 로그인을 시도하지 않으므로 root 허용 목록도 관련이 없습니다.

필요한 경우 사용자 이름 단어 목록을 사용합니다

cPanel 데몬(cpaneld, 포트 2083 및 /___proxy_subdomain_cpanel 경로)은 제공된 사용자 이름이 디스크의 기존 cPanel 계정에 해당해야 합니다(-f /var/cpanel/users/$user). root는 시스템 사용자이므로 cPanel 사용자가 아니므로 이 검사를 절대 통과할 수 없습니다. root만 시도하는 탐지 방법은 이 표면에서 거짓 음성을 생성합니다. 이 스캐너는 cPanel 표면에 대해 일반적인 cPanel 사용자 이름의 구성 가능한 단어 목록을 사용하고, WHM 표면(이러한 제한이 없음)에서는 무작위 사용자 이름 경로로 폴백합니다.

탐지 작동 방식

각 대상에 대해 스캐너는 표면별로 다음 단계를 수행합니다.

  1. GET /login을 발행하고 Set-Cookie 헤더에서 whostmgrsession(WHM) 또는 cpsession(cPanel)을 읽습니다. 쿠키에는 쉼표로 구분된 세션 이름 구성 요소가 포함되어 있습니다.
  2. 디코딩된 값이 <user>:\xff\nexpired=1인 Authorization: Basic 헤더와 함께 GET /를 발행합니다. 후행 \nexpired=1은 세션 주입 페이로드입니다. 1단계의 세션 쿠키는 수정 없이 재전송됩니다.
  3. 응답에서 Location 헤더를 읽고 cpsessXXXX 토큰을 추출합니다.
  4. 원래 쿠키와 함께 GET /<cpsessXXXX>/를 발행하고 본문에서 msg_code:[expired_session]을 찾습니다. 이것이 존재하면 세션 주입이 성공했으며 호스트가 취약함을 증명합니다.

WHM(포트 2087 및 443의 /___proxy_subdomain_whm 경로)에서 사용자 이름은 10개의 16진수 문자가 뒤따르는 무작위 u입니다. cPanel(포트 2083 및 443의 /___proxy_subdomain_cpanel 경로)에서 스캐너는 사용자 이름 단어 목록을 순회하며 첫 번째 일치에서 중지됩니다.

기본적으로 스캐너는 2087, 2083, 443을 순서대로 프로브하고 어떤 표면이라도 취약점을 확인하는 즉시 중지됩니다.

CalDAV 경로 순회 익스플로잇 (--exploit)

CVE-2026-29205 — 2026년 5월 13일 cPanel/WHM WP2 보안 업데이트. cPanel 11.134.0.26에서 수정되었습니다. 권고는 이 익스플로잇 체인이 악용하는 동일한 cpdavd 권한 하향(privilege-drop) 회귀를 추적합니다.

버그 및 익스플로잇 체인에 대한 전체 설명: https://slcyber.io/research-center/new-age-of-collisions-reading-arbitrary-files-pre-auth-as-root-in-cpanel-cve-2026-29205

포트 2079(일반 HTTP) 및 2080(TLS)의 cpdavd는 CalDAV/CardDAV 리소스를 제공할 때 구축하는 <principal>/<collection>/... 경로를 신뢰합니다. 경로 구성 요소에 .. 세그먼트를 인코딩하고 디스크 이름에도 순회를 인코딩하는 메일디르 폴더(x-attachment-1-y)를 가리키는 요청을 조작함으로써, cpdavd가 소유권이나 권한에 관계없이 디스크의 모든 파일을 루트로 읽도록 강제할 수 있습니다. 여기에는 /etc/shadow, /etc/passwd 및 사용자별 메일 스풀이 포함됩니다.

읽기 전에 권한을 계정 소유자로 낮추기로 되어 있던 심층 방어(Defense-in-depth)는 조용히 실패했습니다. Cpanel::AccessIds::ReducedPrivileges 객체가 void 컨텍스트에서 생성되어 소멸자가 읽기 실행 전에 루트 권한을 복원했습니다. cPanel 11.134.0.26은 객체를 my $privs 렉시컬에 바인딩하여 -f / stat / open / read 체인 전체에 걸쳐 유지되도록 합니다. 패치된 호스트에서는 읽기가 루트 대신 권한 없는 계정 소유자로 실행됩니다.

읽기가 작동하려면 취약한 폴더가 디스크에 존재해야 합니다. cPanel은 수신자 <user>+x-attachment-1-y@<domain>에 대해 이메일이 해당 하위 주소에 처음 도착할 때 .x-attachment-1-y라는 폴더를 자동으로 생성합니다. 따라서 체인은 다음과 같습니다.

  1. 호스트의 TLS 인증서 SAN(주체 대체 이름)에서 가능한 수신자 도메인을 열거합니다.
  2. 각 도메인에 대해 후보 로컬 파트(도메인의 첫 번째 레이블과 info, admin, webmaster와 같은 일반적인 사서함 접두사의 작은 단어 목록)를 파생합니다.
  3. 구성된 아웃바운드 릴레이(예: SendGrid)에 대해 하나의 SMTP 세션을 열고 각 후보에 <prefix>+x-attachment-1-y@<domain>을 보냅니다. 수락된 RCPT TO 응답이 추적됩니다.
  4. 재시도 사다리(5초, 10초, 20초, 30초)를 통해 cPanel 받은편지함 전달이 폴더를 구체화할 때까지 기다립니다.
  5. 각 수락된 수신자에 대해 /calendar/ 및 /addressbook/ 컬렉션 접두사 모두에서 cpdavd(포트 2080(TLS) 및 2079(일반))에 대해 경로 순회 GET을 보냅니다.

성공하면 파일의 바이트를 반환합니다. 발견 결과에는 사용된 이메일, 컬렉션, 바이트 수 및 처음 200바이트 미리보기가 기록됩니다.

이 검사는 --exploit이 전달되지 않으면 비활성화됩니다. 활성화되면 폴더 생성 단계를 건너뛸 수 없으므로 작동하는 아웃바운드 SMTP 릴레이가 필요합니다(아래 설정 파일 참조).

대상 지정 vs 분사식 익스플로잇

익스플로잇은 cPanel의 Email Accounts 기능에서 구성된 실제 가상 이메일 계정에 대해서만 작동합니다. 포괄 주소(Catch-all)는 작동하지 않습니다. 포괄 주소는 Exim의 system_aliases 라우터를 통해 전달되며 dovecot_virtual_delivery 전송에 도달하지 않으므로 .x-attachment-1-y/ 폴더를 생성하는 lda_mailbox_autocreate 경로를 트리거하지 않습니다.

대상에 유효한 가상 이메일을 이미 알고 있는 경우 --email과 함께 전달하세요.

root@kitploit:~
python scanner.py --config scanner.ini --email [email protected] target.com

--email은 인증서 SAN 열거 및 접두사 단어 목록을 완전히 건너뛰고 제공한 주소로 정확히 하나의 메시지를 보냅니다. 여러 개의 알려진 계정을 대상으로 하기 위해 반복할 수 있습니다. 대상 지정 경로는 분사 경로보다 훨씬 더 신뢰할 수 있습니다.

--email 없이 스캐너는 호스트의 TLS 인증서에서 추출한 도메인당 약 15개의 일반적인 접두사(info, admin, webmaster 등)를 분사하는 방식으로 폴백합니다. Assetnote가 200개의 cpdavd 노출 호스트 샘플에서 측정한 결과에 따르면 **분사 적중률은 약 10%**입니다. 분사 모드의 깨끗한 결과는 호스트가 패치되었다는 약한 증거이며, 실제 계정으로 --email을 사용하여 다시 실행하는 것이 확인하는 유일한 신뢰할 수 있는 방법입니다.

설정 파일

익스플로잇 모드는 --config를 통해 INI 파일을 읽습니다.

root@kitploit:~
python scanner.py --config scanner.ini --exploit example.com

scanner.ini.example을 scanner.ini로 복사하고 SMTP 자격 증명을 입력한 다음 선택적으로 CalDAV 기본값을 조정합니다. scanner.ini는 .gitignore에 있으므로 채워진 복사본은 로컬에 남아 있습니다. SMTP 암호는 SCANNER_SMTP_PASSWORD 환경 변수를 통해 제공할 수도 있으며, 파일의 password 필드가 비어 있을 때만 우선 적용됩니다.

설치

root@kitploit:~
pip install -r requirements.txt

Python 3.8 이상이 필요합니다.

사용법

단일 대상:

root@kitploit:~
python scanner.py example.com

위치 인수를 통한 여러 대상:

root@kitploit:~
python scanner.py host-a.example.com host-b.example.com:2083

대상 목록 파일(한 줄에 하나씩). #으로 시작하는 줄은 무시됩니다.

root@kitploit:~
python scanner.py -f targets.txt

표준 입력에서 대상 읽기:

root@kitploit:~
cat targets.txt | python scanner.py

대상은 호스트 이름 또는 host:port일 수 있습니다. 포트가 지정되면 스캐너는 해당 포트만 프로브합니다. 그렇지 않으면 2087, 2083, 443을 프로브합니다.

일반 옵션

  • -u, --users — cPanel 표면에서 시도할 쉼표로 구분된 cPanel 사용자 이름. 기본값은 작은 내장 목록입니다.
  • -U, --users-file — 한 줄에 하나의 cPanel 사용자 이름이 있는 파일.
  • -p, --ports — 대상에 포트가 지정되지 않은 경우 프로브할 쉼표로 구분된 포트. 기본값은 2087,2083,443입니다.
  • -t, --threads — cPanel 표면에 대해 사용자 이름 목록을 순회하는 데 사용되는 대상당 스레드 수. 기본값은 10입니다.
  • -c, --concurrency — 병렬로 스캔되는 대상 수. 기본값은 20입니다.
  • -T, --timeout — 요청당 시간 초과(초). 기본값은 15입니다.
  • -o, --output — 발견된 취약한 대상을 한 줄에 하나씩 이 파일에 추가합니다.
  • --json — 대상당 JSON 라인 레코드를 이 파일에 씁니다.
  • -q, --quiet — stdout에 취약한 대상만 인쇄합니다. 연결 실패 및 깨끗한 대상은 --json에 계속 기록되고 요약에 계산됩니다.
  • --no-progress — 진행 표시줄을 비활성화합니다.
  • --exploit — CalDAV 경로 순회 체인을 활성화합니다. 기본적으로 비활성화되어 있습니다. 이 플래그가 잠금 해제하는 부작용은 를 참조하세요.
도구 다운로드
Exploit 모드 (활성)
  • --config — SMTP 릴레이 자격 증명 및 CalDAV 조정 가능 변수가 있는 INI 파일. scanner.ini.example을 참조하세요.
  • --read-file — CalDAV 체인이 성공할 때 유출할 파일. 설정 파일의 값을 재정의합니다. 기본값은 /etc/shadow입니다. 루트 전용 파일이므로 성공적인 읽기는 패치 전(섀도 내용 반환)과 패치 후(open 거부됨, 본문 비어 있음 → NOT VULNERABLE로 보고)를 구분합니다. 패치/미패치 구분 없이 순회 도달 가능성만 테스트하려면 --read-file /etc/passwd를 사용하세요.
  • --caldav-only — 41940 검사를 건너뛰고 CalDAV 체인만 실행합니다. --exploit을 암시합니다. 이미 CalDAV에 도달 가능한 것으로 알려진 대상 목록에 대해 체인을 다시 실행할 때 유용합니다.
  • --email ADDR — 대상의 알려진 가상 이메일 계정. 인증서 SAN 열거 및 분사 단어 목록을 건너<|end▁of▁text|>