Resumen
wcurl es el script que acompaña a curl para descargar una URL de forma sencilla y que deduce automáticamente el nombre del fichero de salida a partir de la propia URL. Ese cálculo lo hace la función get_url_filename(), en scripts/wcurl, línea 198 (curl 8.21.0).
La corrección de CVE-2025-11563 hizo que esa función protegiera las secuencias codificadas con porcentaje %2F y %5C, para que una URL no pudiera colar separadores de ruta por esa vía. El fallo que se describe aquí es que la protección no cubría la barra invertida literal (\): si aparecía tal cual en la URL, get_url_filename() la dejaba intacta y acababa formando parte del nombre del fichero de salida. En Windows, donde \ separa directorios, ese nombre se interpreta como una ruta y permite salir del directorio de trabajo (path traversal).
Pasos de reproducción
El investigador lo reprodujo dos veces en Windows 10 nativo (build 19045) con el archivo oficial de curl 8.21.0_7 x64, usando los wcurl.bat, wcurl y curl.exe que incluye.
- Levantar un servidor local que devuelva un contenido marcador.
- Desde el directorio
sandbox\inside, ejecutarwcurl.batcontra una URL con la travesía escrita con barras invertidas literales:
wcurl.bat "http://127.0.0.1:PORT/sub\..\..\escaped.txt"
- curl termina con código de salida 0 y crea
sandbox\escaped.txt, es decir, fuera del directorio de trabajo.
Como control, la misma URL con la travesía codificada con porcentaje se queda dentro del directorio de trabajo:
http://127.0.0.1:PORT/sub%5C..%5C..%5Cescaped.txt
Esto demuestra que la corrección de CVE-2025-11563 funciona para la forma codificada, pero la barra invertida literal la esquiva.
Para repetir la prueba con el script del investigador: extraer el archivo oficial, descargar busybox64u.exe desde https://github.com/rmyorston/busybox-w32 y ejecutar:
python3 02-poc-wcurl-literal-backslash.py --curl-bin ./curl-8.21.0_7-win64-mingw/bin --busybox ./busybox64u.exe --work-dir ./poc-output
El investigador indica que usó IA como ayuda en la auditoría del código y en la redacción, y que repitió personalmente la prueba sobre la versión publicada, el control, la comprobación sobre el código actual y los 28 tests del proyecto.
Impacto
Una URL controlada por un atacante puede hacer que wcurl cree un fichero nuevo, también controlado por el atacante, fuera del directorio que el usuario de Windows había elegido. Hay dos límites: depende de los permisos de sistema de archivos de ese usuario y de que el fichero de destino no exista todavía, ya que la opción --no-clobber de las versiones modernas de curl impide sobrescribir un fichero existente.
Remediación
El reporte figura como resuelto en HackerOne y tiene asignado el identificador CVE-2026-80256. Se trata de un bypass de la corrección de CVE-2025-11563: el saneamiento del nombre de fichero en get_url_filename() tiene que tratar también la barra invertida literal, no solo sus formas codificadas con porcentaje.