Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
cve-2020-14343-lab — Labo de recherche et de reproduction contrôlées de vulnérabilités pour CVE-2020-14343 dans PyYAML | Kitploit
Outils/GitHubGitHub/saina15/cve-2020-14343-lab
Scanners de VulnérabilitésSécurité des ConteneursAnalyse Dynamique (Sandboxing)Analyse des VulnérabilitésExploitationVirtualisation de SécuritéTests d'IntrusionArticles et RechercheApprentissage et ÉducationLabs et Pratique
GitHub
33il y a 1 moisPas encore vérifié
saina15/cve-2020-14343-lab

cve-2020-14343-lab

Labo de recherche et de reproduction contrôlées de vulnérabilités pour CVE-2020-14343 dans PyYAML

Voir le dépôt

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2020-14343 – Laboratoire de chargement YAML non sécurisé de PyYAML

1. Présentation du projet

Ce projet illustre la CVE-2020-14343 dans un environnement Docker contrôlé et isolé.

Le laboratoire contient deux environnements :

  • Un environnement vulnérable utilisant PyYAML 5.3.1
  • Un environnement corrigé utilisant PyYAML 5.4 et yaml.safe_load()

Le laboratoire illustre le cycle de vie complet de la vulnérabilité :

  1. Déployer l'application vulnérable.
  2. Identifier la version vulnérable de PyYAML.
  3. Reproduire la vulnérabilité à l'aide d'une charge utile YAML contrôlée.
  4. Détecter la version vulnérable à l'aide d'un script automatisé.
  5. Mettre à niveau vers la version corrigée.
  6. Tester la même charge utile contre l'application corrigée.
  7. Vérifier que le YAML malveillant est rejeté.

La charge utile de reproduction utilisée dans ce laboratoire est volontairement inoffensive et se contente d'afficher un marqueur de test.

2. Informations sur la CVE

PropriétéDétails
CVECVE-2020-14343
ProduitPyYAML
Versions affectéesVersions antérieures à 5.4
Version corrigée5.4
Type de vulnérabilitéValidation d'entrée incorrecte (CWE-20)
GravitéCritique
Surface d'attaqueEntrée YAML traitée à l'aide d'une fonctionnalité de chargement vulnérable
CVSS9.3 (CVSS v4, GitHub Advisory)

Cause racine

La vulnérabilité se produit lorsqu'une entrée YAML non fiable est traitée à l'aide d'une fonctionnalité de chargement vulnérable de PyYAML.

Les versions de PyYAML antérieures à 5.4 autorisaient des balises YAML spécialement conçues, notamment des balises spécifiques à Python telles que :

!!python/object/new

pour atteindre les fonctionnalités de construction d'objets lorsque FullLoader était utilisé.

Un document YAML malveillant peut donc provoquer une exécution involontaire de code Python.

Le problème était lié à un correctif incomplet pour une vulnérabilité PyYAML antérieure.

PyYAML 5.4 a corrigé CVE-2020-14343 en déplaçant les balises Python arbitraires vers UnsafeLoader.

Pour les applications traitant du YAML non fiable, ce lab utilise également yaml.safe_load() comme approche de chargement sécurisée.

3. Architecture du lab

Le lab contient deux services Docker isolés :

                         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

Services

ServicePort hôtePort conteneurPyYAMLObjectif
vulnerable500050005.3.1Environnement vulnérable
patched500150005.4Environnement corrigé

4. Structure du dépôt

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

Description du répertoire

Fichier/RépertoireObjectif
vulnerable/app.pyApplication Flask utilisant un chargement YAML vulnérable
vulnerable/DockerfileConstruit l'image Docker vulnérable
vulnerable/requirements.txtFixe PyYAML à la version 5.3.1
patched/app.pyApplication Flask utilisant un chargement YAML sécurisé
patched/DockerfileConstruit l'image Docker corrigée
patched/requirements.txtFixe PyYAML à la version 5.4
exploit/reproduce.pyReproduit la vulnérabilité à l'aide d'une charge utile contrôlée
detection/detect.pyVérifie la version de PyYAML à l'intérieur d'un conteneur Docker
docker-compose.ymlConstruit et exécute les deux environnements
screenshots/Contient les preuves capturées pendant le lab
blog/Contient le PDF du blog technique de 800 à 1200 mots

5. Prérequis

Les logiciels suivants sont requis :

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

Docker Desktop doit être en cours d'exécution avant de démarrer le lab.

L'application vulnérable est intentionnellement exposée uniquement sur la machine locale via les mappages de ports Docker.

6. Configuration du lab

Étape 1 : Démarrer le lab

Depuis le répertoire racine du projet, exécutez :

docker compose up --build -d

Étape 2 : Vérifier les conteneurs

Exécutez :

docker compose ps

Les deux services doivent afficher Up.

Étape 3 : Vérifier l'application vulnérable

Ouvrez :

http://127.0.0.1:5000

I'm ready to translate chunk 13, but the INPUT section appears to be empty — no source text was included after "INPUT:".

Please provide the Markdown content for chunk 13, and I'll return the French translation following all the rules you specified.

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

Étape 4 : Vérifier l'application corrigée

Ouvrir :

http://127.0.0.1:5001

I'm ready to translate chunk 13, but the INPUT section appears to be empty — no source text was included after "INPUT:".

Please provide the Markdown content for chunk 13, and I'll return the French translation following all the rules you specified.

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

7. Démarrer, arrêter et reconstruire le lab

Démarrer

docker compose up -d

Arrêt

docker compose down

Compiler et démarrer

docker compose up --build -d

Vérifier les services en cours d'exécution

docker compose ps

Afficher les journaux des applications vulnérables

docker logs cve-vulnerable

Afficher les journaux de l'application corrigée

docker logs cve-patched

8. Reproduction de la vulnérabilité

L'application vulnérable expose un point de terminaison /parse qui accepte une entrée YAML.

L'environnement vulnérable utilise :

  • PyYAML 5.3.1
  • yaml.FullLoader

Le script de reproduction se trouve à l'emplacement suivant :

exploit/reproduce.py

Exécuter l'exploit

L'application vulnérable est disponible à l'adresse :

http://127.0.0.1:5000/parse

Exécuter :

python exploit/reproduce.py

Le script envoie une charge utile YAML contrôlée contenant une balise YAML spécifique à Python.

Résultat attendu

Dans l'environnement vulnérable, la charge utile est acceptée et l'application renvoie une réponse HTTP 200.

Le marqueur de test contrôlé :

CVE-2020-14343-TEST

est exécuté à l'intérieur du conteneur de l'application vulnérable.

L'exécution peut être vérifiée à l'aide de :

docker logs cve-vulnerable

La sortie de journal attendue comprend :

CVE-2020-14343-TEST

Cela démontre l'exécution de code via le comportement de chargement YAML vulnérable.

Sécurité

La charge utile de reproduction est intentionnellement inoffensive. Elle se contente d'afficher un marqueur de test et ne modifie pas le système hôte, n'accède pas aux identifiants, n'accède pas aux données sensibles, n'interagit pas avec des systèmes externes et n'effectue aucune action destructive.

9. Détection de vulnérabilité

Télécharger l’outil