Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en Dulwich de jelmer (CVE-2026-47712)

Gravedad CVSS v3.1:
BAJA
Tipo:
CWE-22 Limitación incorrecta de nombre de ruta a un directorio restringido (Path Traversal)
Fecha de publicación:
10/06/2026
Última modificación:
21/07/2026

Descripción

Dulwich es una implementación puramente en Python de los formatos de archivo y protocolos de Git. A partir de la versión 0.24.0 y antes de la versión 1.2.5, dulwich.porcelain.format_patch(outdir=...) deriva cada nombre de archivo de parche de la línea de asunto del commit. Antes de esta corrección, get_summary solo reemplazaba los espacios con guiones - los separadores de ruta (/, \), los componentes de directorio padre (..), y otros caracteres hostiles para nombres de archivo (p. ej. :) se conservaban textualmente y se pasaban directamente a os.path.join(outdir, f"{i:04d}-{summary}.patch"). Un asunto de commit malicioso podría, por lo tanto, dirigir el archivo de parche generado fuera del outdir solicitado. Esto se corrige en Dulwich 1.2.5. Los usuarios deberían actualizar a la versión 1.2.5 o posterior. dulwich.patch.get_summary ahora refleja el format_sanitized_subject de git: solo se mantienen '[A-Za-z0-9._]', las secuencias de otros caracteres se colapsan a un solo -, los puntos consecutivos se colapsan a un solo ., los ./- finales se eliminan, y el resultado tiene una longitud limitada. Esto hace que la cadena devuelta sea segura para incrustar como un componente de nombre de archivo, por lo que format_patch ya no puede ser dirigido fuera de outdir a través del asunto del commit. Hasta que se actualice, los llamadores que pasan commits no confiables a porcelain.format_patch pueden usar stdout=True y escribir el parche en un destino que controlen, en lugar de dejar que format_patch elija el nombre de archivo; validar la ruta elegida antes de abrir - p. ej. comparar os.path.realpath(returned_path) con os.path.realpath(outdir) y rechazar cualquier parche cuya ruta resuelta no esté dentro de outdir; y/o pre-filtrar commits y negarse a formatear cualquiera cuya primera línea del asunto contenga /, \, .., u otros caracteres que no sean seguros en el sistema de archivos de destino.