Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
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
GitHubsaina15/cve-2020-14343-lab
há 1 diaAinda não revisado

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)
SeveridadeCrítica
Superfície de ataqueEntrada YAML processada usando funcionalidade de carregamento vulnerável

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:

root@kitploit:~
!!python/object/new

alcançarem a funcionalidade de construção de objetos quando FullLoader era usado.

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 de 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 usa yaml.safe_load() como abordagem de carregamento segura.

3. Arquitetura do Laboratório

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

root@kitploit:~
                         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 no HostPorta no ContêinerPyYAMLPropósito
vulnerable500050005.3.1Ambiente vulnerável
patched500150005.4Ambiente corrigido

4. Estrutura do Repositório

root@kitploit:~
cve-2020-14343-lab/
│
├── vulnerable/
│   ├── app.py
│   ├── Dockerfile
│   └── requirements.txt
│
├── patched/
│   ├── app.py
│   ├── Dockerfile
│   └── requirements.txt
│
├── exploit/
│   └── reproduce.py
│
├── detection/
│   └── detect.py
│
├── docker-compose.yml
└── README.md

Descrição dos Diretórios

Arquivo/DiretórioPropósito
vulnerable/app.pyAplicação Flask usando carregamento YAML vulnerável
vulnerable/DockerfileConstrói a imagem Docker vulnerável
vulnerable/requirements.txtFixa o PyYAML na versão 5.3.1
patched/app.pyAplicação Flask usando carregamento YAML seguro
patched/DockerfileConstrói 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.ymlConstrói e executa ambos os ambientes

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 através 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:

root@kitploit:~
docker compose up --build -d

Passo 2: Verificar os Contêineres

Execute:

root@kitploit:~
docker compose ps

Ambos os serviços devem mostrar Up.

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

Abra:

root@kitploit:~
http://127.0.0.1:5000

Resposta esperada:

root@kitploit:~
{
  "message": "CVE-2020-14343 vulnerable YAML parser"
}

Passo 4: Verificar a Aplicação Corrigida

Abra:

root@kitploit:~
http://127.0.0.1:5001

Resposta esperada:

root@kitploit:~
{
  "message": "CVE-2020-14343 patched YAML parser"
}

7. Iniciar, Parar e Reconstruir o Laboratório

Iniciar

root@kitploit:~
docker compose up -d

Parar

root@kitploit:~
docker compose down

Construir e Iniciar

root@kitploit:~
docker compose up --build -d

Verificar Serviços em Execução

root@kitploit:~
docker compose ps

Ver Logs da Aplicação Vulnerável

root@kitploit:~
docker logs cve-vulnerable

Ver Logs da Aplicação Corrigida

root@kitploit:~
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 usa:

  • PyYAML 5.3.1
  • yaml.FullLoader

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

root@kitploit:~
exploit/reproduce.py

Executar o Exploit

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

root@kitploit:~
http://127.0.0.1:5000/parse

Execute:

root@kitploit:~
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:

root@kitploit:~
CVE-2020-14343-TEST

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

A execução pode ser verificada usando:

root@kitploit:~
docker logs cve-vulnerable

A saída esperada do log inclui:

root@kitploit:~
CVE-2020-14343-TEST

Isso demonstra a execução de código através do comportamento vulnerável de carregamento YAML.

Segurança

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

9. Detecção da Vulnerabilidade

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

root@kitploit:~
detection/detect.py

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

A versão corrigida é:

root@kitploit:~
5.4

Detectar o Ambiente Vulnerável

Execute:

root@kitploit:~
python detection/detect.py cve-vulnerable

Resultado esperado:

root@kitploit:~
PyYAML installed version: 5.3.1
Fixed version: 5.4
STATUS: VULNERABLE
Reason: PyYAML version is older than 5.4.

Detectar o Ambiente Corrigido

Execute:

root@kitploit:~
python detection/detect.py cve-patched

Resultado esperado:

root@kitploit:~
PyYAML installed version: 5.4
Fixed version: 5.4
STATUS: PATCHED
Reason: PyYAML version is 5.4 or newer.

Lógica de Detecção

root@kitploit:~
Docker Container
       |
       v
   docker exec
       |
       v
  Import PyYAML
       |
       v
Read yaml.__version__
       |
       v
 Compare with 5.4
       |
       +----------------------+
       |                      |
     < 5.4                  >= 5.4
       |                      |
       v                      v
  VULNERABLE                PATCHED

O script consulta a versão instalada do PyYAML a partir do contêiner alvo.

10. Correção

O ambiente vulnerável usa:

root@kitploit:~
PyYAML==5.3.1

O ambiente corrigido usa:

root@kitploit:~
PyYAML==5.4

A aplicação corrigida também usa:

root@kitploit:~
yaml.safe_load(yaml_input)

em vez de:

root@kitploit:~
yaml.load(yaml_input, Loader=yaml.FullLoader)

Passos de Correção

  1. Atualizar o PyYAML para a versão 5.4 ou posterior.
  2. Evitar comportamento inseguro de carregamento YAML ao processar entrada não confiável.
  3. Usar yaml.safe_load() quando a aplicação requer apenas tipos de dados YAML padrão.
  4. Reconstruir a imagem Docker.
  5. Reiniciar a aplicação corrigida.
  6. Executar o script de detecção novamente.
  7. Executar novamente o payload de reprodução contra a aplicação corrigida.

11. Verificação Pós-Correção

O mesmo payload de exploit é testado contra a aplicação corrigida.

A aplicação corrigida é executada em:

root@kitploit:~
http://127.0.0.1:5001/parse

Execute:

root@kitploit:~
python exploit/reproduce.py http://127.0.0.1:5001/parse

Resultado observado neste laboratório:

root@kitploit:~
HTTP Status: 400
Server Response:
{"message":"could not determine a constructor for the tag 'tag:yaml.org,2002:python/object/new:tuple' ...","status":"error"}

A tag YAML específica do Python é rejeitada pela aplicação corrigida.

O marcador de teste controlado não é executado na aplicação corrigida.

Antes vs Depois

TesteAmbiente VulnerávelAmbiente Corrigido
Versão do PyYAML5.3.15.4
DetecçãoVULNERABLEPATCHED
Requisição de exploitHTTP 200HTTP 400
Tag YAML específica do PythonAceitaRejeitada
Execução do marcador de testeObservada nos logs do contêinerNão executada

12. Solução de Problemas

O Daemon do Docker Não Está em Execução

Certifique-se de que o Docker Desktop está em execução e verifique:

root@kitploit:~
docker version

Conflito de Nome de Contêiner

Verifique:

root@kitploit:~
docker ps -a

Remova contêineres antigos, se necessário:

root@kitploit:~
docker rm cve-vulnerable cve-patched

Em seguida:

root@kitploit:~
docker compose up --build -d

Verificar o Status do Contêiner

root@kitploit:~
docker compose ps

Verificar os Logs da Aplicação

root@kitploit:~
docker logs cve-vulnerable
docker logs cve-patched

Reconstruir Após Alterar Dependências

root@kitploit:~
docker compose up --build -d

Para uma reconstrução limpa:

root@kitploit:~
docker compose build --no-cache
docker compose up -d

13. Limitações

Este projeto é um laboratório de prova de conceito controlado e não representa uma implantação em produção.

As limitações incluem:

  • A aplicação vulnerável é intencionalmente simplificada.
  • O laboratório usa um payload de prova de conceito inofensivo.
  • Nenhuma credencial real ou dado sensível é usado.
  • A aplicação é projetada para testes locais.
  • O mecanismo de detecção foca na versão instalada do PyYAML.
  • A detecção baseada apenas em versão não prova se uma aplicação real é explorável; o comportamento da aplicação e a configuração de carregamento YAML também devem ser considerados.
  • O laboratório não tenta exploração contra sistemas externos ou não autorizados.

14. Evidências

As seguintes evidências devem ser capturadas para a submissão do projeto:

  1. Docker Compose mostrando ambos os contêineres em execução.
  2. Aplicação vulnerável respondendo na porta 5000.
  3. Aplicação corrigida respondendo na porta 5001.
  4. Detecção da versão vulnerável mostrando PyYAML 5.3.1 e STATUS: VULNERABLE.
  5. Execução do exploit vulnerável e o marcador CVE-2020-14343-TEST nos logs do Docker.
  6. Detecção da versão corrigida mostrando PyYAML 5.4 e STATUS: PATCHED.
  7. O mesmo exploit contra a aplicação corrigida retornando HTTP 400.
  8. Erro da aplicação corrigida mostrando a rejeição da tag YAML específica do Python.

Capturas de tela podem ser armazenadas em:

root@kitploit:~
screenshots/

15. Referências

  • GitHub Advisory Database – CVE-2020-14343 / GHSA-8q59-q68h-6hv4
  • PyYAML CHANGES – Notas de versão do PyYAML 5.4
  • PyYAML Wiki – Orientação sobre carregamento YAML e SafeLoader
  • PyYAML Issue #420 – Discussão sobre FullLoader e execução de código
  • National Vulnerability Database – Registros de CVE relacionados ao PyYAML

Todo o código de reprodução e documentação neste repositório foram desenvolvidos especificamente para este laboratório.

16. Conclusão

Este laboratório demonstra a CVE-2020-14343 desde a identificação até a correção.

O ambiente vulnerável usa PyYAML 5.3.1 e demonstra execução de código controlada através de um payload YAML construído.

O script de detecção identifica a versão vulnerável da dependência.

O ambiente corrigido atualiza o PyYAML para 5.4 e usa yaml.safe_load() para processar YAML não confiável.

O mesmo payload de reprodução é então rejeitado pela aplicação corrigida, fornecendo evidências de antes e depois da correção.

Todo o ambiente pode ser reproduzido usando Docker Compose.

Baixar ferramenta