Aedes MQTT 브로커 토픽 처리 미흡에 따른 서비스 거부(DoS) 취약점 권고 (CVE-2026-63341)
실무자 핵심 요약 (Executive Summary)
SECOPS ASSESSMENTAedes MQTT 브로커 1.1.1 미만 버전을 사용하는 모든 Node.js 애플리케이션 및 인프라
공격자가 비정상적으로 깊은 계층의 토픽을 전송할 경우, 브로커 프로세스가 예외 처리에 실패하여 강제 종료(Crash) 및 서비스 중단 발생
Aedes 패키지를 최신 보안 패치가 적용된 v1.1.1 버전으로 즉시 업데이트
영향받는 제품 및 버전 범위
권장 패치 및 임시 완화(Workaround) 가이드
PATCH & WORKAROUND1. 패키지 업데이트
가장 확실한 해결책은 취약점이 수정된 최신 버전으로 업데이트하는 것입니다.
npm install aedes@1.1.1
# 또는
yarn upgrade aedes@1.1.12. 임시 완화 조치 (패치 불가 시)
- 프로세스 매니저 도입: PM2 또는 Docker의
restart: always정책을 사용하여 프로세스 종료 시 자동으로 재시작되도록 설정하십시오. - 입력 값 검증: 애플리케이션 레벨에서
preConnect또는authorizePublish/Subscribe후크를 사용하여 토픽의 구분자(/) 개수를 제한하는 로직을 추가하십시오.
broker.authorizePublish = (client, packet, callback) => {
if (packet.topic.split('/').length > 100) {
return callback(new Error('Topic too deep'));
}
callback(null);
};내 GitHub/GitLab 레포지토리에 이 취약한 패키지가 숨어 있는지 30초 만에 스캔하세요
간접 의존성(Transitive Dependency)에 포함된 취약점은 수동 확인이 불가능합니다. Git 연동 한 번으로 취약 버전 탐지부터 호환성을 유지하는 최소 버전 업그레이드 PR까지 자동 생성하세요.
취약점 발생 원리 및 공격 메커니즘
Aedes MQTT 브로커는 메시지 라우팅을 위해 내부적으로 mqemitter와 qlobber 라이브러리를 사용합니다. 본 취약점은 토픽(Topic)의 깊이나 구조적 복잡성을 사전에 검증하지 않아 발생합니다. 공격자가 매우 깊은 계층(Deep Depth)의 토픽을 포함한 PUBLISH, SUBSCRIBE 또는 Will 메시지를 전송하면, qlobber._split_words 함수에서 'too many words' 예외가 발생합니다. 이 예외는 Aedes 내부 핸들러에서 적절히 캡처되지 않고 Node.js 이벤트 루프까지 전파되어 전체 프로세스를 중단시킵니다. 특히 Will 메시지 경로는 클라이언트가 비정상적으로 연결을 끊을 때 트리거되므로, 공격자가 세션을 맺고 의도적으로 연결을 끊는 것만으로도 브로커를 무력화할 수 있습니다.
공식 보안 권고문 및 참조 링크
Aedes is an MQTT broker that can run on any stream server. Prior to 1.1.1, the MQTT broker does not bound topic depth or structural complexity before passing topics through `mqemitter` into `qlobber`. A `PUBLISH`, `SUBSCRIBE`, or registered `Will` message containing an excessively deep topic can reach `qlobber._split_words` in `lib/qlobber.js` and trigger an uncaught `too many words` exception. Calls from `handlers/subscribe.js` and the publishing logic are not protected against that exception, so it escapes to the `Node.js event loop` and terminates the entire broker. The `Will` path is independently reachable when a client disconnects ungracefully: it calls `broker.publish` directly and bypasses the `PUBLISH` handler. An attacker must be able to establish an `MQTT session`, authenticated or unauthenticated according to broker configuration. A successful attack disconnects all legitimate clients and prevents reconnection until the broker process restarts. This issue is fixed in version 1.1.1.
일간 취약점 브리핑 및 긴급 Zero-Day 경보 구독
보안 실무자와 인프라·백엔드 엔지니어를 위해 매일 아침 주요 취약점과 패치 우선순위를 요약해 발송합니다.