Eighteen More After Zero: curl 8.23.0 Fixes 24 CVEs as the AISLE Audit Closes Its Second Release

On 14 October 2026 the curl project released 8.23.0, fixing 24 CVEs in the transfer tool and library the maintainers estimate runs in roughly 30 billion installations. Eighteen of the 24 — 75% — came from a single AI-driven audit by AISLE, which now counts that audit at 24 CVEs across two releases and its twelve-month curl total at 35 CVEs plus 160 additional bugs, more than any other organization in the project’s history. The audit began, AISLE says, right after OpenAI’s Codex Security, ZeroPath and Anthropic’s Mythos had found no additional issues in curl. The next finding that matters most is not AISLE’s at all: CVE-2026-92392, an HTTP/2 upload use-after-free the curl advisory says has been proven convertible into remote code execution — reported by “Luna with Claude, Anthropic”.

This is a direct sequel to our June coverage of the record 8.21.0 release, when AISLE’s first batch — including CVE-2026-8932, the 25-year-old mutual-TLS connection-reuse flaw dating to curl 7.7 in 2001 — landed. AISLE now frames the work as one dedicated audit spanning the initial run, follow-on analysis and two releases. What is new in 8.23.0 is both the volume and the pattern: the bugs that remain in the world’s most scrutinized C codebase increasingly hide, in AISLE’s phrasing, in “interactions between connection reuse, credentials, redirects, protocol state and rarely used configurations” — failures that appear only when the system mishandles a change of context.

The eighteen: state that survived the transition

AISLE groups its 8.23.0 findings, and the grouping is the analysis. Quoting the write-up’s own summary: “These are not all literally the same bug, but they share a theme: a piece of security-sensitive state remained attached to a handle or connection after the surrounding trust context changed.” Eight findings involve credentials or authenticated state crossing a boundary it should not have:

  • CVE-2026-86409 — stale AWS SigV4 headers sent to an unintended destination;
  • CVE-2026-86410 — redirect to SFTP or SCP bypasses host verification;
  • CVE-2026-86411 — FTP connection reuse inherits a client certificate;
  • CVE-2026-86413 — Negotiate credentials sent to a redirected origin;
  • CVE-2026-86414 — host credentials leaked to an HTTP proxy;
  • CVE-2026-86415 — automatic client-certificate connection-reuse mix-up;
  • CVE-2026-94265 — Authorization: Negotiate material reaching a foreign origin;
  • CVE-2026-94266 — password leak through CURLINFO_EFFECTIVE_URL.

Four more involve cookies or HSTS state being erased, truncated or loaded incorrectly (CVE-2026-86412, CVE-2026-87862, CVE-2026-87863, CVE-2026-92386); four are protocol and command-line edge cases including an IMAP APPEND CRLF-conversion command injection (CVE-2026-87864), FTP wildcard and TFTP direction mix-ups (CVE-2026-92388, CVE-2026-92389) and a -J no-clobber bypass via 103 Early Hints (CVE-2026-92390); and two affect process stability — a never-ending loop on server response omission (CVE-2026-92387) and stack exhaustion through recursive curl_mime_free calls (CVE-2026-92391).

Read as a set, the credential group is a catalogue of one failure mode: a connection enters a pool under one identity and is considered for reuse under another; a redirect changes the destination but leaves authentication state behind. Each function looks reasonable alone — AISLE’s line is that “most of these vulnerabilities do not sit inside one obviously dangerous line of code” — and the security failure appears only across time, files, API calls and protocol transitions. That is also, AISLE argues, why fuzzers and local static analysis kept missing them: the invariant is global, the violation is a sequence.

CVE-2026-92392: the proven client-side RCE

The sharpest record in the release is the one AISLE did not find. During an upload, curl mishandles an HTTP/2 RST_STREAM received from the server — with reason HTTP_1_1_REQUIRED or REFUSED_STREAM — producing a use-after-free of a struct Curl_easy object. The curl.se advisory, published 14 October 2026 alongside the release, states the consequence without hedging: “This Use-After-Free flaw has been proven to be possible to convert into a Remote Code Execution if a set of specific criteria are met by the malicious server.” The criteria are demanding — exact curl build and structure layout for offsets, architecture and libc allocator/heap geometry, nghttp2 and OpenSSL/TLS 1.3 allocation behavior around session tickets, a pinned CA bundle, two parallel transfers with calibrated scheduling, libc leaks, and a roughly 23-byte command constraint — but they describe a working proof of concept against a malicious server, which inverts the usual curl threat model: the client is the victim and any server it uploads to is the attacker.

Affected versions are 8.12.0 through 8.22.0 inclusive, with the flaw introduced by commit cd9107e0128191b7b5396b; the advisory also names unaffected maintenance lines (8.20.x from 8.20.2, 8.16.x from 8.16.2, 8.14.x from 8.14.3). It was reported on 15 September 2026 — a 29-day private window — credited to “Luna with Claude, Anthropic” and patched by Stefan Eissing (fix commit 8b0744af5b1b631da5b938ca31c). The NVD record, published 14 October at 08:17 UTC with status Received, references the curl.se advisory and a HackerOne report (4030333). The advisory rates it High, CWE-416, and calls it “a C mistake (likely to have been avoided had we not been using C)” — the project’s standing deadpan for memory-safety defects.

Why the discovery story matters as much as the bugs

Two methodological claims in this release deserve separation from the marketing around them. First, AISLE describes a disproof-first pipeline — candidates checked against code, docs, supported configurations and the project’s security model, reproduced with concrete test cases, then reviewed by a human researcher before submission, with curl’s own security team making “the ultimate call on assignment and responsible disclosure.” Whether or not that pipeline generalizes, its output record here is concrete: reproducible findings with patches across two releases, in a codebase three rival AI efforts had just swept. Daniel Stenberg’s quoted verdict — “With AISLE, we have a cooperation unlike any we’ve had with a security organization before” — is the maintainer’s, not the vendor’s, and it follows a year in which AISLE’s earlier curl findings included the oldest vulnerability ever reported in the project.

Second, the rival-systems framing cuts both ways for defenders. An audit that finds 24 CVEs where Codex Security, ZeroPath and Mythos found nothing further is evidence that AI auditing capability is system capability — harness, invariant-tracing and triage discipline — not raw model capability. It is also evidence that “an AI already looked at this code” is becoming the new “it passed the fuzzer”: a true statement about one pass with no bearing on the next. For agent infrastructure the practical reading is narrower and urgent. libcurl lives inside containers, CI runners, SDKs and the toolchains agents shell out to; the credential-reuse group means a handle can silently change whose authority it speaks with mid-run, and 92392 means the server at the other end of an agent’s upload can own the uploader. Patch the library, not just the binary — and inventory where the library is.

Remediation

Upgrade curl to 8.23.0, apply the upstream patch, or — the advisory’s option C — do not use HTTP/2. The curl.se advisory lists those three in that order, and for distributors the maintenance-branch thresholds above define the backport surface. Note the June lesson still applies: several of these flaws affect libcurl rather than the CLI, so they sit inside embedded products and agent toolchains with no version string of their own — curl --version on the host tells you nothing about the library linked into the thing that actually makes the request.

Reporting note: the 8.23.0 release framing, all eighteen AISLE CVE IDs with their one-line descriptions, the audit totals (24 CVEs across two releases, 35 CVEs and 160 bugs in twelve months), the rival-systems context and the Stenberg quotation were read first-hand from AISLE’s 14 October 2026 audit write-up. The CVE-2026-92392 mechanism, affected and unaffected versions, introducing and fixing commits, timeline, credits, severity and recommendations were read first-hand from the curl.se security advisory; the NVD record (published 14 October 2026, 08:17 UTC, status Received, HackerOne reference) was read first-hand from the NVD 2.0 API. Nothing was installed, no curl build was compiled or run, no malicious server was stood up and no proof of concept was executed. A Brave Search query returned the primary sources plus news summaries and CVE mirrors; no independent reproduction beyond the credited reporters was available at the time of writing.

Sources: