Aller au contenu
Moyenne 6.0

RabbitMQ direct reply-to: forged suffix fanout causes quadratic mailbox memory

GHSA-6chv-gv3h-cvcj Première détection SecPulse

Résumé

Summary

RabbitMQ direct reply-to addresses have the form:

amq.rabbitmq.reply-to.<encoded-channel-or-session-pid>.<capability-key>

When resolving a destination, RabbitMQ decodes and validates the PID but
discards the capability-key suffix. An attacker who obtains their own...

Paquets affectés

ÉcosystèmePaquetConcernéesCorrigé
other rabbitmq-server
>= 4.2.0, < 4.2.10
4.2.10
other rabbitmq-server
>= 4.3.0, < 4.3.5
4.3.5
Description d'origine La description telle que publiée par la source (souvent en anglais).

Summary

RabbitMQ direct reply-to addresses have the form:

amq.rabbitmq.reply-to..

When resolving a destination, RabbitMQ decodes and validates the PID but
discards the capability-key suffix. An attacker who obtains their own valid
direct reply-to address can create many distinct routing keys that preserve the
encoded PID and replace only the suffix.

A single message can carry these names through the AMQP CC header. RabbitMQ
creates one volatile target per distinct name and sends one cast per target to
the same channel/session PID. Every cast retains a copy of the message's full
O(N) routing-key structure, producing N × O(N) = O(N²) mailbox memory.

The final capability-key check happens only after each cast reaches the target
mailbox, too late to prevent amplification.

Preconditions

  • The attacker has an authenticated AMQP account.
  • The account can write to the default exchange.
  • The attacker activates direct reply-to and obtains its own generated reply
    address. No victim address or cross-user information leak is required.

These are ordinary application permissions. No plugin or administrator role is
required.

Root cause

1. The suffix is parsed but never validated

%% deps/rabbit/src/rabbit_volatile_queue.erl:368-389
pid_from_name(<<?PREFIX, Bin/binary>>, CandidateNodes) ->
    ...
    [PidBase64, _KeyBase64] = binary:split(Bin, Cp),
    PidBin = base64:decode(PidBase64),
    ...
    {ok, rabbit_pid_codec:recompose(PidPart…

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

Références

Nous utilisons des cookies pour l'analyse d'audience et la mesure publicitaire. Ce réglage s'applique à tous les sites de Game co., Ltd. En savoir plus