Vulnerability HighRUSTSEC-2023-0010 · openssl-src
RUSTSEC-2023-0010: Double free after calling `PEM_read_bio_ex`
Short answerA security vulnerability in the openssl-src crate: Double free after calling `PEM_read_bio_ex`. GitHub rates it High. Fixed in 111.25.0, 300.0.12: update to a fixed version.
| Crate | openssl-src |
|---|---|
| Type | Vulnerability (denial-of-service) |
| Affected versions | Before 111.25.0; from 300.0.0 before 300.0.12. |
| Fixed in | 111.25.0, 300.0.12 |
| Severity | High (GitHub rating) |
| Published | 2023-02-07 |
| Last changed | 2023-11-08 |
| Also known as | CVE-2022-4450, GHSA-v5w6-wcm8-jm4q |
What to do
- See which version you have:
cargo tree -i openssl-src(it also shows which of your dependencies pulls it in). - Update within your version requirement:
cargo update -p openssl-src. If the fix is a newer major or minor than your requirement allows, raise it in Cargo.toml (for exampleopenssl-src = "300.0.12") or update the dependency that pulls it in. - Check again with
cargo audit, or paste your Cargo.lock into our Cargo.toml checker.
Details from the advisory
The function PEM_read_bio_ex() reads a PEM file from a BIO and parses and decodes the "name" (e.g. "CERTIFICATE"), any header data and the payload data. If the function succeeds then the "name_out", "header" and "data" arguments are populated with pointers to buffers containing the relevant decoded data. The caller is responsible for freeing those buffers. It is possible to construct a PEM file that results in 0 bytes of payload data. In this case PEM_read_bio_ex() will return a failure code but will populate the header argument with a pointer to a buffer that has already been freed. If the caller also frees this buffer then a double free will occur. This will most likely lead to a crash. This could be exploited by an attacker who has the ability to supply malicious PEM files for parsing to achieve a denial of service attack.
The functions PEM_read_bio() and PEM_read() are simple wrappers around PEM_read_bio_ex() and therefore these functions are also directly affected.
These functions are also called indirectly by a number of other OpenSSL functions including PEM_X509_INFO_read_bio_ex() and SSL_CTX_use_serverinfo_file() which are also vulnerable. Some OpenSSL internal uses of these functions are not vulnerable because the caller does not free the header argument if PEM_read_bio_ex() returns a failure code. These locations include the PEM_read_bio_TYPE() functions as well as the decoders introduced in OpenSSL 3.0.
References
- Package: crates.io/crates/openssl-src
- Advisory: rustsec.org/advisories/RUSTSEC-2023-0010.html
- Web: www.openssl.org/news/secadv/20230207.txt
From the RustSec Advisory Database (CC0-1.0) via the OSV export, downloaded Oct 24, 2026. Severity score computed from the published CVSS vector.
Other advisories for openssl-src
- Vulnerability HighRUSTSEC-2020-0015 · 2020-04-25Crash causing Denial of Service attack
- Vulnerability MediumRUSTSEC-2021-0055 · 2021-05-01NULL pointer deref in signature_algorithms processing
- Vulnerability HighRUSTSEC-2021-0056 · 2021-05-01CA certificate check bypass with X509_V_FLAG_X509_STRICT
- Vulnerability HighRUSTSEC-2021-0057 · 2021-05-01Integer overflow in CipherUpdate
- Vulnerability MediumRUSTSEC-2021-0058 · 2021-05-01Null pointer deref in `X509_issuer_and_serial_hash()`
- Vulnerability CriticalRUSTSEC-2021-0097 · 2021-08-24SM2 Decryption Buffer Overflow
- Vulnerability HighRUSTSEC-2021-0098 · 2021-08-24Read buffer overruns processing ASN.1 strings
- VulnerabilityRUSTSEC-2021-0129 · 2021-12-14Invalid handling of `X509_verify_cert()` internal errors in libssl
Up next
Same crateopenssl-src: security historyEvery advisory for this crate, and whether it is safe to use today.Read it next →Did this answer your question?