English Advisory →
CVE-2026-633417.5/HIGHCWE-248CWE-400

Aedes MQTT 브로커 토픽 처리 미흡에 따른 서비스 거부(DoS) 취약점 권고 (CVE-2026-63341)

영향받는 벤더 / 생태계
moscajs
대상 컴포넌트 / 패키지
aedes
권고문 발행일
2026-10-30

실무자 핵심 요약 (Executive Summary)

SECOPS ASSESSMENT
영향 대상

Aedes MQTT 브로커 1.1.1 미만 버전을 사용하는 모든 Node.js 애플리케이션 및 인프라

파급 효과

공격자가 비정상적으로 깊은 계층의 토픽을 전송할 경우, 브로커 프로세스가 예외 처리에 실패하여 강제 종료(Crash) 및 서비스 중단 발생

권장 조치

Aedes 패키지를 최신 보안 패치가 적용된 v1.1.1 버전으로 즉시 업데이트

영향받는 제품 및 버전 범위

Aedes v1.1.1 미만 버전이 영향을 받습니다. 브로커 설정에 따라 인증 또는 비인증 상태의 공격자가 MQTT 세션을 수립할 수 있는 경우 공격이 가능합니다.

권장 패치 및 임시 완화(Workaround) 가이드

PATCH & WORKAROUND

1. 패키지 업데이트

가장 확실한 해결책은 취약점이 수정된 최신 버전으로 업데이트하는 것입니다.

bash
npm install aedes@1.1.1
# 또는
yarn upgrade aedes@1.1.1

2. 임시 완화 조치 (패치 불가 시)

  • 프로세스 매니저 도입: PM2 또는 Docker의 restart: always 정책을 사용하여 프로세스 종료 시 자동으로 재시작되도록 설정하십시오.
  • 입력 값 검증: 애플리케이션 레벨에서 preConnect 또는 authorizePublish/Subscribe 후크를 사용하여 토픽의 구분자(/) 개수를 제한하는 로직을 추가하십시오.
javascript
broker.authorizePublish = (client, packet, callback) => {
  if (packet.topic.split('/').length > 100) {
    return callback(new Error('Topic too deep'));
  }
  callback(null);
};
권장 아키텍처 방어 통제 (Recommended Security Control)
Snyk Open Source & Container Security
서비스 가용성 확보를 위해 Aedes v1.1.1 버전으로의 즉시 업그레이드를 강력히 권고합니다.

내 GitHub/GitLab 레포지토리에 이 취약한 패키지가 숨어 있는지 30초 만에 스캔하세요

간접 의존성(Transitive Dependency)에 포함된 취약점은 수동 확인이 불가능합니다. Git 연동 한 번으로 취약 버전 탐지부터 호환성을 유지하는 최소 버전 업그레이드 PR까지 자동 생성하세요.

무료 플랜 지원 · GitHub/GitLab 1클릭 연동
CI/CD 파이프라인에 자동 보안 스캐닝(SAST/SCA) 구축하는 실전 강의
커리큘럼 확인하기

취약점 발생 원리 및 공격 메커니즘

Aedes MQTT 브로커는 메시지 라우팅을 위해 내부적으로 mqemitter와 qlobber 라이브러리를 사용합니다. 본 취약점은 토픽(Topic)의 깊이나 구조적 복잡성을 사전에 검증하지 않아 발생합니다. 공격자가 매우 깊은 계층(Deep Depth)의 토픽을 포함한 PUBLISH, SUBSCRIBE 또는 Will 메시지를 전송하면, qlobber._split_words 함수에서 'too many words' 예외가 발생합니다. 이 예외는 Aedes 내부 핸들러에서 적절히 캡처되지 않고 Node.js 이벤트 루프까지 전파되어 전체 프로세스를 중단시킵니다. 특히 Will 메시지 경로는 클라이언트가 비정상적으로 연결을 끊을 때 트리거되므로, 공격자가 세션을 맺고 의도적으로 연결을 끊는 것만으로도 브로커를 무력화할 수 있습니다.

공식 보안 권고문 및 참조 링크

NVD Original English Description

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.

SecOps Advisory Dispatch & RSS Feed

일간 취약점 브리핑 및 긴급 Zero-Day 경보 구독

보안 실무자와 인프라·백엔드 엔지니어를 위해 매일 아침 주요 취약점과 패치 우선순위를 요약해 발송합니다.

Slack / Teams / RSS 리더 연동: