When a flaw hits the news
OpenSSL CVE-2026-45447: who it really affects
A critical OpenSSL flaw — but it is not in a normal site’s TLS handshake; it is in PKCS#7 / S-MIME signature verification. Here is the difference, the fixed versions, and why from outside you almost never get a “confirmed”.
27 October 2026
What happened, in plain words
OpenSSL’s June 2026 batch fixed CVE-2026-45447 — a heap use-after-free in `PKCS7_verify()`. It was found with a researcher and AI (Claude, Anthropic); a public PoC already exists.
The gist: when a program verifies a specially crafted PKCS#7 signature (an empty `digestAlgorithms` set), OpenSSL frees a buffer the caller still uses. The result is a crash, and in the worst case attacker code execution.
Important: this is not a bug in setting up a TLS connection. The vulnerable path is PKCS#7 / S-MIME signature verification, not how a browser opens your HTTPS site.
Severity is high: trackers give CVSS around 8.1–8.8, some sources up to 9.8. Check the OpenSSL advisory for the authoritative score.
Why this differs from a “site vulnerability”
A plain site that just serves pages over HTTPS does not call `PKCS7_verify()` on attacker data. So “I run OpenSSL” does not by itself mean “this CVE is exploitable against me from outside”.
It triggers where an application verifies a signature from an untrusted source:
- mail systems and gateways doing S/MIME verification
- verifying signed documents, packages, updates or tokens via OpenSSL
- some SSO / federation flows where an inbound object carries a PKCS#7 signature
- custom services that call `PKCS7_verify()` on input data
Noted separately: applications using OpenSSL’s CMS APIs (not the PKCS7 path) and the FIPS module are not affected.
Which OpenSSL versions are safe
Update to the fixed build in your branch:
- OpenSSL 3.6.x → 3.6.3 or newer
- OpenSSL 3.5.x → 3.5.7 or newer
- OpenSSL 3.4.x → 3.4.6 or newer
- OpenSSL 3.0.x → 3.0.21 or newer
- OpenSSL 4.0.x → 4.0.1 or newer
- OpenSSL 1.1.1 and 1.0.2 — open-source support has ended; fixes (1.1.1zh, 1.0.2zq) are premium-support only. Plan a move to a supported 3.x branch.
OpenSSL is a library, not a standalone service: update it via the distro package or base image, then restart everything linked against it (web server, mail, apps).
How to tell “affects us / doesn’t” from outside
From outside, little about OpenSSL is visible — and this is exactly where a “match” must not be confused with “confirmed”.
- The OpenSSL version is not sent in the TLS handshake — the certificate doesn’t reveal it
- Sometimes the version leaks in a banner: Apache with `ServerTokens Full` (`Server: Apache/2.4.x OpenSSL/3.0.x`), or mail server greetings. nginx does not expose it by default
- If the version is visible and in the vulnerable range, that is a signal to look (`probable`), not proof this CVE is exploitable against you
There is no safe external probe that tells a vulnerable `PKCS7_verify()` from a patched one. So for this CVE signalfort honestly stays at `probable` from outside and shows where to look on the host, rather than painting a false “confirmed”. More on statuses: how to tell if a CVE affects you.
What signalfort does on your perimeter: finds hosts, spots a version leak in banners, keeps TLS hygiene (expiry, chain, weak parameters) and prioritises by KEV / EPSS / PoC availability. Start with a free check.
What to do, by infrastructure type
Shared hosting and managed services: updating OpenSSL is on the provider. If unsure, open a ticket referencing CVE-2026-45447 and ask which OpenSSL build your account runs.
Your own VPS / dedicated server: update the package (`openssl`, `libssl`) from the distro repo, then restart the web server, mail and apps; check `openssl version -a`.
Docker: rebuild images on a fresh base — an old layer carries old OpenSSL; redeploy the containers.
Mail gateways and S/MIME, signature-verification services: the risk here is above the rest — patching is the priority, and review which sources you even accept signed objects from.
Don’t forget stage/preview/old subdomains — inventory and alerts on new hosts: new subdomains and shadow IT.
What not to do
- Don’t assume “I run nginx / a normal site, so it doesn’t affect me”: OpenSSL is linked into many services, and the package needs the patch regardless
- Don’t confuse a `probable` from a banner version with “we can be hacked via this CVE”
- Don’t run the public PoC against your own or anyone’s live services
- Don’t leave 1.1.1 / 1.0.2 on the perimeter without an upgrade plan, hoping “they won’t bother”
After updating: a short check
Confirm the system really runs the new build: `openssl version -a`, and for services that they were restarted and are linked against the updated library (`ldd` on the service binary).
Check containers and environments that are updated less often than production separately.
If you accept PKCS#7 / S-MIME from external sources, review those services’ logs for crashes and anomalies around the disclosure dates.
signalfort helps with perimeter exposure and version matches, but does not replace a software inventory and incident analysis on the servers themselves.
FAQ
Is this a vulnerability in my site’s HTTPS / TLS?
No. CVE-2026-45447 is in the PKCS#7 signature-verification function (`PKCS7_verify`), not in the TLS handshake. A normal site serving pages over HTTPS does not call that path.
I run nginx — so I’m not affected?
nginx is also linked against OpenSSL, but this specific CVE needs `PKCS7_verify` called on untrusted data, which nginx serving pages does not do. You still need to update the OpenSSL package — other services use it too.
Will signalfort show “confirmed” for this CVE?
No. There is no safe external probe that distinguishes a vulnerable PKCS7_verify from a patched one. We set `probable` if the OpenSSL version is visible from outside and in range, and show where to verify on the host.
How do I find the OpenSSL version?
On the server, `openssl version -a` and the package version (`libssl`). From outside it’s rarely visible: with Apache `ServerTokens Full` or in a mail server greeting. nginx does not expose it by default.
How critical is it for us specifically?
Severity is high (CVSS ~8.1–8.8, with a PoC), but the real risk depends on whether you verify PKCS#7 / S-MIME signatures from an untrusted source. Patch regardless; judge exploitability by your own usage.
I’m on OpenSSL 1.1.1 / 1.0.2 — what now?
In open source these branches are end of life; fixes exist only in premium support (1.1.1zh, 1.0.2zq). The practical path is a plan to move to a supported 3.x branch, and meanwhile restrict access to services that verify signatures.
Check my site for free