Like a hotel that keeps handing out the same room key even after the guest checks out and a new one checks in
⚠ Note: CVE-2026-88932 does not exist in any public database (NVD, MITRE, CVE.org). The nearest match is CVE-2026-8932, a libcurl connection-reuse flaw where mTLS client certificate and private-key configuration fields are omitted from the connection-pool matching comparator. When an application using libcurl switches client certificates between transfers on the same handle, the library may incorrectly reuse a TLS session authenticated under the *previous* identity. Affected versions span curl 7.7 (March 2001) through 8.20.0 — a 25-year window. Fixed in curl 8.21.0, with backports to 8.20.1, 8.16.1, and 8.14.2. Only applications embedding libcurl are affected; the curl CLI tool is not vulnerable.
The curl project itself rates this Low severity. Red Hat assigned CVSS 7.5 (AV:N/AC:L) and SUSE assigned 7.4 (AV:N/AC:H), both of which dramatically overstate real-world risk. The AV:N (Network) vector is technically correct — the confused TLS session travels over the network — but it misleadingly implies a remote attacker can trigger the flaw at will. In reality, exploitation requires a *specific application design pattern*: programmatic libcurl usage with mTLS enabled, client certificate switching between transfers, and connection pooling left on (default). The vast majority of libcurl consumers use standard HTTPS without client certificates. After 25 years of exposure with zero known exploitation, the curl project's LOW rating is the honest one.
4 steps from start to impact.
Application uses libcurl with mTLS
curl CLI) and be configured to perform mutual TLS authentication using client certificates. This is a prerequisite the attacker cannot create — it must already exist in the application's design.- Application embeds libcurl 7.7–8.20.0
- mTLS with client certificates is enabled
- Most libcurl consumers use standard HTTPS without client certificates
- mTLS is predominantly used in service-mesh and internal microservice contexts, not in internet-facing apps
Application switches client certificate identity
CURLOPT_SSLCERT, CURLOPT_SSLKEY) between consecutive transfers while reusing the same multi or easy handle with connection pooling enabled. This is an uncommon application pattern — most mTLS apps use a single fixed identity.- Application rotates or switches client cert/key between transfers
- Connection reuse (default) is not disabled via
CURLOPT_FORBID_REUSE
- Multi-identity mTLS within a single libcurl handle is a rare design pattern
- Applications needing multiple identities typically use separate handles or processes
- Setting
CURLOPT_FORBID_REUSEeliminates the issue entirely
Connection pool serves stale identity
- Previous connection still in pool and eligible for reuse
- Remote server does not perform per-request certificate renegotiation
- Many mTLS-enforcing servers perform additional application-layer identity checks beyond TLS
- Short-lived connections or aggressive pool timeouts reduce the window
Attacker benefits from identity confusion
- Attacker can influence which client certificate the application selects
- Attacker can trigger or time transfers to exploit the pool race
- If an attacker controls cert selection, they likely already own the process
- No known technique to remotely trigger this without application-level access
- No public weaponized exploit exists
The supporting signals.
| In-the-Wild Exploitation | None confirmed. No campaigns, no KEV listing, no reports of active exploitation after 25 years of exposure. |
|---|---|
| Proof-of-Concept | GitHub repo 0xBlackash/CVE-2026-8932 contains educational documentation and a demo C file — not a weaponized exploit. No other PoC repos found. |
| EPSS Score | Not yet published / not indexed at time of assessment. |
| KEV Status | Not listed in CISA Known Exploited Vulnerabilities catalog. |
| CVSS Vectors | curl project: Low (no numeric score). Red Hat: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N. SUSE: 7.4 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N. The AC:H in SUSE's vector is more realistic. |
| Affected Versions | libcurl in curl 7.7 through 8.20.0 (25-year window). The curl CLI is not affected. |
| Fixed Versions | curl 8.21.0 (June 24, 2026). Backports: 8.20.1, 8.16.1, 8.14.2. SUSE: curl 8.21.0-1.1. RHEL/Amazon Linux: patches pending or available per distro. |
| Scanning / Exposure | No Shodan/GreyNoise/Censys data relevant — this is a client-side library flaw, not a remotely scannable service vulnerability. Exposure depends entirely on application-level mTLS usage patterns. |
| Disclosure Date | June 24, 2026 (coordinated with curl 8.21.0 release). |
| Reporter | Joshua Rogers (Aisle Research) — reported and provided the patch. |
noisgate verdict.
The single most decisive factor is the extreme narrowness of the triggering condition: the application must embed libcurl, use mTLS with client certificates, and actively switch certificate identities between transfers on the same handle — a pattern used by a negligible fraction of the billions of libcurl deployments. The curl project's own LOW rating, combined with 25 years of zero exploitation, confirms this is a correctness bug with marginal security impact, not a weaponizable vulnerability.
Why this verdict
- Triggering conditions are exceptionally narrow: The flaw requires programmatic libcurl usage + mTLS + client cert switching + connection reuse — a combination present in a tiny fraction of libcurl consumers. This is not remotely triggerable by an external attacker.
- 25 years of zero exploitation: The bug existed since curl 7.7 (March 2001) with no confirmed exploitation, no campaigns, and no KEV listing. This is strong empirical evidence of low real-world risk.
- Vendor self-assessment is LOW: The curl project — which has a strong track record of honest severity ratings — classifies this as Low. The Red Hat/SUSE CVSS scores of 7.4-7.5 are CVSS-inflation artifacts from AV:N applying to a client library.
- No weaponized PoC: The only public repo is educational/documentary. No working exploit chain demonstrates identity theft via this flaw.
- Role multiplier: libcurl is deployed across all tiers — workstations, servers, CI/CD, IoT. However, the *triggering condition* (mTLS identity switching) is almost exclusively found in internal service-to-service communication. Even in high-value roles (service meshes, API gateways), mainstream implementations use Envoy/nginx for mTLS, not raw libcurl handles with cert switching. The blast radius if triggered is bounded to identity confusion within a single process's connection pool — it does not chain to domain takeover, fleet compromise, or supply-chain pivot. No high-value role produces an outcome that meets the HIGH floor threshold.
Why not higher?
A MEDIUM or higher rating would require either active exploitation, a realistic remote attack vector, or a blast radius beyond single-process identity confusion. None of these conditions exist. The flaw cannot be triggered by a network attacker — it requires the application itself to be designed in a specific way. Even the most generous CVSS reading (Red Hat's 7.5) relies on AV:N/AC:L which mischaracterizes the actual attack complexity as trivially network-exploitable.
Why not lower?
An IGNORE rating would be appropriate if no realistic scenario existed where the flaw could cause harm. While exploitation is impractical in the vast majority of deployments, a custom internal service that embeds libcurl with multi-identity mTLS *could* experience unintended certificate reuse, resulting in privilege confusion between service identities. This edge case keeps it at LOW rather than IGNORE.
What to do — in priority order.
- Set
CURLOPT_FORBID_REUSEon handles that switch mTLS identities — This disables connection pooling for the affected handle, fully eliminating the reuse flaw. No SLA pressure — apply whenever convenient as part of the LOW-severity remediation backlog. - Use separate libcurl easy handles per client certificate identity — Each identity gets its own connection pool, preventing cross-identity reuse. This is already best practice for multi-tenant mTLS applications.
- Update curl/libcurl to 8.21.0 or a backported release (8.20.1, 8.16.1, 8.14.2) — The definitive fix. Per noisgate remediation SLA for LOW, treat as backlog hygiene with no hard deadline — bundle with your next scheduled curl update.
- WAF / IDS rules — this is a client-side library logic flaw, not an inbound attack pattern. No network-layer control can detect or prevent it.
- Certificate pinning on the server side — the server sees a valid client certificate either way; the issue is *which* valid certificate is presented, not whether it's valid.
- TLS version enforcement — the flaw exists in the connection-pool matching logic, not in the TLS handshake itself. TLS 1.2 vs 1.3 makes no difference.
Crowdsourced verification payload.
Run on any Linux/macOS host where curl or libcurl is installed. Requires no special privileges. Example: bash check_cve_2026_8932.sh or bash check_cve_2026_8932.sh /usr/local/bin/curl to check a specific binary.
#!/usr/bin/env bash
# check_cve_2026_8932.sh — Check if installed curl/libcurl is vulnerable to CVE-2026-8932
# Vulnerability: incomplete mTLS config matching in connection reuse
# Affected: curl 7.7 through 8.20.0
# Fixed: 8.21.0, 8.20.1, 8.16.1, 8.14.2
set -euo pipefail
CURL_BIN="${1:-curl}"
if ! command -v "$CURL_BIN" &>/dev/null; then
echo "UNKNOWN — '$CURL_BIN' not found in PATH"
exit 2
fi
VERSION_STR=$("$CURL_BIN" --version 2>/dev/null | head -1 | awk '{print $2}')
if [[ -z "$VERSION_STR" ]]; then
echo "UNKNOWN — could not parse curl version"
exit 2
fi
echo "Detected curl version: $VERSION_STR"
# Compare versions using sort -V
version_gte() {
# Returns 0 if $1 >= $2
[[ "$(printf '%s\n%s' "$1" "$2" | sort -V | head -1)" == "$2" ]]
}
# Fixed versions: 8.21.0, 8.20.1, 8.16.1, 8.14.2
# Vulnerable: 7.7 through 8.20.0 (excluding backport ranges)
if version_gte "$VERSION_STR" "8.21.0"; then
echo "PATCHED — $VERSION_STR >= 8.21.0"
exit 0
fi
# Check backport ranges
if [[ "$VERSION_STR" == 8.20.* ]] && version_gte "$VERSION_STR" "8.20.1"; then
echo "PATCHED — $VERSION_STR is backported fix (8.20.1+)"
exit 0
fi
if [[ "$VERSION_STR" == 8.16.* ]] && version_gte "$VERSION_STR" "8.16.1"; then
echo "PATCHED — $VERSION_STR is backported fix (8.16.1+)"
exit 0
fi
if [[ "$VERSION_STR" == 8.14.* ]] && version_gte "$VERSION_STR" "8.14.2"; then
echo "PATCHED — $VERSION_STR is backported fix (8.14.2+)"
exit 0
fi
if version_gte "$VERSION_STR" "7.7"; then
echo "VULNERABLE — $VERSION_STR is in affected range (7.7 – 8.20.0)"
exit 1
else
echo "PATCHED — $VERSION_STR predates the vulnerable code (< 7.7)"
exit 0
fiIf you remember one thing.
CURLOPT_FORBID_REUSE as a code-level fix. For the other 99.9% of your fleet where curl is used for standard HTTPS, this is a non-event. Verify your installed versions with the script above, tag affected hosts, and close the ticket when your next curl rollout lands.Sources
- curl.se Official Advisory — CVE-2026-8932
- Red Hat CVE Page — CVE-2026-8932
- SUSE CVE Page — CVE-2026-8932
- SentinelOne Vulnerability Database — CVE-2026-8932
- Digital Warfare — curl flaw CVE-2026-8932 Undetected for 25 Years
- BitNinja — Server Security Breach CVE-2026-8932
- NVD — CVE-2026-8932
- GitHub PoC Repo — 0xBlackash/CVE-2026-8932
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.