{"id":"CVE-2026-92388","kind":"vulnerability","aliases":["CVE-2026-92388"],"related":[],"title":"libcurl: failed FTP wildcard LIST leaves handle state corrupt, enabling memory corruption","description":"When an FTP wildcard `LIST` operation fails, libcurl omits the restoration\npath meant for successful listings, leaving the write callback set to the\ninternal listing parser and the write callback data pointing directly to the\neasy handle. Subsequent reuse of this handle triggers an immediate crash, and\ncloning it via `curl_easy_duphandle()` copies this corrupted state into the\nduplicate. If the original handle is subsequently freed, executing a transfer\non the cloned handle causes a heap use-after-free read against the dangling\nhandle reference; alternatively, reusing the original or cloned handle while\nchanging only  `CURLOPT_WRITEDATA` (and omitting `CURLOPT_WRITEFUNCTION`)\nresults in type confusion, forcing the internal parser to interpret incoming\nserver response bytes into memory at the application-supplied write data\npointer.","summary":"When an FTP wildcard LIST fails, libcurl keeps its internal listing parser as the write callback, so reusing or duplicating the easy handle crashes the process or reads freed memory. Changing only CURLOPT_WRITEDATA after such a failure can make the parser write server response bytes into application memory.","severity":"unknown","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["c","c++","ftp","libcurl","package","self-hosted"],"not_affected_if":["no-ftp-wildcard","no-handle-reuse"],"how_to_check":"- Run `curl --version` to see the libcurl version in use\n- Search application code for FTP wildcard transfers (CURLOPT_WILDCARDMATCH) combined with curl_easy_duphandle or reused easy handles\n- unknown whether other checks apply; the sources do not list a configuration check","fix":"- Upgrade libcurl to the fixed release named in the upstream advisory: unknown\n- Until patched, avoid reusing or duplicating easy handles after a failed FTP wildcard LIST, and do not change only CURLOPT_WRITEDATA on such handles","status":"open","published_at":"2026-10-20T21:17:21+00:00","first_seen_at":"2026-10-23T21:57:21+00:00","triaged_at":"2026-10-25T05:04:24+00:00","updated_at":"2026-10-25T05:04:24+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-25T05:04:24Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade libcurl to the fixed release named in the upstream advisory: unknown\n- Until patched, avoid reusing or duplicating easy handles after a failed FTP wildcard LIST, and do not change only CURLOPT_WRITEDATA on such handles","reach":"network","title":"libcurl: failed FTP wildcard LIST leaves handle state corrupt, enabling memory corruption","impact":"high","summary":"When an FTP wildcard LIST fails, libcurl keeps its internal listing parser as the write callback, so reusing or duplicating the easy handle crashes the process or reads freed memory. Changing only CURLOPT_WRITEDATA after such a failure can make the parser write server response bytes into application memory.","category":"package","nicknames":[],"who_cares":["libcurl","c","c++","ftp","self-hosted"],"confidence":0.6,"needs_auth":"unknown","worst_case":"Heap use-after-free read or memory writes from server data into application memory","analyst_note":"Find the fixed libcurl version and the exact trigger conditions in the NVD entry at https://nvd.nist.gov/vuln/detail/CVE-2026-92388 and the curl project advisory it cites.","how_to_check":"- Run `curl --version` to see the libcurl version in use\n- Search application code for FTP wildcard transfers (CURLOPT_WILDCARDMATCH) combined with curl_easy_duphandle or reused easy handles\n- unknown whether other checks apply; the sources do not list a configuration check","needs_analyst":true,"not_affected_if":["no-ftp-wildcard","no-handle-reuse"],"who_is_affected":"Applications that use libcurl to run FTP wildcard LIST transfers and reuse or duplicate easy handles after a failed listing are exposed. Programs that never use FTP wildcard matching, or that do not reuse handles, are unlikely to be affected. Fixed-version details are not in the sources.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.000708,"input_tokens":3502,"output_tokens":715,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-2026':14A,17A '-92388':15A,18A 'altern':163C 'applic':74B,198C 'application-suppli':197C 'byte':72B,192C 'c':19B,20B 'callback':42B,95C,105C 'caus':150C 'chang':57B,171C 'clone':123C,148C,168C 'confus':182C 'copi':129C 'corrupt':9A,12A,131C 'crash':50B,121C 'curl':126C 'curlopt':59B,173C,177C 'cve':13A,16A 'dangl':160C 'data':106C,201C 'direct':108C 'duphandl':128C 'duplic':46B,135C 'easi':48B,111C,127C 'enabl':10A 'execut':143C 'fail':2A,32B,82C 'failur':64B 'forc':183C 'free':156C 'freed':55B,142C 'ftp':3A,21B,29B,78C 'handl':7A,49B,112C,117C,139C,149C,161C,169C 'heap':152C 'host':26B 'immedi':120C 'incom':189C 'intern':36B,99C,185C 'interpret':188C 'keep':34B 'leav':6A,92C 'libcurl':1A,22B,33B,83C 'list':5A,31B,37B,80C,91C,100C 'make':66B 'meant':88C 'memori':11A,56B,75B,194C 'omit':84C,176C 'oper':81C 'origin':138C,166C 'packag':23B 'parser':38B,68B,101C,186C 'path':87C 'point':107C 'pointer':202C 'process':52B 'read':54B,157C 'refer':162C 'respons':71B,191C 'restor':86C 'result':179C 'reus':44B,114C,164C 'self':25B 'self-host':24B 'server':70B,190C 'set':96C 'state':8A,132C 'subsequ':113C,141C 'success':90C 'suppli':199C 'transfer':145C 'trigger':118C 'type':181C 'use':154C 'use-after-fre':153C 'via':125C 'wildcard':4A,30B,79C 'write':41B,69B,94C,104C,200C 'writedata':60B,174C 'writefunct':178C","nicknames":[],"mitigations":[],"who_affected":"Applications that use libcurl to run FTP wildcard LIST transfers and reuse or duplicate easy handles after a failed listing are exposed. Programs that never use FTP wildcard matching, or that do not reuse handles, are unlikely to be affected. Fixed-version details are not in the sources.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-20T21:17:21+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-92388","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-92388","severity":null,"published_at":"2026-10-20T21:17:21+00:00","modified_at":"2026-10-22T16:57:53+00:00","first_seen_at":"2026-10-23T21:57:21+00:00","fetched_at":"2026-10-23T22:28:58+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}