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
CVE-2026-29780 — Demuestra una vulnerabilidad de path traversal en un script de ejemplo oficial de eml-parser, que permite la escritura arbitraria de archivos mediante nombres de archivo adjunto manipulados, con PoC y corrección. | Kitploit
Herramientas/GitHubGitHub/redyank/cve-2026-29780
Análisis EstáticoAnálisis de VulnerabilidadesAnálisis de CódigoExplotaciónSeguridad Web
GitHubredyank/cve-2026-29780

CVE-2026-29780

Demuestra una vulnerabilidad de path traversal en un script de ejemplo oficial de eml-parser, que permite la escritura arbitraria de archivos mediante nombres de archivo adjunto manipulados, con PoC y corrección.

Ver Repositorio
1hace 4 mesesAún no revisado

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

Vulnerabilidad de Path Traversal en el Script de Ejemplo Oficial que Permite Escritura Arbitraria de Archivos

Resumen

El script de ejemplo oficial examples/recursively_extract_attachments.py contiene una vulnerabilidad de path traversal que permite la escritura arbitraria de archivos fuera del directorio de salida previsto. Los nombres de archivo adjunto extraídos de los correos analizados se utilizan directamente para construir las rutas de archivo de salida sin ninguna sanitización, lo que permite que un nombre de archivo controlado por el atacante escape del directorio de destino.

Detalles

Archivo: examples/recursively_extract_attachments.py Líneas: 61–64

root@kitploit:~
for a in m['attachment']:
    out_filepath = out_path / a['filename']  # No sanitization
    print(f'\tWriting attachment: {out_filepath}')
    with out_filepath.open('wb') as a_out:
        a_out.write(base64.b64decode(a['raw']))

El valor a['filename'] está controlado por el atacante mediante cabeceras de adjunto de correo manipuladas:

root@kitploit:~
Content-Disposition: attachment; filename="../outside/pwned.txt"

No se realiza ninguna normalización de rutas ni validación de límites antes de escribir.

PoC

  1. Crea un archivo .eml malicioso:
root@kitploit:~
Content-Disposition: attachment; filename="../outside/pwned.txt"
  1. Ejecuta el script de ejemplo:
root@kitploit:~
python recursively_extract_attachments.py -p ./emails -o ./safe
  1. Esperado: ./safe/pwned.txt
  2. Real: ./outside/pwned.txt ← escrito fuera del directorio previsto

Verificado en Kali Linux con eml-parser instalado mediante pip en un entorno virtual.

Impacto

Esta vulnerabilidad se limita únicamente al script de ejemplo y no afecta a la librería principal eml-parser. Sin embargo, dado que el script forma parte del repositorio oficial y es probable que se adapte para uso en producción, un atacante que proporcione un correo manipulado podría lograr la escritura arbitraria de archivos dentro del contexto de ejecución.

Los posibles escenarios de ataque incluyen:

  • Inyección en cron jobs: filename="../../etc/cron.d/backdoor"
  • Subida de webshells: filename="../../var/www/html/shell.php"
  • Inyección de claves SSH: filename="../../home/user/.ssh/authorized_keys"

Corrección Recomendada

root@kitploit:~
import os.path

for a in m['attachment']:
    filename = os.path.basename(a['filename'])
    out_filepath = out_path / filename

    if not out_filepath.resolve().is_relative_to(out_path.resolve()):
        print(f'[!] Skipping suspicious filename: {a["filename"]}')
        continue

    print(f'\tWriting attachment: {out_filepath}')
    with out_filepath.open('wb') as a_out:
        a_out.write(base64.b64decode(a['raw']))
Descargar herramienta