Описание
Atom exhaustion: OAuth2 JWT tag: scope values
Origin
This vulnerability was identified by Team RabbitMQ and/or other teams at Broadcom, not via a responsible disclosure from an external researcher.
Source references
deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl:479 · Atom Table Exhaustion
Impact
In deployments where users can influence the scopes included in their IdP-issued JWT (e.g. self-service OAuth2 client registration, or scope-passthrough IdPs), each unique rabbitmq.tag: scope creates a permanent atom on the broker. Accumulated over many tokens this exhausts the atom table.
Description
extract_scopes/1 parses scopes of the form .tag: and calls rabbit_data_coercion:to_atom() to convert to a tag atom. The token signature is verified first, so the attacker cannot forge scopes — but in IdP configurations where scope content is user-influenced, each login with a novel tag value leaks one atom.
Exploit scenario
IdP allows clients to request arbitrary scopes. Attacker scripts token requests with scope=rabbitmq.tag:x000001, ...x000002, etc., logging in to the broker with each. After ~1M distinct tags the VM aborts.
Preconditions
- rabbitmq_auth_backend_oauth2 enabled
- IdP permits attacker-influenced scope values in signed tokens (deployment-dependent)
CVSS
CVSS v4.0: CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N (6.0, Moderate). Fixed in 3.13.15, 4.0.22, 4.1.11, 4.2.6, 4.3.1.
Пакеты
rabbitmq
>= 3.13.0, < 3.13.15
3.13.15
rabbitmq
>= 4.0.0, < 4.0.22
4.0.22
rabbitmq
>= 4.1.0, < 4.1.11
4.1.11
rabbitmq
>= 4.2.0, < 4.2.6
4.2.6
rabbitmq
>= 4.3.0, < 4.3.1
4.3.1