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
practice-22-23 — Análisis de CVE-2017-9608 | Kitploit
Herramientas/GitHubGitHub/lacinquette/practice-22-23
Seguridad de ContenedoresAnálisis de VulnerabilidadesExplotaciónFuzzingAnálisis de BinariosAprendizaje y Educación
GitHublacinquette/practice-22-23

practice-22-23

Análisis de CVE-2017-9608

Ver Repositorio
hace 3 añosAú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

Proyecto

Para ejecutar: ./script.sh

Repositorio en GitHub - https://github.com/LaCinquette/practice-22-23

Desarrollo

  1. Para buscar la vulnerabilidad elegí el proyecto FFmpeg. Encontré en él un commit que cumplía los requisitos, a saber:

    • Correspondía al tipo CWE-476 - desreferencia de puntero nulo
  2. Creé un Dockerfile, en el que:

    1. Elegí como imagen base Ubuntu 22.04
    2. Configuré DEBIAN_FRONTEND=nointeractive para evitar la interacción con la línea de comandos durante la instalación de paquetes y otros comandos
    3. Instalé las dependencias necesarias indicadas en la wiki oficial
    4. Preparo el lugar de trabajo (carpeta workdir)
    5. Descargo, descomprimo y muevo el commit con la vulnerabilidad aún sin corregir al lugar de trabajo
    6. Ejecuto el build del programa con la utilidad make
    7. Creo el script copy_out.sh, que se encarga de buscar el archivo objeto necesario con el error y copiarlo al directorio workspace/out
    8. Dejo una instrucción para ejecutar el script copy_out.sh, que debe ejecutarse al iniciar el contenedor
  3. Para automatizar creo el script script.sh, que compila la imagen y ejecuta el contenedor, del cual luego toma el archivo y lo mueve al directorio actual:

    1. Elimino la carpeta actual out (si existe)
    2. Compilo la imagen con el nombre ffmpeg_image
    3. Ejecuto el contenedor basado en la imagen compilada, en el que paso los siguientes parámetros:
      • --rm para la eliminación automática del contenedor al finalizar
      • -v $PWD/out:/workspace/out para montar el directorio temporal, a través del cual el archivo objeto se transfiere al host
    4. Copio el archivo necesario de la carpeta out
    5. Elimino la carpeta out

Análisis de la vulnerabilidad

Fuentes:

  • Commit con el error corregido
  • Página en GitHub sobre la vulnerabilidad
  • Correo del investigador de seguridad sobre la vulnerabilidad

Análisis:

Problema:

  1. Con el comando ffmpeg -c:v dnxhd -i poc.mov -y output.ts se envía a la entrada del programa un archivo .mov creado especialmente
  2. Para el parseo del formato DNxHD se llama a la función dnxhd_parse en el archivo dnxhd_parser
  3. Esta a su vez llama a la función dnxhd_find_frame_end (en el mismo archivo), que bajo ciertas condiciones no encuentra el final y devuelve un número negativo, que no es un código de error
  4. Este número, junto con otros parámetros, se pasa a la función ff_combine_frame (ubicada en el archivo parser) para la unión de los frames
  5. Como este número no es un código de error, ff_combine_frame lo interpreta como un desplazamiento e intenta volver a leer esos bytes del buffer, y como el buffer en ese momento está vacío, se produce la desreferencia de un puntero nulo, lo que provoca un Segmentation fault

En ensamblador:

0x08000d4e - inicio de la sección

  1. movsxd rcx, dword [rbx + 0xc]

    En el registro rcx obtenemos la referencia a pc->buffer

  2. add rcx, rdi

    Añadimos next a pc->buffer

  3. add rcx, qword [rbx]

    Añadimos pc->last_index a next y a pc->buffer

  4. movzx edi, byte [rcx]

    Obtenemos el byte en la dirección rcx, pero como pc->buffer es inicialmente null - obtenemos un Segmentation fault

Solución:

Evitar el acceso a una región de memoria no asignada, mediante el manejo correcto del caso excepcional. Al detectar un número negativo de bytes restantes, continuar el procesamiento del archivo omitiendo el bucle.

Descargar herramienta