Reports
MEDIA[OTROS]#3969820

wcurl en Windows: una barra invertida literal en la URL escribe ficheros fuera del directorio elegido

get_url_filename() de wcurl neutralizaba las secuencias %2F y %5C, pero dejaba pasar la barra invertida literal. En Windows eso permitía crear un fichero fuera de la carpeta elegida por el usuario (CVE-2026-80256).

Resumen
Resumen en castellano de un reporte público, no una traducción literal. El código y los comandos se mantienen como en el original.

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.

  1. Levantar un servidor local que devuelva un contenido marcador.
  2. Desde el directorio sandbox\inside, ejecutar wcurl.bat contra una URL con la travesía escrita con barras invertidas literales:
wcurl.bat "http://127.0.0.1:PORT/sub\..\..\escaped.txt"
  1. 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.