Descripción
Cuando falla una operación `LIST` con comodines FTP, libcurl omite la ruta de restauración destinada a los listados exitosos, lo que deja el callback de escritura configurado con el analizador interno de listados y los datos del callback de escritura apuntando directamente al easy handle. La reutilización posterior de este handle provoca un fallo inmediato, y clonarlo mediante `curl_easy_duphandle()` copia este estado corrupto en el duplicado. Si luego se libera el handle original, ejecutar una transferencia en el handle clonado provoca una lectura de uso después de liberar memoria (use-after-free) en el heap sobre la referencia colgante al handle; alternativamente, reutilizar el handle original o el clonado cambiando solo `CURLOPT_WRITEDATA` (y omitiendo `CURLOPT_WRITEFUNCTION`) produce una confusión de tipos, lo que obliga al analizador interno a interpretar los bytes de respuesta entrantes del servidor en la memoria apuntada por el puntero de datos de escritura proporcionado por la aplicación.
Qué hacer
Revisa si usas el producto afectado y en qué versión, y aplica la actualización o la mitigación que indique el aviso del fabricante. CISA no ha confirmado que se esté explotando; si eso cambia, esta ficha pasa a «explotada» y te avisamos en el boletín.
Versiones afectadas
- curl Afectadas: 8.22.0 a 8.22.0 · 8.21.0 a 8.21.0 · 8.20.0 a 8.20.0 · 8.19.0 a 8.19.0 · 8.18.0 a 8.18.0 · 8.17.0 a 8.17.0 · 8.16.0 a 8.16.0 · 8.15.0 a 8.15.0 · 8.14.1 a 8.14.1 · 8.14.0 a 8.14.0
Según el registro de la vulnerabilidad en CVE.org, tal como lo publicó el fabricante. Confirma tu versión exacta en el aviso del fabricante.
Referencias
- Referencia en curl.securl.se/docs/CVE-2026-92388.json
- Referencia en curl.securl.se/docs/CVE-2026-92388.html
- Referencia en hackerone.comhackerone.com/reports/4022070
Ver el texto original en inglés (CVE.org)
FTP wildcard write callback mixup
When an FTP wildcard `LIST` operation fails, libcurl omits the restoration path meant for successful listings, leaving the write callback set to the internal listing parser and the write callback data pointing directly to the easy handle. Subsequent reuse of this handle triggers an immediate crash, and cloning it via `curl_easy_duphandle()` copies this corrupted state into the duplicate. If the original handle is subsequently freed, executing a transfer on the cloned handle causes a heap use-after-free read against the dangling handle reference; alternatively, reusing the original or cloned handle while changing only `CURLOPT_WRITEDATA` (and omitting `CURLOPT_WRITEFUNCTION`) results in type confusion, forcing the internal parser to interpret incoming server response bytes into memory at the application-supplied write data pointer.