Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
cve-2020-14343-lab — Laboratorio controlado de investigación y reproducción de vulnerabilidades para CVE-2020-14343 en PyYAML | Kitploit
Herramientas/GitHubGitHub/saina15/cve-2020-14343-lab
Escáneres de VulnerabilidadesSeguridad de ContenedoresAnálisis Dinámico (Sandboxing)Análisis de VulnerabilidadesExplotaciónVirtualización de SeguridadPruebas de PenetraciónPapers e InvestigaciónAprendizaje y EducaciónLabs y Práctica
33hace 1 mesAún no revisado
GitHub
saina15/cve-2020-14343-lab

cve-2020-14343-lab

Laboratorio controlado de investigación y reproducción de vulnerabilidades para CVE-2020-14343 en PyYAML

Ver Repositorio

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

CVE-2020-14343 – Laboratorio de carga insegura de YAML en PyYAML

1. Descripción general del proyecto

Este proyecto demuestra CVE-2020-14343 en un entorno Docker controlado y aislado.

El laboratorio contiene dos entornos:

  • Un entorno vulnerable que utiliza PyYAML 5.3.1
  • Un entorno parcheado que utiliza PyYAML 5.4 y yaml.safe_load()

El laboratorio demuestra el ciclo de vida completo de la vulnerabilidad:

  1. Desplegar la aplicación vulnerable.
  2. Identificar la versión vulnerable de PyYAML.
  3. Reproducir la vulnerabilidad utilizando una carga útil YAML controlada.
  4. Detectar la versión vulnerable mediante un script automatizado.
  5. Actualizar a la versión corregida.
  6. Probar la misma carga útil contra la aplicación parcheada.
  7. Verificar que el YAML malicioso es rechazado.

La carga útil de reproducción utilizada en este laboratorio es intencionadamente inofensiva y solo imprime un marcador de prueba.

2. Información del CVE

PropiedadDetalles
CVECVE-2020-14343
ProductoPyYAML
Versiones afectadasVersiones anteriores a 5.4
Versión corregida5.4
Tipo de vulnerabilidadValidación incorrecta de entrada (CWE-20)
GravedadCrítica
Superficie de ataqueEntrada YAML procesada mediante funcionalidad de carga vulnerable
CVSS9.3 (CVSS v4, GitHub Advisory)

Causa raíz

La vulnerabilidad se produce cuando una entrada YAML no confiable se procesa mediante funcionalidad de carga vulnerable de PyYAML.

Las versiones de PyYAML anteriores a 5.4 permitían etiquetas YAML especialmente diseñadas, incluidas etiquetas específicas de Python como:

!!python/object/new

para alcanzar la funcionalidad de construcción de objetos cuando se utilizaba FullLoader.

Un documento YAML malicioso puede, por lo tanto, provocar la ejecución no intencionada de código Python.

El problema estaba relacionado con una corrección incompleta de una vulnerabilidad anterior de PyYAML.

PyYAML 5.4 corrigió CVE-2020-14343 moviendo las etiquetas Python arbitrarias a UnsafeLoader.

Para las aplicaciones que procesan YAML no confiable, este laboratorio también utiliza yaml.safe_load() como enfoque de carga seguro.

3. Arquitectura del laboratorio

El laboratorio contiene dos servicios Docker aislados:

                         Host Machine
                              |
                 +------------+------------+
                 |                         |
                 v                         v
          Vulnerable App             Patched App
          localhost:5000             localhost:5001
                 |                         |
            PyYAML 5.3.1             PyYAML 5.4
            FullLoader               SafeLoader
                 |                         |
                 v                         v
          Payload executes          Payload rejected

Servicios

ServicioPuerto del hostPuerto del contenedorPyYAMLPropósito
vulnerable500050005.3.1Entorno vulnerable
patched500150005.4Entorno remediado

4. Estructura del repositorio

cve-2020-14343-lab/
├── vulnerable/
│   ├── app.py
│   ├── Dockerfile
│   └── requirements.txt
├── patched/
│   ├── app.py
│   ├── Dockerfile
│   └── requirements.txt
├── exploit/
│   └── reproduce.py
├── detection/
│   └── detect.py
├── screenshots/
│   ├── 01-docker-compose-running.png
│   ├── 02-vulnerable-detection.png
│   ├── 03-patched-detection.png
│   ├── 04a-vulnerable-request.png
│   ├── 04b-vulnerable-execution-log.png
│   └── 05-patched-exploit-blocked.png
├── blog/
│   └── CVE-2020-14343-Technical-Blog.pdf
├── docker-compose.yml
├── README.md
└── .gitignore

Descripción del directorio

Archivo/DirectorioPropósito
vulnerable/app.pyAplicación Flask que utiliza carga de YAML vulnerable
vulnerable/DockerfileConstruye la imagen Docker vulnerable
vulnerable/requirements.txtFija PyYAML en 5.3.1
patched/app.pyAplicación Flask que utiliza carga de YAML segura
patched/DockerfileConstruye la imagen Docker parcheada
patched/requirements.txtFija PyYAML en 5.4
exploit/reproduce.pyReproduce la vulnerabilidad utilizando una carga útil controlada
detection/detect.pyComprueba la versión de PyYAML dentro de un contenedor Docker
docker-compose.ymlConstruye y ejecuta ambos entornos
screenshots/Contiene las evidencias capturadas durante el laboratorio
blog/Contiene el PDF del blog técnico de 800–1200 palabras

5. Requisitos previos

Se requiere el siguiente software:

  • Docker Desktop
  • Docker Compose
  • Python 3.x
  • Git

Docker Desktop debe estar en ejecución antes de iniciar el laboratorio.

La aplicación vulnerable está expuesta intencionalmente solo en la máquina local mediante los mapeos de puertos de Docker.

6. Configuración del laboratorio

Paso 1: Iniciar el laboratorio

Desde el directorio raíz del proyecto, ejecute:

docker compose up --build -d

Paso 2: Verificar los contenedores

Ejecutar:

docker compose ps

Ambos servicios deberían mostrar Up.

Paso 3: Verificar la aplicación vulnerable

Abrir:

http://127.0.0.1:5000

I'm ready to translate chunk 13, but the actual content to translate wasn't included in your message — only the instructions and the "INPUT:" label with nothing after it.

Please paste the Markdown content for chunk 13 and I'll return the Spanish translation following all the rules you specified.

{
  "message": "CVE-2020-14343 vulnerable YAML parser"
}

Paso 4: Verificar la aplicación parcheada

Abrir:

http://127.0.0.1:5001

I'm ready to translate chunk 13, but the actual content to translate wasn't included in your message — only the instructions and the "INPUT:" label with nothing after it.

Please paste the Markdown content for chunk 13 and I'll return the Spanish translation following all the rules you specified.

{
  "message": "CVE-2020-14343 patched YAML parser"
}

7. Iniciar, detener y reconstruir el laboratorio

Iniciar

docker compose up -d

Detener

docker compose down

Compilar e iniciar

docker compose up --build -d

Comprobar servicios en ejecución

docker compose ps

Ver registros de aplicaciones vulnerables

docker logs cve-vulnerable

Ver registros de aplicaciones parcheadas

docker logs cve-patched

8. Reproducción de la vulnerabilidad

La aplicación vulnerable expone un endpoint /parse que acepta entrada YAML.

El entorno vulnerable utiliza:

  • PyYAML 5.3.1
  • yaml.FullLoader

El script de reproducción se encuentra en:

exploit/reproduce.py

Ejecutar el exploit

La aplicación vulnerable está disponible en:

http://127.0.0.1:5000/parse

Ejecutar:

python exploit/reproduce.py

El script envía una carga útil YAML controlada que contiene una etiqueta YAML específica de Python.

Resultado esperado

En el entorno vulnerable, la carga útil es aceptada y la aplicación devuelve una respuesta HTTP 200.

El marcador de prueba controlado:

CVE-2020-14343-TEST

se ejecuta dentro del contenedor de la aplicación vulnerable.

La ejecución se puede verificar usando:

docker logs cve-vulnerable

La salida esperada del registro incluye:

CVE-2020-14343-TEST

Esto demuestra la ejecución de código a través del comportamiento vulnerable de carga de YAML.

Seguridad

La carga útil de reproducción es intencionalmente inofensiva. Solo imprime un marcador de prueba y no modifica el sistema anfitrión, no accede a credenciales, no accede a datos sensibles, no interactúa con sistemas externos ni realiza acciones destructivas.

9. Detección de vulnerabilidades

El script de detección se encuentra en:

Descargar herramienta