本文へ移動
English version →
中 6.0

MQTT retained message store has no size or count limit and is never reclaimed

GHSA-5jgm-jxp7-gwjh SecPulse初出

概要

Summary

Any authenticated MQTT client with ordinary write permission can retain-publish to unlimited distinct
topics. The retained store has no count or size cap, is held in resident memory, and is never reclaimed;
it survives restart and cannot be enumerated or bulk-purged. Filling it lat...

影響パッケージ

種類パッケージ影響を受ける版直った版
rabbitmq rabbitmq-server
>= 4.3.0, < 4.3.5
4.3.5
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。

Summary

Any authenticated MQTT client with ordinary write permission can retain-publish to unlimited distinct
topics. The retained store has no count or size cap, is held in resident memory, and is never reclaimed;
it survives restart and cannot be enumerated or bulk-purged. Filling it latches the node's memory alarm
permanently, after which no MQTT client can connect at all.

Affected

  • deps/rabbitmq_mqtt/src/rabbit_mqtt_retained_msg_store_{dets,ets}.erl
  • Requires the rabbitmq_mqtt plugin (not enabled by default)
  • Ecosystem: Other: RabbitMQ Package: rabbitmq-server
  • Confirmed on 4.3.4. Code unchanged since 6ac8d4def5 (2015-04-23); wider range inferred, not tested.

Mechanism

insert/3 is an unconditional write: no count check, no size check, and no config setting exists to add
one (max_retained and equivalents do not exist anywhere in the plugin or its schema):

insert(Topic, Msg, #store_state{table = T}) ->
  true = ets:insert(T, #retained_message{topic = Topic, mqtt_msg = Msg}),
  ok.

The default DETS backend is opened {ram_file, true}, keeping contents resident.

The store exports only start/insert/lookup/delete/expire/terminate. delete/2 needs an exact topic
name; there is no enumeration, no bulk purge, and no management API or UI surface. The only expiry is
MQTT 5's Message Expiry Interval — client-supplied and optional, so an attacker omits it.

Every comparable store in RabbitMQ has controls this one lac…

出典: GitHub Repository Security Advisories (Game のスタック) GitHub Advisory OSV

参照URL

当サイトでは、アクセス解析と広告の効果測定のために Cookie を使います。株式会社Game のサイト共通の設定です。 詳しく