¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!
NotCVE-2026-0014 — Prueba de concepto y aviso para un path traversal CWE-22 en el gestor de arrastrar y soltar de InputLeap, con pasos de reproducción, script de explotación y guía de remediación. | Kitploit
Prueba de concepto y aviso para un path traversal CWE-22 en el gestor de arrastrar y soltar de InputLeap, con pasos de reproducción, script de explotación y guía de remediación.
Producto: InputLeap v3.0.3 Proveedor: input-leap Vulnerabilidad: Path Traversal CWE: CWE-22 Limitación Inadecuada de un Nombre de Ruta a un Directorio Restringido ('Path Traversal')
Descripción
El gestor de arrastrar y soltar de InputLeap intenta sanear los nombres de archivo encontrando el último separador de ruta y conservando solo la parte posterior a este. Cuando no se encuentra ningún separador, la búsqueda de cadenas en C++ devuelve un valor centinela especial llamado npos para indicar un fallo. Sin embargo, el código nunca verifica este centinela antes de usar el resultado en cálculos aritméticos. Dado que npos se define como el mayor entero sin signo posible, restarlo provoca un desbordamiento silencioso y produce una respuesta aparentemente válida que es completamente errónea: en lugar de devolver solo el nombre del archivo, devuelve la cadena original completa sin sanear. Un atacante puede explotar esto creando un mensaje donde una entrada carece de separador mientras que otra contiene uno que no coincide — la heurística global de detección de separadores del código se invierte, la búsqueda falla silenciosamente y ....\AppData...\Startup\evil.exe pasa sin ser tocado. Esa cadena luego se concatena al directorio de destino y se entrega al sistema operativo, que interpreta las secuencias .. y escribe el archivo fuera de la carpeta prevista. La vulnerabilidad existe porque falta una comprobación defensiva para el caso de "no encontrado".
Pasos para Reproducir
Habilitar --enable-drag-drop en el objetivo (opcional, por defecto DESACTIVADO).
Como par conectado, iniciar un mensaje de transferencia de archivos por arrastrar y soltar cuyo dato de nombre de archivo incrustado contenga un carácter "/" en algún lugar del búfer (para forzar slash="/") mientras que el segmento de nombre de archivo real usa separadores "\", por ejemplo incrustando un "/" suelto antes en el blob de datos y un nombre de archivo de "..\..\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\evil.exe".
El find_last_of(slash, ...) de DragInformation::parseDragInfo devuelve npos para la porción del nombre de archivo separada por "\", causando un desbordamiento aritmético sin signo y devolviendo la ruta completa sin truncar.
DropHelper::writeToDir concatena esta ruta al directorio de destino de soltado del usuario (por defecto el Escritorio) y escribe el archivo sin canonicalización, depositándolo en la carpeta Startup.
En el siguiente inicio de sesión, evil.exe se ejecuta como el usuario víctima.
Un atacante puede explotar esta vulnerabilidad para subir un archivo a una ruta arbitraria fuera de la carpeta predeterminada o asignada. Esto podría llevar a la ejecución de código
Remediación Sugerida
En DragInformation::parseDragInfo, reemplazar la heurística de detección de barras por std::filesystem::path(filename).filename() para garantizar que solo se extraiga el nombre base.
En DropHelper::writeToDir, canonicalizar la ruta final con std::filesystem::canonical y rechazar si no comienza con destination.
Rechazar nombres de archivo que contengan "..", bytes NUL, letras de unidad (X:), o separadores iniciales.
Cronología de Divulgación
27 de julio de 2026 -- Se intentó reportar al proyecto InputLeap, pero el día antes de contactar archivaron el proyecto. Se reportó a NotCVE.
24 de septiembre de 2026 -- NotCVE-2026-0014 Publicado.