rustsec-2023-0027
Vulnerability from osv_rustsec
Published
2023-03-24 12:00
Modified
2023-06-13 13:10
Summary
TLS certificate common name validation bypass
Details
The NATS official Rust clients are vulnerable to MitM when using TLS.
The common name of the server's TLS certificate is validated against
the hostname provided by the server's plaintext INFO message
during the initial connection setup phase. A MitM proxy can tamper with
the host field's value by substituting it with the common name of a
valid certificate it controls, fooling the client into accepting it.
Reproduction steps
- The NATS Rust client tries to establish a new connection
- The connection is intercepted by a MitM proxy
- The proxy makes a separate connection to the NATS server
- The NATS server replies with an
INFOmessage - The proxy reads the
INFO, alters thehostJSON field and passes the tamperedINFOback to the client - The proxy upgrades the client connection to TLS, presenting a certificate issued
by a certificate authority present in the client's keychain.
In the previous step the
hostwas set to the common name of said certificate rustlsaccepts the certificate, having verified that the common name matches the attacker-controlled value it was given- The client has been fooled by the MitM proxy into accepting the attacker-controlled certificate
{
"affected": [
{
"database_specific": {
"categories": [
"crypto-failure"
],
"cvss": null,
"informational": null
},
"ecosystem_specific": {
"affected_functions": null,
"affects": {
"arch": [],
"functions": [],
"os": []
}
},
"package": {
"ecosystem": "crates.io",
"name": "async-nats",
"purl": "pkg:cargo/async-nats"
},
"ranges": [
{
"events": [
{
"introduced": "0.0.0-0"
},
{
"fixed": "0.29.0"
}
],
"type": "SEMVER"
}
],
"versions": []
}
],
"aliases": [
"GHSA-f5v5-ccqc-6w36"
],
"database_specific": {
"license": "CC0-1.0"
},
"details": "The NATS official Rust clients are vulnerable to MitM when using TLS.\n\nThe common name of the server\u0027s TLS certificate is validated against\nthe `host`name provided by the server\u0027s plaintext `INFO` message\nduring the initial connection setup phase. A MitM proxy can tamper with\nthe `host` field\u0027s value by substituting it with the common name of a\nvalid certificate it controls, fooling the client into accepting it.\n\n## Reproduction steps\n\n1. The NATS Rust client tries to establish a new connection\n2. The connection is intercepted by a MitM proxy\n3. The proxy makes a separate connection to the NATS server\n4. The NATS server replies with an `INFO` message\n5. The proxy reads the `INFO`, alters the `host` JSON field and passes\n the tampered `INFO` back to the client\n6. The proxy upgrades the client connection to TLS, presenting a certificate issued\n by a certificate authority present in the client\u0027s keychain.\n In the previous step the `host` was set to the common name of said certificate\n7. `rustls` accepts the certificate, having verified that the common name matches the\n attacker-controlled value it was given\n9. The client has been fooled by the MitM proxy into accepting the attacker-controlled certificate",
"id": "RUSTSEC-2023-0027",
"modified": "2023-06-13T13:10:24Z",
"published": "2023-03-24T12:00:00Z",
"references": [
{
"type": "PACKAGE",
"url": "https://crates.io/crates/async-nats"
},
{
"type": "ADVISORY",
"url": "https://rustsec.org/advisories/RUSTSEC-2023-0027.html"
},
{
"type": "WEB",
"url": "https://github.com/nats-io/nats.rs/commit/817a7b942c462fa9d9938dcb62124173634132fb#diff-767d442397fcaaf2f83e8f924d4a70317a2ce4703a49964d6007707949cfa5f5L303-R304"
}
],
"related": [],
"severity": [],
"summary": "TLS certificate common name validation bypass"
}
Loading…
Loading…
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Loading…
Loading…