Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
cve-2020-14343-lab — Laboratorio controllato di ricerca e riproduzione di vulnerabilità per CVE-2020-14343 in PyYAML | Kitploit
Strumenti/GitHubGitHub/saina15/cve-2020-14343-lab
Scanner di VulnerabilitàSicurezza dei ContenitoriAnalisi Dinamica (Sandboxing)Analisi delle VulnerabilitàExploitVirtualizzazione per la SicurezzaPenetration TestingPaper e RicercaApprendimento e FormazioneLab e Pratica
GitHub
331 mese faNon ancora revisionato
saina15/cve-2020-14343-lab

cve-2020-14343-lab

Laboratorio controllato di ricerca e riproduzione di vulnerabilità per CVE-2020-14343 in PyYAML

Vedi Repository

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2020-14343 – Laboratorio di caricamento YAML non sicuro in PyYAML

1. Panoramica del progetto

Questo progetto dimostra la CVE-2020-14343 in un ambiente Docker controllato e isolato.

Il laboratorio contiene due ambienti:

  • Un ambiente vulnerabile che utilizza PyYAML 5.3.1
  • Un ambiente corretto che utilizza PyYAML 5.4 e yaml.safe_load()

Il laboratorio dimostra l'intero ciclo di vita della vulnerabilità:

  1. Distribuire l'applicazione vulnerabile.
  2. Identificare la versione vulnerabile di PyYAML.
  3. Riprodurre la vulnerabilità utilizzando un payload YAML controllato.
  4. Rilevare la versione vulnerabile utilizzando uno script automatizzato.
  5. Aggiornare alla versione corretta.
  6. Testare lo stesso payload contro l'applicazione corretta.
  7. Verificare che il YAML malevolo venga rifiutato.

Il payload di riproduzione utilizzato in questo laboratorio è intenzionalmente innocuo e stampa solo un marcatore di test.

2. Informazioni sulla CVE

ProprietàDettagli
CVECVE-2020-14343
ProdottoPyYAML
Versioni interessateVersioni precedenti alla 5.4
Versione corretta5.4
Tipo di vulnerabilitàConvalida impropria dell'input (CWE-20)
GravitàCritica
Superficie di attaccoInput YAML elaborato utilizzando funzionalità di caricamento vulnerabili
CVSS9.3 (CVSS v4, GitHub Advisory)

Causa principale

La vulnerabilità si verifica quando un input YAML non attendibile viene elaborato utilizzando funzionalità di caricamento vulnerabili di PyYAML.

Le versioni di PyYAML precedenti alla 5.4 consentivano tag YAML appositamente costruiti, inclusi tag specifici di Python come:

!!python/object/new

per raggiungere la funzionalità di costruzione di oggetti quando veniva utilizzato FullLoader.

Un documento YAML malevolo può quindi causare l'esecuzione involontaria di codice Python.

Il problema era legato a una correzione incompleta per una precedente vulnerabilità di PyYAML.

PyYAML 5.4 ha corretto CVE-2020-14343 spostando i tag Python arbitrari in UnsafeLoader.

Per le applicazioni che elaborano YAML non attendibile, questo lab utilizza anche yaml.safe_load() come approccio di caricamento sicuro.

3. Architettura del Lab

Il lab contiene due servizi Docker isolati:

                         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

Servizi

ServizioPorta hostPorta containerPyYAMLScopo
vulnerable500050005.3.1Ambiente vulnerabile
patched500150005.4Ambiente correttivo

4. Struttura del repository

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

Descrizione della directory

File/DirectoryScopo
vulnerable/app.pyApplicazione Flask che utilizza il caricamento YAML vulnerabile
vulnerable/DockerfileCrea l'immagine Docker vulnerabile
vulnerable/requirements.txtFissa PyYAML alla versione 5.3.1
patched/app.pyApplicazione Flask che utilizza il caricamento YAML sicuro
patched/DockerfileCrea l'immagine Docker corretta
patched/requirements.txtFissa PyYAML alla versione 5.4
exploit/reproduce.pyRiproduce la vulnerabilità utilizzando un payload controllato
detection/detect.pyVerifica la versione di PyYAML all'interno di un container Docker
docker-compose.ymlCrea ed esegue entrambi gli ambienti
screenshots/Contiene le prove raccolte durante il laboratorio
blog/Contiene il PDF del blog tecnico di 800–1200 parole

5. Prerequisiti

È richiesto il seguente software:

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

Docker Desktop deve essere in esecuzione prima di avviare il laboratorio.

L'applicazione vulnerabile è intenzionalmente esposta solo sulla macchina locale tramite le mappature delle porte di Docker.

6. Configurazione del laboratorio

Passo 1: Avviare il laboratorio

Dalla directory principale del progetto, eseguire:

docker compose up --build -d

Passaggio 2: Verifica dei container

Esegui:

docker compose ps

Entrambi i servizi dovrebbero mostrare Up.

Passaggio 3: Verifica dell'applicazione vulnerabile

Apri:

http://127.0.0.1:5000

I cannot produce a translation because no source content was included in your message. The "INPUT:" section is empty—there is no chunk 13 text to translate.

Please paste the actual Markdown content for chunk 13, and I will return only the Italian translation, preserving all structure, code, badges, and formatting exactly as specified.

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

Passaggio 4: Verifica dell'applicazione corretta

Apri:

http://127.0.0.1:5001

I cannot produce a translation because no source content was included in your message. The "INPUT:" section is empty—there is no chunk 13 text to translate.

Please paste the actual Markdown content for chunk 13, and I will return only the Italian translation, preserving all structure, code, badges, and formatting exactly as specified.

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

7. Avvio, arresto e ricostruzione del laboratorio

Avvio

docker compose up -d

Arresta

docker compose down

Compilazione e avvio

docker compose up --build -d

Verifica dei servizi in esecuzione

docker compose ps

Visualizza i log delle applicazioni vulnerabili

docker logs cve-vulnerable

Visualizzare i log delle applicazioni con patch

docker logs cve-patched

8. Riproduzione della vulnerabilità

L'applicazione vulnerabile espone un endpoint /parse che accetta input YAML.

L'ambiente vulnerabile utilizza:

  • PyYAML 5.3.1
  • yaml.FullLoader

Lo script di riproduzione si trova in:

exploit/reproduce.py

Esegui l'Exploit

L'applicazione vulnerabile è disponibile all'indirizzo:

http://127.0.0.1:5000/parse

Esegui:

python exploit/reproduce.py

Lo script invia un payload YAML controllato contenente un tag YAML specifico per Python.

Risultato atteso

Nell'ambiente vulnerabile, il payload viene accettato e l'applicazione restituisce una risposta HTTP 200.

Il marcatore di test controllato:

CVE-2020-14343-TEST

viene eseguito all'interno del container dell'applicazione vulnerabile.

L'esecuzione può essere verificata utilizzando:

docker logs cve-vulnerable

L'output atteso del log include:

CVE-2020-14343-TEST

Questo dimostra l'esecuzione di codice tramite il comportamento vulnerabile del caricamento YAML.

Sicurezza

Il payload di riproduzione è intenzionalmente innocuo. Stampa solo un marcatore di test e non modifica il sistema host, non accede a credenziali, non accede a dati sensibili, non interagisce con sistemi esterni né esegue azioni distruttive.

Scarica lo strumento