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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Dead.Letter-CVE-2026-45185 — # CVE-2026-45185 (Dead.Letter) Exim MTA 셸 기반 취약점 스캐너 GnuTLS 빌드에서 use-after-free를 탐지하는 Exim MTA용 셸 기반 취약점 스캐너입니다. 버전, TLS 라이브러리, CHUNKING 구성을 확인하며, CI/CD 통합을 위한 JSON 출력을 생성합니다. | Kitploit
도구/GitHubGitHub/liamromanis101/dead.letter-cve-2026-45185
Vulnerability ScannersVulnerability AnalysisExploitationScripting & AutomationConfiguration AuditingNetwork SecurityDevSecOpsEmail Security
GitHub
liamromanis101/dead.letter-cve-2026-45185

Dead.Letter-CVE-2026-45185

# CVE-2026-45185 (Dead.Letter) Exim MTA 셸 기반 취약점 스캐너 GnuTLS 빌드에서 use-after-free를 탐지하는 Exim MTA용 셸 기반 취약점 스캐너입니다. 버전, TLS 라이브러리, CHUNKING 구성을 확인하며, CI/CD 통합을 위한 JSON 출력을 생성합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-45185 — "Dead.Letter" Exim 취약점 스캐너

Linux 시스템이 CVE-2026-45185에 취약한지 탐지하는 셸 스크립트입니다. 이 취약점은 Exim 메일 전송 에이전트의 use-after-free 버그로, 원격 코드 실행으로 이어질 수 있습니다.

CI/CD 파이프라인, 구성 관리 도구 및 임시 시스템 감사에 사용하도록 설계되었습니다. 사람이 읽을 수 있는 출력과 기계가 읽을 수 있는 (JSON) 출력을 모두 생성합니다.


취약점

CVE-2026-45185 (별칭: Dead.Letter)는 GnuTLS가 TLS를 처리할 때 Exim의 BDAT(바이너리 데이터) 메시지 본문 파싱에서 발생하는 use-after-free 버그입니다.

TLS 종료 중 Exim은 TLS 전송 버퍼를 해제합니다. 그러나 중첩된 BDAT 수신 래퍼가 여전히 들어오는 바이트를 처리하고 ungetc()를 호출하여 해제된 영역에 단일 \n 바이트를 쓸 수 있습니다. 이 1바이트 쓰기는 힙 할당자 메타데이터를 손상시키며, 공격자는 이를 통해 추가 메모리 프리미티브를 얻고 원격 코드 실행을 달성할 수 있습니다.

속성세부 정보
CVECVE-2026-45185
별칭Dead.Letter
유형Use-After-Free (CWE-416)
구성 요소Exim BDAT/CHUNKING 핸들러 (GnuTLS 빌드 전용)
공격 벡터네트워크 — 인증 불필요, TLS 연결 및 CHUNKING 확장만 필요
영향받는 버전Exim 4.97 – 4.99.2, GnuTLS 빌드 전용
수정된 버전Exim 4.99.3
발견자Federico Kirschbaum, XBOW Security Lab (2026년 5월 1일 보고)

OpenSSL 빌드는 영향을 받지 않습니다. 이 취약점은 USE_GNUTLS=yes로 컴파일된 Exim에만 해당됩니다. Exim이 OpenSSL과 연결된 경우, 버전에 관계없이 취약하지 않습니다.


스크립트가 확인하는 사항

스크립트는 의사 결정 트리를 통해 작동하며, 안전한 조건이 확인되는 즉시 중단하고 시스템을 취약하지 않음으로 표시합니다.

확인 1 — Exim 존재 여부 $PATH 및 일반 설치 위치 (/usr/sbin/exim, /usr/sbin/exim4, /usr/local/sbin/exim)를 검색합니다. Exim이 없으면 시스템이 취약하지 않으며 스크립트가 즉시 종료됩니다.

확인 2 — Exim 버전 exim -bV 출력을 파싱하고 영향을 받는 범위 (4.97 – 4.99.2)와 비교합니다. ≥ 4.99.3 버전은 패치된 것으로 처리됩니다. 알려진 범위를 벗어난 버전은 취약하지 않은 것으로 표시됩니다 (인식되지 않은 경우 메모 포함).

확인 3 — TLS 라이브러리 (중요 게이트) 세 가지 탐지 방법을 순차적으로 사용합니다:

  1. exim -bV 빌드 정보 (가장 신뢰할 수 있음 — Exim이 자체 컴파일 타임 기능을 보고합니다, 예: Support for: GnuTLS)
  2. ldd 공유 라이브러리 연결
  3. strings 바이너리 스캔 (대체)

OpenSSL이 감지되면 → 판정이 취약하지 않음으로 전환됩니다 (버전 무관). GnuTLS가 감지되면 → 공격 표면이 존재함이 확인됩니다. 둘 다 확인할 수 없으면 → 결과는 불확실입니다.

확인 4 — CHUNKING/BDAT 구성 (해결 방법 확인) 이 시점에서 시스템이 여전히 취약한 것으로 표시된 경우에만 실행됩니다. Exim 구성에서 chunking_advertise_hosts가 명시적으로 빈 값으로 설정되었는지 확인합니다. 이렇게 하면 BDAT 광고가 비활성화되어 공격 벡터가 차단됩니다. 단일 파일 구성과 Debian의 분할 구성 레이아웃 (/etc/exim4/conf.d/ 조각)을 모두 처리합니다.

참고: chunking_advertise_hosts가 구성에 없는 경우 (기본값), Exim은 모든 호스트에게 CHUNKING을 광고합니다 (*). 비활성화하려면 옵션을 명시적으로 빈 값으로 설정해야 합니다.

확인 5 — 정보 제공 시스템 완화 조치 판정을 변경하지는 않지만, 익스플로잇 가능성에 영향을 미치는 요소를 보고합니다:

  • ASLR 수준 (/proc/sys/kernel/randomize_va_space) — 2여야 함
  • glibc 버전 — 2.32+는 더 강력한 힙 메타데이터 무결성 검사를 제공함
  • Exim 바이너리의 checksec 출력 (PIE, RELRO, 스택 카나리) — checksec이 설치된 경우
  • systemd 유닛 샌드박싱: MemoryDenyWriteExecute, NoNewPrivileges, SystemCallFilter

요구 사항

  • Bash 4.0 이상
  • Linux /proc 파일 시스템 사용 가능 (ASLR 확인용)
  • 표준 coreutils: grep, awk, ldd, head
  • checksec (선택 사항 — 바이너리 강화 분석용)
  • systemctl (선택 사항 — systemd 유닛 검사용)
  • Exim 구성 파일을 읽을 수 있는 충분한 권한으로 실행해야 함 (일반적으로 root, 또는 Debian/Ubuntu의 Debian-exim 그룹 사용자)

핵심 취약점 확인을 위해 외부 종속성은 필요하지 않습니다.


사용법

root@kitploit:~
chmod +x check_cve_2026_45185.sh
./check_cve_2026_45185.sh

옵션

플래그설명
--json결과를 JSON 객체로 출력 (아래 참조)
--quiet모든 출력을 억제; 종료 코드만 설정
--no-colorANSI 색상 코드 비활성화 (로그 파일에 유용)
--help / -h사용법 정보 출력

종료 코드

코드의미
0취약하지 않음 (또는 명확한 안전 조건 발견)
1취약함
2불확실 — 하나 이상의 필수 정보를 확인할 수 없음; 잠재적으로 취약한 것으로 처리
3스크립트 오류 또는 지원되지 않는 환경

예제 출력

사람이 읽을 수 있는 형식 (기본값)

root@kitploit:~
CVE-2026-45185 (Dead.Letter) — Exim 취약점 평가
============================================================

[CHECK] Exim 설치 확인 중...
[WARN]  Exim 바이너리 발견: /usr/sbin/exim4
[CHECK] Exim 버전 확인 중...
        감지된 버전: 4.99.1
[FAIL]  Exim 4.99.1이 취약 범위 (4.97 – 4.99.2)에 포함됩니다.
[CHECK] TLS 라이브러리 연결 확인 중 (GnuTLS vs OpenSSL)...
[FAIL]  Exim이 GnuTLS에 연결되어 있습니다 — 이 빌드는 영향을 받습니다.
[CHECK] CHUNKING (BDAT) 광고 구성 확인 중...
        구성 파일: /etc/exim4/exim4.conf
[WARN]  chunking_advertise_hosts가 비활성화되지 않았습니다 — BDAT가 활성화됨 (기본값은 모든 호스트에 광고).
        팁: 메인 구성에 'chunking_advertise_hosts =' (빈 값)를 추가하여 해결 방법으로 BDAT를 비활성화하세요.
[CHECK] 시스템 수준 익스플로잇 완화 조치 확인 중 (정보 제공)...
[PASS]  ASLR: 전체 무작위화 (randomize_va_space=2)
        glibc 버전: 2.35 (2.32+는 더 강력한 힙 메타데이터 검사)
[WARN]  systemd: MemoryDenyWriteExecute가 설정되지 않음 — 유닛에 추가 권장
[WARN]  systemd: NoNewPrivileges가 설정되지 않음

------------------------------------------------------------
판정
------------------------------------------------------------
취약함 — CVE-2026-45185
  이유: Exim 버전 4.99.1이 취약 범위 4.97–4.99.2에 포함됨

권장 조치:
  1. Exim을 4.99.3 이상으로 업그레이드 (기본 수정)
  2. 해결 방법으로 exim 구성에 'chunking_advertise_hosts =' (빈 값) 설정
  3. systemd 유닛에 MemoryDenyWriteExecute=yes 및 NoNewPrivileges=yes 추가
  4. ASLR을 2로 설정 확인: echo 2 > /proc/sys/kernel/randomize_va_space
------------------------------------------------------------

JSON 출력 (--json)

root@kitploit:~
{
  "cve": "CVE-2026-45185",
  "alias": "Dead.Letter",
  "host": "mailserver-01",
  "timestamp": "2026-05-12T17:00:00Z",
  "verdict": "vulnerable",
  "reason": "Exim version 4.99.1 is in vulnerable range 4.97–4.99.2",
  "exit_code": 1,
  "findings": {
    "exim_binary": "/usr/sbin/exim4",
    "exim_version": "4.99.1",
    "exim_version_vulnerable": "true",
    "tls_library": "gnutls",
    "tls_library_detected": "gnutls",
    "exim_config": "/etc/exim4/exim4.conf",
    "chunking_advertised": "true",
    "aslr_level": "2",
    "glibc_version": "2.35"
  },
  "mitigations": [
    "aslr=full"
  ]
}

CI/CD 통합

GitHub Actions

root@kitploit:~
- name: CVE-2026-45185 확인
  run: |
    chmod +x check_cve_2026_45185.sh
    ./check_cve_2026_45185.sh --json | tee vuln-report.json
    exit $(jq '.exit_code' vuln-report.json)

- name: 취약점 보고서 업로드
  if: always()
  uses: actions/upload-artifact@v4
  with:
    name: cve-2026-45185-report
    path: vuln-report.json

GitLab CI

root@kitploit:~
check-exim-vuln:
  stage: security
  script:
    - chmod +x check_cve_2026_45185.sh
    - ./check_cve_2026_45185.sh --json > vuln-report.json
  artifacts:
    when: always
    paths:
      - vuln-report.json
  allow_failure: false

Ansible

root@kitploit:~
- name: CVE-2026-45185 확인 실행
  script: check_cve_2026_45185.sh --json
  register: vuln_check
  failed_when: vuln_check.rc == 1
  changed_when: false

- name: 취약점 보고서 표시
  debug:
    msg: "{{ vuln_check.stdout | from_json }}"

jq로 JSON 출력 파싱

root@kitploit:~
# 판정만 가져오기
./check_cve_2026_45185.sh --json | jq -r '.verdict'

# 특정 완화 조치가 발견되었는지 확인
./check_cve_2026_45185.sh --json | jq '.mitigations | contains(["aslr=full"])'

# 여러 호스트에서 실행하고 결과 수집
for host in mail1 mail2 mail3; do
  ssh "$host" 'bash -s' < check_cve_2026_45185.sh --json
done | jq -s '.'

해결 방법

기본 수정 — Exim 업그레이드

root@kitploit:~
# Debian / Ubuntu
apt-get update && apt-get install --only-upgrade exim4

# RHEL / CentOS / Fedora
dnf upgrade exim

# 소스에서
# https://ftp.exim.org/pub/exim/exim4/ 에서 4.99.3 다운로드
# 기존 Local/Makefile 설정으로 재빌드

업그레이드 후 확인:

root@kitploit:~
exim -bV | head -1
# 예상: Exim version 4.99.3 ...

임시 해결 방법 — CHUNKING/BDAT 비활성화

즉시 업그레이드할 수 없는 경우, Exim 구성의 메인 구성 섹션에 다음 줄을 추가하면 BDAT 광고가 완전히 비활성화되어 공격 벡터가 차단됩니다:

root@kitploit:~
chunking_advertise_hosts =

빈 값은 "호스트 없음"을 의미합니다. Exim은 더 이상 EHLO 응답에서 CHUNKING 확장을 광고하지 않습니다. 변경 후 Exim을 다시 시작하십시오:

root@kitploit:~
# Debian / Ubuntu
systemctl restart exim4

# 기타 systemd 시스템
systemctl restart exim

CHUNKING이 더 이상 광고되지 않는지 확인:

root@kitploit:~
# 연결하고 EHLO 응답 확인 — CHUNKING이 나타나지 않아야 함
echo QUIT | openssl s_client -connect localhost:25 -starttls smtp 2>/dev/null \
  | grep -i chunking
# 출력 없음 = CHUNKING 비활성화됨

이것은 해결 방법일 뿐, 수정 사항이 아닙니다. 일부 발신 메일 서버는 대용량 메시지 전달에 BDAT를 사용합니다. 이를 비활성화하면 해당 발신자와의 호환성 문제가 발생할 수 있습니다. 가능한 한 빨리 4.99.3으로 업그레이드하십시오.

systemd 유닛 강화 (심층 방어)

패치된 시스템에서도 Exim systemd 유닛에 다음 지시문을 추가하면 향후 메모리 손상 취약점의 영향을 줄일 수 있습니다:

root@kitploit:~
# /etc/systemd/system/exim4.service.d/hardening.conf
[Service]
NoNewPrivileges=yes
MemoryDenyWriteExecute=yes
ProtectSystem=strict
PrivateTmp=yes
RestrictAddressFamilies=AF_INET AF_INET6
SystemCallFilter=@system-service
root@kitploit:~
systemctl daemon-reload && systemctl restart exim4

제한 사항

  • 스크립트는 정적 탐지만 수행합니다. 취약점을 악용하거나 대상 시스템의 특정 런타임 조건에서 악용 가능성을 확인하지 않습니다.
  • Exim 바이너리를 실행할 수 없는 시스템(예: 컨테이너의 권한 제약)에서 TLS 라이브러리 탐지는 ldd 및 strings로 대체되며, 이는 덜 신뢰할 수 있습니다.
  • 4.97 미만의 Exim 버전은 이 특정 CVE의 알려진 영향을 받는 범위를 벗어나지만, 유지 관리되지 않으며 다른 패치되지 않은 문제에 취약할 가능성이 높습니다. 버전에 관계없이 업그레이드를 권장합니다.
  • 스크립트는 CHUNKING 해결 방법을 확인하기 위해 Exim 구성 파일에 대한 읽기 액세스가 필요합니다. 충분한 권한 없이 실행되는 경우 구성 확인 단계는 실패 대신 불확실로 보고됩니다.

참고 자료

  • The Hacker News — 새로운 Exim BDAT 취약점, GnuTLS 빌드를 코드 실행 위험에 노출
  • Exim 프로젝트 — 보안 문서
  • Exim 사양 — CHUNKING (chunking_advertise_hosts)
  • Exim 사양 — TLS 구성
  • XBOW Security Lab
도구 다운로드