CVE-2026-85058 Moquette MQTT 브로커 ACL 우회 취약점 분석

Moquette MQTT 브로커에서 Last Will 메시지로 ACL을 우회할 수 있는 이유는 브로커가 Last Will 메시지를 전송하는 특정 코드 경로에서 정상적인 PUBLISH 경로와 달리, 쓰기 권한을 검증하는 authorizator.canWrite() 검사를 완전히 생략했기 때문입니다.

CVE-2026-85058 취약점 개요 및 메커니즘

CVE-2026-85058은 Java 기반의 경량 MQTT 브로커인 Moquette에서 발견된 권한 검사 누락 취약점입니다. 이 취약점의 핵심은 MQTT 프로토콜의 ‘Last Will and Testament(LWT)’ 기능을 처리하는 과정에서 보안 메커니즘이 제대로 적용되지 않았다는 점입니다.

정상적인 메시지 발행(PUBLISH) 경로에서는 브로커가 authorizator.canWrite()를 호출해 클라이언트가 해당 토픽에 메시지를 쓸 권한이 있는지 엄격히 검사합니다. 그런데 Last Will 메시지가 처리되는 fireWill() → publishWill() → publish2Subscribers() 경로에서는 이 권한 검사가 빠져 있습니다.

클라이언트가 연결 시점에 설정한 Last Will 토픽이 ACL(Access Control List)로 보호되고 있어도 브로커는 해당 클라이언트의 권한을 확인하지 않은 채 메시지를 구독자들에게 전송합니다.

공격 시나리오 및 영향 범위

특정 조건이 갖춰지면 공격자는 이 취약점을 악용해 ACL 정책을 무력화하고 임의의 메시지를 주입할 수 있습니다.

1. 취약점 발생 조건 및 공격 경로

공격이 성공하려면 다음과 같은 환경이 갖춰져 있어야 합니다.

  • 익명 접근 활성화: allow_anonymous=true 설정이 활성화되어 있어야 합니다. 이는 Moquette의 기본 설정값입니다.
  • 토픽 ACL 제한: 특정 토픽의 쓰기 권한이 제한되어 ACL로 보호되고 있는 상태여야 합니다.

공격자는 CONNECT 패킷을 보낼 때 ACL로 보호되는 제한된 토픽을 Last Will Topic으로 설정합니다. 이후 TCP RST 등으로 연결을 비정상적으로 강제 종료하면 브로커는 클라이언트가 설정했던 Last Will 메시지를 해당 토픽으로 발행합니다. 이 과정에서 권한 검사가 생략되므로 공격자는 쓰기 권한이 없는 토픽에 무단으로 메시지를 주입할 수 있습니다.

2. 영향도 분석 요약

이 취약점의 주요 영향도는 다음과 같습니다.

구분 상세 내용
대상 소프트웨어 Moquette MQTT 브로커 (Java 기반)
취약 영향 버전 0.18.1 이전의 모든 버전
핵심 취약점 Last Will 전송 시 authorizator.canWrite 검사 누락
기본 영향 ACL 보호 토픽에 무단 메시지 주입 및 정책 우회
심화 영향 구독자 환경에 따라 원격 코드 실행(RCE) 가능성

RCE 확장 가능성 분석

메시지 주입에서 그치지 않고, 이 취약점은 시스템 전체의 제어권을 잃게 만드는 원격 코드 실행(RCE)로 확장될 위험이 있습니다.

해당 토픽을 구독하고 있는 클라이언트나 시스템이 수신한 메시지 페이로드를 Java 역직렬화(예: ObjectInputStream.readObject) 방식으로 처리하고 있다면 결과는 치명적입니다. 공격자는 Last Will 메시지의 페이로드에 Commons Collections CC6 체인과 같은 역직렬화 가젯을 주입해 구독자 서버에서 임의의 코드를 실행시킬 수 있습니다.

이는 MQTT 브로커 자체의 취약점이 구독자 측의 안전하지 않은 역직렬화 처리 방식과 결합될 때 벌어지는 연쇄적인 보안 사고의 전형적인 사례입니다.

대응 방안 및 수정 버전 정보

Moquette 개발 팀은 이 문제를 인지하고 0.18.1 버전에서 보안 패치를 적용했습니다.

1. 조치 사항

수정된 버전(0.18.1)에서는 Last Will 메시지를 전송하는 시점이 아니라 클라이언트가 브로커에 연결하는 시점(Connection Time)에 Last Will Topic에 대한 권한 검사를 수행하도록 로직이 바뀌었습니다. 권한이 없는 사용자는 Last Will 토픽을 설정하는 것 자체가 사전에 차단되기 때문에 ACL 우회가 막힙니다.

2. 권고 조치

인프라 엔지니어 및 보안 담당자는 다음 조치를 즉시 수행할 것을 권고합니다.

  1. 버전 업데이트: Moquette MQTT 브로커를 최신 수정 버전인 0.18.1 이상으로 업그레이드하십시오.
  2. 설정 검토: 익명 접근(allow_anonymous) 설정이 활성화되어 있는지 확인하고, 불필요하다면 비활성화해 공격 표면을 줄이십시오.
  3. 페이로드 처리 검증: MQTT 메시지를 처리하는 구독자 애플리케이션에서 Java 역직렬화를 사용하는지 점검한 뒤, 안전한 데이터 포맷(JSON 등)으로 전환하십시오.

현재 GitHub Security Advisory(GHSA-9jjc-fw8x-fmwx)에 해당 취약점을 증명하는 PoC 스크립트(GitHubAdvisoryPOC.zip)가 공개돼 있어 공격 진입 장벽이 매우 낮습니다. 즉각적인 업데이트가 필수적입니다.

댓글 남기기