RabbitMQ amqp091-go: Connection Configuration Overwrite via Unsanitized TLS Path Parameter InjectionGHSA-465g-fh3v-9jw4
Fix: rabbitmq/amqp091-go#352GHSA-465g-fh3v-9jw4 is a CWE-116 vulnerability in github.com/rabbitmq/amqp091-go. A fix is available for github.com/rabbitmq/amqp091-go — see the affected versions and patch details below.
Exploitation Status
No confirmed exploitation observed yet
- A successful exploit gives an attacker total control of the affected component, not partial access.
- CISA’s own triage has not observed active exploitation or public proof-of-concept code for this CVE as of its last assessment.
Exploitation and automatability from CISA’s SSVC triage for GHSA-465g-fh3v-9jw4.
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
Real-World Exposure
github.com/rabbitmq/amqp091-goReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects Go packages — download data is not available via public APIs for these ecosystems.
Description
Summary
A query parameter injection vulnerability exists in the AMQP client's connection URI formatting logic. When generating or parsing connection URIs, TLS-related filesystem paths (such as certificates or keys) are appended directly to the URI's query string using string concatenation rather than secure URL encoding via functions like url.QueryEscape.
If an application handles a TLS file path containing special character delimiters (such as & or =), these characters are interpreted as parameter separators by the URI parser. If the resulting URI.String() output is subsequently re-parsed via ParseURI, the injected fields can silently overwrite or hijack critical configuration parameters, forcing the client to use arbitrary connection settings or alternate TLS files.
Vulnerability Details
Mechanism
The vulnerability lies within the lack of proper escaping when compiling connection string components into a raw URL format:
// Example of insecure string concatenation during URI building
uri := fmt.Sprintf("amqps://user:pass@host/%s?certfile=%s&keyfile=%s", vhost, certPath, keyPath)
Because certPath and keyPath are not passed through url.QueryEscape, special URL characters preserve their control meanings. For instance, if a user supply a certificate path named:
/tmp/cert=foo&keyfile=/evil/path
The generated string translates into:
...?certfile=/tmp/cert=foo&keyfile=/evil/path&keyfile=/original/path
When this string passes back through ParseURI (common in connection re-dial routines or configuration replication steps), standard URL parsing mechanics treat the string as multiple distinct parameters. Depending on map assignment order inside the parser, the injected keys take precedence over the original parameters.
Impact
By manipulating the file paths used for TLS assets, an attacker or compromised local sub-system can:
- Inject arbitrary alternative options or override protocol settings.
- Substitute or switch keyfiles, leading to connection failures or the parsing of unauthorized cryptographic assets.
- Corrupt connection state variables, triggering application-layer failures during connection setup or recovery.
Attack Vector
An attacker who has partial control over directory naming conventions or environmental variables used to specify local infrastructure paths can execute a parameter injection attack:
- Path Creation: An attacker sets up a path containing deliberate URL parameter delimiters (e.g.,
/var/lib/certs/client.crt?cacertfile=/tmp/fake_ca.crt&). - String Generation: The application serializes the active connection state or passes the paths down to an unescaped URI builder function.
- Configuration Hijack: The URI string is generated with the injected parameter embedded into the query structure. When the client attempts to reuse or re-parse this connection string during a connection retry or worker spin-up, it parses the injected
cacertfileparameter, loading a different, unverified Certificate Authority string.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🐹Go | github.com/rabbitmq/amqp091-go | all versions | 1.13.0go get github.com/rabbitmq/amqp091-go@v1.13.0 |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for github.com/rabbitmq/amqp091-go, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update github.com/rabbitmq/amqp091-go to 1.13.0 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms GHSA-465g-fh3v-9jw4 is resolved across your whole dependency graph.
Workarounds
If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.
Fixing This On Your OS
If you run this on a Linux distribution, patch through your package manager against the distro's own security advisory below — it tracks the exact backported fix for your release, which can ship on a different timeline (and sometimes a different severity) than the upstream project.
This flaw has an Important impact because applications in Red Hat products that use amqp091-go and accept attacker-controlled TLS asset paths can be induced to reparse a crafted AMQPS URI. A local attacker with partial control of a certificate, key, CA, or server-name path or related environment setting can inject…
Avoid accepting untrusted values for TLS certificate, key, CA, or server-name paths. Restrict write access to directories and environment settings used to configure those paths, and upgrade applications using amqp091-go to version 1.13.0 or later when available.Source: Red Hat security advisory for GHSA-465g-fh3v-9jw4 (CC BY 4.0)
| Product | Fixed in | Advisory |
|---|---|---|
| Red Hat Hardened Images | opentelemetry-collector-contrib-main-0.161.0-0.1.hum1 | RHSA-2026:68290 |
| Red Hat Quay 3.10 | quay/quay-rhel8:1791462428 | RHSA-2026:79366 |
| Red Hat Quay 3.12 | quay/quay-rhel8:1791314514 | RHSA-2026:79546 |
| Red Hat Quay 3.9 | quay/quay-rhel8:1790808443 | RHSA-2026:77656 |
Frequently Asked Questions
Is GHSA-465g-fh3v-9jw4 in your dependencies?
Find it across Go, including transitive dependencies.