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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
POC_CVE-2026-45185 — nuclei-templates용 POC_CVE-2026-45185 | Kitploit
도구/GitHubGitHub/mj-bin/poc_cve-2026-45185
Vulnerability AnalysisExploitationFuzzingLearning & EducationEmail SecurityLabs & Practice
GitHubmj-bin/poc_cve-2026-45185

POC_CVE-2026-45185

nuclei-templates용 POC_CVE-2026-45185

저장소 보기
2143개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-45185 Nuclei 템플릿 검증 실험실

이 저장소는 일반적인 익스플로잇 PoC 저장소가 아닙니다. CVE-2026-45185에 대한 projectdiscovery/nuclei-templates에 기여하기 위한 템플릿의 동작을 재현하고 검토하는 로컬 검증 실험실입니다.

root@kitploit:~
The nuclei code template is not a version-only detector.
It directly controls STARTTLS, BDAT, TLS close_notify, and a following
SMTP plaintext byte on the same TCP connection.

This sequence matches in the local vulnerable Exim 4.99.2 GnuTLS lab and does
not match in the patched Exim 4.99.3 GnuTLS lab under the same conditions.

현재 검증 신호는 원격 SMTP 응답 오라클이며, UAF 쓰기 자체를 직접 관찰하는 것이 아닙니다. 내부적으로 이 CVE는 use-after-free로, TLS 종료 후 줄바꿈 바이트(\r/\n)가 해제된 GnuTLS 전송 버퍼에 기록될 수 있습니다. 실제로 클라이언트가 SMTP 응답을 통해 해제된 버퍼 쓰기를 직접 관찰하는 것은 현실적이지 않습니다. 따라서 이 README와 템플릿은 bdat_ungetc -> tls_ungetc UAF 쓰기 또는 RCE를 직접 증명한다고 주장하지 않습니다. 대신 템플릿은 트리거 흐름 중에 나타나는 수신 스택/상태 복구 차이를 감지합니다.

취약점 메커니즘을 추적하는 동안, STARTTLS + BDAT 처리 중 TLS close_notify 후에 BDAT 수신 스택의 하위 계층에 오래된 tls_* 함수 포인터가 남아 함수 포인터로 올바르게 복원되지 않는 현상을 관찰했습니다. 이 상태는 서버가 다음 SMTP 명령을 처리하는 방식에서 드러납니다. 분할된 BDAT가 첫 번째 완료에 도달한 후 동일 세션에서 을 보내면, 취약한 Exim 4.99.2 GnuTLS 실험실은 을 반환하는 반면, 패치된 Exim 4.99.3 GnuTLS 실험실은 로 정상 처리합니다. 이 명확한 취약/패치 응답 차이가 로컬 승인된 nuclei 코드 템플릿의 매처로 사용됩니다.

도구 다운로드
smtp_*
NOOP
421 lost input connection
250 OK

더 깊은 취약점 흐름 분석은 CVE-2026-45185-Technical-Analysis.md를 참조하십시오.

검증 매트릭스

대상버전TLS 백엔드STARTTLSCHUNKING포트예상 nuclei 결과
취약Exim 4.99.2GnuTLS예예127.0.0.1:2525일치
패치Exim 4.99.3GnuTLS예예127.0.0.1:2526불일치

공통 SMTP 봉투 수신자 (RCPT TO):

root@kitploit:~
[email protected]

Docker 실험실의 lab_rcpt ACL은 이 봉투 수신자를 허용합니다. 일반 SMTP 대상에서 RCPT TO가 거부되면 시퀀스가 BDAT 본문 파서에 도달하지 못할 수 있으므로 템플릿에 허용된 수신자가 필요합니다.

이 값은 BDAT 본문 내부의 To: 헤더와 다릅니다. RCPT TO 수신자는 서버의 수신자 검사를 통과해야 하는 SMTP 봉투 주소입니다. BDAT 본문의 To: 값은 메시지 헤더 텍스트일 뿐이며, 서버에 사서함으로 존재하거나 허용될 필요가 없습니다.

템플릿 위치

root@kitploit:~
templates/CVE-2026-45185.yaml

템플릿 이름:

root@kitploit:~
Exim 4.97-4.99.2 GnuTLS STARTTLS BDAT - Same-Session Response Check

템플릿은 metadata.verified: true로 작성되었으며 code 및 intrusive 태그가 있습니다.

빠른 검증

POC_2026_45185/ 디렉토리에서 다음 명령을 실행하십시오.

root@kitploit:~
docker compose build
docker compose up -d

템플릿 구문 검증:

root@kitploit:~
nuclei -duc -validate -code -t templates/CVE-2026-45185.yaml

실행 전 로컬 코드 템플릿 서명:

root@kitploit:~
nuclei -duc -code -t templates/CVE-2026-45185.yaml -sign

취약한 실험실에 대해 실행:

root@kitploit:~
nuclei -code \
  -t templates/CVE-2026-45185.yaml \
  -u 127.0.0.1:2525 \
  -var [email protected] \
  -debug

예상 결과:

root@kitploit:~
CVE-2026-45185: vulnerable response oracle matched

패치된 실험실에 대해 실행:

root@kitploit:~
nuclei -code \
  -t templates/CVE-2026-45185.yaml \
  -u 127.0.0.1:2526 \
  -var [email protected] \
  -debug

예상 결과:

root@kitploit:~
no match
NO-MATCH: patched-like response: NOOP succeeded after split trigger

nuclei code 프로토콜은 기본적으로 실행되지 않으므로 -code가 필요합니다. 또한 nuclei는 서명되지 않은 code 템플릿을 차단합니다. 로컬 nuclei 개인 키가 암호로 보호된 경우 대화형 터미널에서 서명 명령을 실행하고 해당 암호를 입력하십시오. 다이제스트가 템플릿 내용을 포함하므로 템플릿을 변경할 때마다 다시 서명하십시오.

예제 Nuclei 결과

다음 스크린샷은 템플릿이 서명된 후 로컬 실험실 응답 오라클 결과를 보여줍니다. 이는 위에서 설명한 동일 세션 응답 차이에 대한 검증 증거이며, 내부 UAF 쓰기의 직접적인 디버거나 ASAN 증명이 아닙니다.

취약한 Exim 4.99.2 GnuTLS 실험실 (127.0.0.1:2525):

취약한 Exim 4.99.2 로컬 nuclei 일치

패치된 Exim 4.99.3 GnuTLS 실험실 (127.0.0.1:2526):

패치된 Exim 4.99.3 로컬 nuclei 불일치

왜 코드 프로토콜인가?

이 CVE의 핵심은 SMTP 배너나 버전 확인이 아닙니다. 템플릿은 동일한 TCP 연결에서 다음과 같은 전송 상태 전환을 생성해야 합니다:

root@kitploit:~
평문 SMTP EHLO
-> STARTTLS
-> 동일 TCP 연결에서 TLS 핸드셰이크
-> TLS EHLO / MAIL FROM / RCPT TO / BDAT 70 LAST
-> BDAT 본문의 처음 69바이트를 TLS 애플리케이션 데이터로
-> TCP 소켓을 닫지 않고 TLS close_notify
-> 동일 TCP 연결에서 평문으로 마지막 본문 바이트
-> 동일 세션 평문 NOOP 응답 확인

템플릿이 확인하는 것

YAML 템플릿 내부의 Python 코드는 다음 모든 조건이 통과된 후에만 고정 마커를 출력합니다. nuclei 매처는 해당 마커만 일치시킵니다.

root@kitploit:~
Exim 식별 발견됨
AND 평문 EHLO에서 STARTTLS 광고됨
AND 평문 EHLO에서 CHUNKING 광고됨
AND STARTTLS가 수락됨
AND TLS EHLO에서 CHUNKING 광고됨
AND MAIL FROM이 수락됨
AND RCPT TO가 수락됨
AND 분할 close_notify BDAT가 첫 번째 완료에 도달함
AND 첫 번째 완료에 "250 OK id=" 포함
AND 동일 세션 평문 NOOP 응답에 "421" 포함
AND 동일 세션 평문 NOOP 응답에 "lost input connection" 포함

템플릿은 다음 신호 중 하나만으로는 일치하지 않습니다:

root@kitploit:~
버전만
타임아웃만
연결 끊김만
빈 응답만
수신자 거부
STARTTLS/CHUNKING 광고만

응답 오라클

두 실험실 모두 분할 BDAT 메시지를 첫 번째 완료까지 처리합니다.

root@kitploit:~
250- 70 byte chunk, total 72
250 OK id=...

차이는 동일한 SMTP 세션에서 다음 SMTP 평문 명령이 전송될 때 나타납니다.

취약한 4.99.2:

root@kitploit:~
NOOP -> 421 exim-lab.local lost input connection
QUIT -> 421 exim-lab.local lost input connection
RSET -> 421 exim-lab.local lost input connection

패치된 4.99.3:

root@kitploit:~
NOOP -> 250 OK
QUIT -> 221 exim-lab.local closing connection
RSET -> 250 Reset OK

해석:

root@kitploit:~
관찰:
  두 실험실 모두 분할 BDAT 메시지 완료에 도달합니다.
  취약한 실험실만 동일 세션에서 다음 평문 SMTP 명령 루프로 깔끔하게 복귀하지 못합니다.

증거:
  취약한 후속 응답은 421 lost input connection입니다.
  패치된 후속 응답은 250 OK 또는 221 closing connection입니다.

추론:
  이 차이는 STARTTLS close_notify 후 수신 스택/상태 복구 차이와 일치합니다.

페이로드 형태

템플릿은 BDAT 본문으로 다음 70바이트 메시지를 사용합니다.

root@kitploit:~
From: [email protected]\r\n
To: [email protected]\r\n
Subject: poc\r\n
\r\n
body

SMTP 봉투 수신자는 템플릿 변수 recipient를 통해 별도로 전달됩니다. 본문의 To: 헤더는 텍스트이며 SMTP RCPT TO가 수락되는지 여부와 무관하므로 서버에 존재하거나 수락될 필요가 없습니다.

분할 형태:

root@kitploit:~
BDAT 70 LAST
TLS 본문:   처음 69바이트, "bod"로 끝남
TLS 이벤트:  close_notify
평문:      마지막 바이트 "y"
후속:      NOOP

로컬 온전성 검사

두 실험실 모두 Exim, STARTTLS 및 CHUNKING을 광고하는지 수동으로 확인할 수 있습니다.

root@kitploit:~
printf 'EHLO lab-client.local\r\nQUIT\r\n' | nc -w 3 127.0.0.1 2525
printf 'EHLO lab-client.local\r\nQUIT\r\n' | nc -w 3 127.0.0.1 2526

예상 신호:

root@kitploit:~
Exim
STARTTLS
CHUNKING

정상적인 STARTTLS 경로도 확인할 수 있습니다:

root@kitploit:~
openssl s_client -starttls smtp -connect 127.0.0.1:2525 -crlf
openssl s_client -starttls smtp -connect 127.0.0.1:2526 -crlf

범위 및 안전

  • 로컬 Docker 실험실 또는 명시적으로 승인된 SMTP 대상에만 사용하십시오.
  • 타사 Exim 서버를 스캔하거나 트리거를 보내지 마십시오.
  • 이 저장소는 RCE 익스플로잇 체인, 지속성 또는 사후 익스플로잇을 제공하지 않습니다.
  • 기본 Docker 이미지는 디버그 빌드이며 ASAN 빌드가 아닙니다.
  • 내부 호출 경로 확인을 위한 후속 gdb/ASAN 작업은 debugging/ 및 notes/source-walkthrough-progress.md에서 별도로 추적됩니다.

저장소 구조

root@kitploit:~
POC_2026_45185/
  compose.yaml
  images/            로컬 nuclei 검증 스크린샷
  vulnerable/        Exim 4.99.2 + GnuTLS 디버그 빌드
  patched/           Exim 4.99.3 + GnuTLS 디버그 빌드
  nuclei-templates/  서브모듈: 로컬 nuclei 템플릿 작업 공간

참고 자료

  • XBOW 글: https://xbow.com/blog/dead-letter-cve-2026-45185-xbow-found-rce-exim
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-45185
  • Exim 보안 권고: https://exim.org/static/doc/security/EXIM-Security-2026-05-01.1/EXIM-Security-2026-05-01.1.txt
  • oss-security 공지: https://www.openwall.com/lists/oss-security/2026/05/12/4
  • 업스트림 Exim 패치: https://code.exim.org/exim/exim/commit/040c1ce6889f435206677ed532c9a4185cf0bcaf