CVE-2022-4450: Double free after calling PEM_read_bio_ex

Published Jan 25, 2023
·
Updated

A double-free vulnerability was found in OpenSSL's PEMreadbioex function. The function PEMreadbioex() reads a PEM file from a BIO and parses and decodes the "name" (for example, "CERTIFICATE"), any header data, and the payload data. If the function succeeds, then the "nameout," "header," and "data" arguments are populated with pointers to buffers containing the relevant decoded data. The caller is responsible for freeing those buffers. Constructing a PEM file that results in 0 bytes of payload data is possible. In this case, PEMreadbioex() will return a failure code but will populate the header argument with a pointer to a freed buffer. A double-free will occur if the caller also frees this buffer. This will most likely lead to a crash. This could be exploited by an attacker who can supply malicious PEM files for parsing to achieve a denial of service attack.

Other sources

OpenSSL is vulnerable to a denial of service, caused by a double-free error related to the improper handling of specific PEM data by the PEMreadbioex() function. By sending specially crafted PEM files for parsing, a remote attacker could exploit this vulnerability to cause the system to crash.

IBM

The function PEMreadbioex() 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 "nameout", "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 PEMreadbioex() 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 PEMreadbio() and PEMread() are simple wrappers around PEMreadbioex() and therefore these functions are also directly affected.

These functions are also called indirectly by a number of other OpenSSL functions including PEMX509INFOreadbioex() and SSLCTXuseserverinfofile() which are also vulnerable. Some OpenSSL internal uses of these functions are not vulnerable because the caller does not free the header argument if PEMreadbioex() returns a failure code. These locations include the PEMreadbioTYPE() functions as well as the decoders introduced in OpenSSL 3.0.

GitHub

The function PEMreadbioex() 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 "nameout", "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 PEMreadbioex() 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 PEMreadbio() and PEMread() are simple wrappers around PEMreadbioex() and therefore these functions are also directly affected.

These functions are also called indirectly by a number of other OpenSSL functions including PEMX509INFOreadbioex() and SSLCTXuseserverinfofile() which are also vulnerable. Some OpenSSL internal uses of these functions are not vulnerable because the caller does not free the header argument if PEMreadbioex() returns a failure code. These locations include the PEMreadbioTYPE() functions as well as the decoders introduced in OpenSSL 3.0.

The OpenSSL asn1parse command line application is also impacted by this issue.

NVD

Affected Software

22 affected componentsFixes available
redhat/jbcs-httpd24-openssl<1:1.1.1k-14.el8
1:1.1.1k-14.el8
redhat/jbcs-httpd24-openssl<1:1.1.1k-14.el7
1:1.1.1k-14.el7
redhat/edk2<0:20220126gitbb1bba3d77-4.el8
0:20220126gitbb1bba3d77-4.el8
redhat/openssl<1:1.1.1k-9.el8_7
1:1.1.1k-9.el8_7
redhat/openssl<1:1.1.1k-9.el8_6
1:1.1.1k-9.el8_6
redhat/openssl<1:3.0.1-47.el9_1
1:3.0.1-47.el9_1
redhat/edk2<0:20221207gitfff6d81270b5-9.el9_2
0:20221207gitfff6d81270b5-9.el9_2
redhat/openssl<1:3.0.1-46.el9_0
1:3.0.1-46.el9_0
redhat/jws5-tomcat-native<0:1.2.31-14.redhat_14.el7
0:1.2.31-14.redhat_14.el7
redhat/jws5-tomcat-native<0:1.2.31-14.redhat_14.el8
0:1.2.31-14.redhat_14.el8
redhat/jws5-tomcat-native<0:1.2.31-14.redhat_14.el9
0:1.2.31-14.redhat_14.el9
rust/openssl-src>=300.0.0<300.0.12
300.0.12
rust/openssl-src<111.25.0
111.25.0
IBM Cloud Pak for Business Automation<=V22.0.2 - V22.0.2-IF004
IBM Cloud Pak for Business Automation<=V21.0.3 - V21.0.3-IF020
IBM Cloud Pak for Business Automation<=V22.0.1 - V22.0.1-IF006 and later fixesV21.0.2 - V21.0.2-IF012 and later fixesV21.0.1 - V21.0.1-IF007 and later fixesV20.0.1 - V20.0.3 and later fixesV19.0.1 - V19.0.3 and later fixesV18.0.0 - V18.0.2 and later fixes
debian/openssl
1.1.1w-0+deb11u11.1.1n-0+deb11u53.0.14-1~deb12u13.0.14-1~deb12u23.3.2-1
OpenSSL OpenSSL>=1.1.1<1.1.1t
OpenSSL OpenSSL>=3.0.0<3.0.8
Stormshield Stormshield Network Security>=4.0.0<4.3.16
Stormshield Stormshield Network Security>=4.4.0<4.6.3
F5 Traffix SDC=5.2.0, =5.1.0

Event History

Jan 25, 2023
Data Sourced
via Red Hat·03:40 PM
DescriptionSeverityAffected Software
Feb 7, 2023
CVE Published
12:00 AM
Feb 8, 2023
CVE Published
via MITRE·07:04 PM
Data Sourced
via MITRE·07:04 PM
DescriptionWeakness
Data Sourced
via NVD·08:15 PM
RemedyDescriptionSeverityWeaknessAffected Software
Advisory Published
via GitHub·10:22 PM
Feb 16, 2023
Advisory Published
via F5·08:14 PM
Feb 17, 2024
Data Sourced
via Launchpad·12:35 AM
Description
Sep 16, 2024
Data Sourced
via Ubuntu·03:40 AM
RemedyDescriptionSeverityAffected Software
Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is CVE-2022-4450?

CVE-2022-4450 is a double-free vulnerability found in OpenSSL's PEM_read_bio_ex function.

2

What is the severity of CVE-2022-4450?

CVE-2022-4450 has a severity level of high (7).

3

Which software is affected by CVE-2022-4450?

OpenSSL versions from 1.1.1 to 1.1.1t, OpenSSL versions from 3.0.0 to 3.0.8, Stormshield Network Security versions from 4.0.0 to 4.3.16, and Stormshield Network Security versions from 4.4.0 to 4.6.3 are affected.

4

How does CVE-2022-4450 impact OpenSSL?

CVE-2022-4450 allows an attacker to trigger a double-free vulnerability in OpenSSL's PEM_read_bio_ex function, potentially leading to arbitrary code execution.

5

Are there any references for CVE-2022-4450?

Yes, you can find references for CVE-2022-4450 at the following links: [1](https://bugzilla.redhat.com/show_bug.cgi/show_bug.cgi?id=2167906), [2](https://bugzilla.redhat.com/show_bug.cgi/show_bug.cgi?id=2167909), [3](https://bugzilla.redhat.com/show_bug.cgi/show_bug.cgi?id=2167907).

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203