
curl HTTP/2 upload UAF turned RCE (CVE-2026-92392)
CVE-2026-92392 is a use-after-free in curl's HTTP/2 upload path, fixed in curl 8.23.0 and rated HIGH. After a server zeroes the window and resets the stream, a dangling easy-handle pointer survives. On multi handle cleanup, server data lands in the freed memory and can overwrite a function pointer, giving remote code execution. Daniel Stenberg lists why exploitation is hard (~135KB upload, ~23-byte payload, allocation-dependent) and says Luna Tong at Anthropic found it with an OSS Scanner.
What it is
CVE-2026-92392 is a use-after-free in libcurl's HTTP/2 upload path, titled "HTTP/2 upload Use-After-Free". It was fixed in curl 8.23.0, and the curl project grades it HIGH, not CRITICAL. Daniel Stenberg calls it one of the worst curl vulnerabilities in a long time. Luna Tong at Anthropic reported it on 15 September 2026, found with Anthropic's OSS Scanner. The curl security team confirmed it within hours.
How it works
- An application uploads over HTTP/2. This is the default for HTTPS URLs when the server agrees.
- The server zeroes the HTTP/2 window to pause the upload, returns part of a response, then resets the stream. The connection stays up.
- curl ends the transfer but leaves a dangling pointer to the easy handle.
- The application frees the easy handle, then cleans up the multi handle.
- During multi cleanup, libcurl allocates a download buffer and follows the dangling pointer. It also sends a request that leaks local address details, which an attacker needs to defeat ASLR.
- Server data lands in the memory that held the easy handle and overwrites a function pointer. libcurl then calls that pointer, which runs attacker code.
Preconditions / Affected
The page lists these conditions for successful code execution:
- The victim uploads to a malicious server, and the server certificate must remain valid.
- The upload is roughly 135KB.
- The attacker knows curl's architecture well enough to build the payload.
- The allocation sequence and sizes line up. This varies by Linux distribution, libc, TLS certificate bundle and the application using libcurl.
- nghttp2 and OpenSSL/TLS 1.3 behaviour, including allocation effects from session tickets, cooperates.
- The payload area is only about 23 bytes.
The page does not say which releases before 8.23.0 are affected.
What to do
Upgrade to curl/libcurl 8.23.0 or later. Stenberg says the project is replacing internal handle pointers with transfer identifiers that are looked up on demand. This is slightly slower but safer against lifetime mistakes. The project is also adding tests and static analysis.
Caveats
Stenberg expects the most likely result of an attack to be a crash, and rates the chance of a successful attack as slim. The project publishes no CVSS score. Stenberg states that this fix does not guarantee the absence of other use-after-free bugs. The curl project has no plan to rewrite libcurl in a memory-safe language. The full report and a reproducible Docker image are linked from the original post.
Organisations named here
- ASLR
- Daniel Stenberg
- Luna Tong
CVEs named here
- CVE-2026-92392
Technologies named here
- curl command line tool and libcurl
- OSS Scanner
- Docker image
- libcurl easy handle and multi handle
- curl
- C
- nghttp2
- openssl
- Anthropic
Techniques named here
- Information leak
- Malicious HTTP/2 server behavior
- Use-after-free
Related in AppSec
Flowise MCP Security Bypass Enables RCE
Inside an Oracle Database SQL Injection Attack | Huntress
OASIS
