Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
cve-2020-14343-lab — Laboratório controlado de pesquisa e reprodução de vulnerabilidades para CVE-2020-14343 em PyYAML | Kitploit
Ferramentas/GitHubGitHub/saina15/cve-2020-14343-lab
Scanners de VulnerabilidadesSegurança de ContêineresAnálise Dinâmica (Sandboxing)Análise de VulnerabilidadesExploraçãoVirtualização para SegurançaTestes de PenetraçãoPapers e PesquisaAprendizado e EducaçãoLabs e Prática
GitHub
33há 1 mêsAinda não revisado
saina15/cve-2020-14343-lab

cve-2020-14343-lab

Laboratório controlado de pesquisa e reprodução de vulnerabilidades para CVE-2020-14343 em PyYAML

Ver Repositório

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2020-14343 – Laboratório de Carregamento Inseguro de YAML no PyYAML

1. Visão Geral do Projeto

Este projeto demonstra a CVE-2020-14343 em um ambiente Docker controlado e isolado.

O laboratório contém dois ambientes:

  • Um ambiente vulnerável usando PyYAML 5.3.1
  • Um ambiente corrigido usando PyYAML 5.4 e yaml.safe_load()

O laboratório demonstra o ciclo de vida completo da vulnerabilidade:

  1. Implantar a aplicação vulnerável.
  2. Identificar a versão vulnerável do PyYAML.
  3. Reproduzir a vulnerabilidade usando um payload YAML controlado.
  4. Detectar a versão vulnerável usando um script automatizado.
  5. Atualizar para a versão corrigida.
  6. Testar o mesmo payload contra a aplicação corrigida.
  7. Verificar que o YAML malicioso é rejeitado.

O payload de reprodução usado neste laboratório é intencionalmente inofensivo e apenas imprime um marcador de teste.

2. Informações da CVE

PropriedadeDetalhes
CVECVE-2020-14343
ProdutoPyYAML
Versões afetadasVersões anteriores à 5.4
Versão corrigida5.4
Tipo de vulnerabilidadeValidação de Entrada Imprópria (CWE-20)
GravidadeCrítica
Superfície de ataqueEntrada YAML processada usando funcionalidade de carregamento vulnerável
CVSS9.3 (CVSS v4, GitHub Advisory)

Causa Raiz

A vulnerabilidade ocorre quando uma entrada YAML não confiável é processada usando funcionalidade de carregamento vulnerável do PyYAML.

Versões do PyYAML anteriores à 5.4 permitiam tags YAML especialmente construídas, incluindo tags específicas do Python, como:

!!python/object/new

para alcançar a funcionalidade de construção de objetos quando FullLoader era utilizado.

Um documento YAML malicioso pode, portanto, causar execução não intencional de código Python.

O problema estava relacionado a uma correção incompleta para uma vulnerabilidade anterior do PyYAML.

O PyYAML 5.4 corrigiu a CVE-2020-14343 movendo tags Python arbitrárias para UnsafeLoader.

Para aplicações que processam YAML não confiável, este laboratório também utiliza yaml.safe_load() como abordagem de carregamento segura.

3. Arquitetura do Laboratório

O laboratório contém dois serviços Docker isolados:

                         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

Serviços

ServiçoPorta do HostPorta do ContêinerPyYAMLFinalidade
vulnerable500050005.3.1Ambiente vulnerável
patched500150005.4Ambiente corrigido

4. Estrutura do Repositório

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

Descrição do Diretório

Arquivo/DiretórioFinalidade
vulnerable/app.pyAplicação Flask que utiliza carregamento YAML vulnerável
vulnerable/DockerfileCria a imagem Docker vulnerável
vulnerable/requirements.txtFixa o PyYAML na versão 5.3.1
patched/app.pyAplicação Flask que utiliza carregamento YAML seguro
patched/DockerfileCria a imagem Docker corrigida
patched/requirements.txtFixa o PyYAML na versão 5.4
exploit/reproduce.pyReproduz a vulnerabilidade usando um payload controlado
detection/detect.pyVerifica a versão do PyYAML dentro de um contêiner Docker
docker-compose.ymlCria e executa ambos os ambientes
screenshots/Contém as evidências capturadas durante o laboratório
blog/Contém o PDF do blog técnico de 800 a 1200 palavras

5. Pré-requisitos

O seguinte software é necessário:

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

O Docker Desktop deve estar em execução antes de iniciar o laboratório.

A aplicação vulnerável é intencionalmente exposta apenas na máquina local por meio dos mapeamentos de porta do Docker.

6. Configuração do Laboratório

Passo 1: Iniciar o Laboratório

A partir do diretório raiz do projeto, execute:

docker compose up --build -d

Passo 2: Verificar os Contêineres

Execute:

docker compose ps

Ambos os serviços devem mostrar Up.

Passo 3: Verificar a Aplicação Vulnerável

Abra:

http://127.0.0.1:5000

I don't see any content in your message to translate — the "INPUT:" section is empty. Please paste the chunk 13 text you'd like translated into Portuguese, and I'll return only the translated Markdown.

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

Passo 4: Verificar a Aplicação Corrigida

Abrir:

http://127.0.0.1:5001

I don't see any content in your message to translate — the "INPUT:" section is empty. Please paste the chunk 13 text you'd like translated into Portuguese, and I'll return only the translated Markdown.

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

7. Iniciando, Parando e Reconstruindo o Laboratório

Iniciar

docker compose up -d

Parar

docker compose down

Compilar e Iniciar

docker compose up --build -d

Verificar Serviços em Execução

docker compose ps

Visualizar Logs de Aplicações Vulneráveis

docker logs cve-vulnerable

Visualizar Logs de Aplicações com Patch

docker logs cve-patched

8. Reprodução da Vulnerabilidade

A aplicação vulnerável expõe um endpoint /parse que aceita entrada YAML.

O ambiente vulnerável utiliza:

  • PyYAML 5.3.1
  • yaml.FullLoader

O script de reprodução está localizado em:

exploit/reproduce.py

Executar o Exploit

A aplicação vulnerável está disponível em:

http://127.0.0.1:5000/parse

Executar:

python exploit/reproduce.py

O script envia um payload YAML controlado contendo uma tag YAML específica do Python.

Resultado Esperado

No ambiente vulnerável, o payload é aceito e a aplicação retorna uma resposta HTTP 200.

O marcador de teste controlado:

CVE-2020-14343-TEST

é executado dentro do contêiner da aplicação vulnerável.

A execução pode ser verificada usando:

docker logs cve-vulnerable

A saída de log esperada inclui:

CVE-2020-14343-TEST

Isso demonstra a execução de código por meio do comportamento vulnerável de carregamento de YAML.

Segurança

O payload de reprodução é intencionalmente inofensivo. Ele apenas imprime um marcador de teste e não modifica o sistema hospedeiro, acessa credenciais, acessa dados sensíveis, interage com sistemas externos ou executa ações destrutivas.

9. Detecção de Vulnerabilidade

O script de detecção está localizado em:

detection/detect.py

O script verifica a versão do PyYAML instalada dentro do contêiner Docker especificado.

A versão corrigida é:

5.4

Detectar o Ambiente Vulnerável

Execute:

python detection/detect.py cve-vulnerable

Resultado esperado:

Baixar ferramenta