FlawOpen

flawopen.com/Teardowns/cve-2026-73570-zimbra-snmp-command-injection

● CVE-2026-73570 · CVSS 8.9[5], [10] · 높음
보안 연구 · FlawOpen

CVE-2026-73570: Zimbra SNMP 알림 경로에서 명령 주입이 발생한 과정

CVE-2026-73570은 Zimbra의 선택적 SNMP 알림 경로에 있는 인증 없는 명령 주입 취약점입니다. 조작된 이메일이 상태 값에 영향을 주고, 그 값이 나중에 셸 명령에 삽입될 수 있었습니다. Zimbra는 10.1.20에서 호출 방식을 수정했습니다. 이후 Microsoft는 공개 전에 스캔 도구가 취약한 경로를 탐색했다고 보고했습니다.[1], [2], [5]

CVSS 벡터CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L[5], [10]
💡 알기 쉬운 설명 (ELI5)

우편 분류 담당자가 봉투의 라벨을 작업 지시서에 옮겨 적습니다. 이전 절차는 지시서 전체를 명령 해석기에 넘겨 라벨의 문자를 추가 명령으로 오해할 수 있었습니다. 수정 후에는 알림 프로그램에 인수를 각각 전달하므로 라벨은 데이터로만 남습니다.[8], [9], [3]

핵심 개념 및 용어

swatchdog
이 Zimbra 경로에서 로그를 감시하고 서비스 상태 메시지를 찾아 알림 처리를 시작하는 프로세스입니다.[1]
SNMP trap
이벤트가 발생했을 때 관리 대상 시스템이 SNMP 모니터링 수신기로 보내는 알림입니다.[1]
셸 보간
셸이 해석하는 문자열 명령을 구성하는 방식입니다. 신뢰할 수 없는 값의 문자가 명령 해석을 바꿀 수 있습니다.[8], [7]
목록 형식 system
Perl의 다중 인수 system 형식은 프로그램을 직접 실행하고 각 인수를 따로 전달해 셸이 명령 문자열을 해석하지 않게 합니다.[9], [3]

프레임워크 매핑

근본 원인 분석 (Root Cause)

영향을 받은 코드는 rpmconf/Conf/swatchrc의 dosnmp 함수에 있습니다. swatch 규칙은 상태 줄에서 서비스 이름을 캡처해 donotify를 통해 SERVICE로 전달하고, dosnmp는 이 값을 $snmptrap이 포함된 역따옴표 명령에 삽입했습니다. 역따옴표는 셸을 호출하므로 로그에서 온 값이 명령 문법으로 해석될 수 있었습니다. 문서화된 전제 조건은 모두 충족되어야 합니다. Zimbra Collaboration Suite가 10.1.20보다 낮고, 선택 패키지 zimbra-snmp가 설치되어 있으며, SNMP 알림이 활성화되어야 합니다. Microsoft는 조작된 SMTP 입력이 알림 경로에 도달할 수 있었다고 보고했습니다. 또한 2026년 7월 28일부터 8월 7일까지 스캔 도구가 취약한 주입 지점을 탐색한 것을 관찰했습니다. 이는 7월 20일 패치 후이자 8월 13일 공개 전입니다. Zimbra 수정은 셸 문자열을 목록 형식 system(...)으로 바꿔 실행 파일과 인수를 분리해 전달하며, 실행 경로에서 셸을 제거합니다. 이 분석은 SNMP 알림 코드에 한정되며 모든 Zimbra 설치나 SMTP 이메일이 취약하다는 뜻은 아닙니다.[1], [2], [3], [5], [7]

CVE-2026-73570 도달 조건 및 조치 매트릭스

배포 조건문서화된 경로가 적용되는가?방어 조치
Zimbra Collaboration Suite 10.1.20 미만, 선택적 zimbra-snmp 패키지 설치, SNMP 알림 사용.문서화된 알림 경로에는 세 조건이 모두 필요합니다. Microsoft는 조작된 SMTP 입력이 서비스 상태 값에 영향을 주고 이후 dosnmp에서 처리될 수 있다고 보고했습니다.10.1.20 이상으로 업그레이드하세요. 노출 기간의 관련 로그와 프로세스 텔레메트리를 검토하고, 지표는 침해 증거가 아니라 조사 단서로 취급하세요.
zimbra-snmp 패키지가 없거나 SNMP 알림이 비활성화됨.이 구성에서는 설명된 dosnmp 알림 경로가 활성화되지 않습니다. 서버에 다른 취약점이 없다는 뜻은 아닙니다.서버를 패치할 때까지 기능을 비활성화하거나 패키지를 설치하지 마세요. 모든 mailbox 노드를 확인하고 각각의 설정을 점검하세요.
Zimbra Collaboration Suite 10.1.20 이상이며 공급업체 수정 패키지가 설치됨.문서화된 셸 명령 구성은 10.1.20에서 수정되었습니다. 버전 문자열만으로 모든 노드나 로컬 변경을 확인할 수는 없습니다.각 노드의 설치 버전과 패키지를 확인하고, 과거에 세 노출 조건을 모두 충족한 기간이 있다면 일반적인 사고 조사 절차를 따르세요.

단계별 공격 실행 흐름

단계 1

전제 조건이 충족됨

10.1.20 미만 버전, zimbra-snmp 설치, SNMP 알림 활성화가 모두 필요합니다.[1]

단계 2

메일이 모니터링 값에 영향을 줌

Microsoft에 따르면 SMTP 요청이 로그의 상태 값에 영향을 줄 수 있었습니다. 악용 문자열과 네트워크 단계는 생략합니다.[1]

단계 3

swatchdog가 값을 전달

규칙이 서비스 필드를 캡처해 알림이 켜진 경우 donotify를 통해 dosnmp로 보냅니다.[1]

단계 4

셸이 값을 명령으로 해석

패치 전 Perl 역따옴표는 캡처 값을 포함한 문자열을 Zimbra 서비스 계정으로 셸에 전달했습니다.[1]

단계 5

10.1.20이 셸을 제거

수정은 별도 인수로 snmptrap을 호출합니다. 업데이트 후 노출 시스템을 조사하세요. 수정이 과거 활동을 배제하지 않습니다.[1]

소스 코드 비교: 취약한 구현 vs 보안 패치

취약한 역따옴표는 보간된 문자열을 셸에 넘깁니다. 업스트림 수정은 여러 인수의 system을 사용해 실행 파일과 각 인수를 나눠 전달하므로 SERVICE의 메타 문자가 셸 명령이 되지 않습니다. 변경된 호출을 보여주는 발췌이며 실행 가능한 exploit이나 전체 파일은 아닙니다.[3], [4], [8], [9]

소스 코드 발췌: rpmconf/Conf/swatchrc: dosnmp

취약한 구현
# 취약한 dosnmp 구현의 축약본. 악용 입력은 표시하지 않음.
sub dosnmp {
    my %args = (@_);
    `$snmptrap $snmpsvctrap $snmpsvcname s $args{SERVICE} $snmpsvcstatus i $statuses{$args{STATUS}}`;
}
보안 강화 패치
# Zimbra 10.1.20 수정: 프로그램을 직접 실행하고 인수를 분리해 전달.
sub dosnmp {
    my %args = (@_);
    system(
        "/opt/zimbra/common/bin/snmptrap",
        "-v", "2c", "-c", "zimbra", $traphost, "",
        $snmpsvctrap, $snmpsvcname, "s", $args{SERVICE},
        $snmpsvcstatus, "i", $statuses{$args{STATUS}}
    );
}

엔지니어링 및 시스템 보안 강화 체크리스트

출처