Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/saina15/cve-2020-14343-lab
SchwachstellenscannerContainer-SicherheitDynamische Analyse (Sandboxing)SchwachstellenanalyseExploitationSicherheitsvirtualisierungPenetrationstestsPapers & ForschungLernen & BildungLabs & Praxis
GitHubsaina15/cve-2020-14343-lab
1vor 1 TagNoch nicht geprüft

cve-2020-14343-lab

Kontrolliertes Labor für Schwachstellenforschung und -reproduktion für CVE-2020-14343 in PyYAML

Repository anzeigen

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2020-14343 – PyYAML Unsafe YAML Loading Lab

1. Projektübersicht

Dieses Projekt demonstriert CVE-2020-14343 in einer kontrollierten und isolierten Docker-Umgebung.

Das Lab enthält zwei Umgebungen:

  • Eine verwundbare Umgebung mit PyYAML 5.3.1
  • Eine gepatchte Umgebung mit PyYAML 5.4 und yaml.safe_load()

Das Lab demonstriert den vollständigen Lebenszyklus der Schwachstelle:

  1. Bereitstellen der verwundbaren Anwendung.
  2. Identifizieren der verwundbaren PyYAML-Version.
  3. Reproduzieren der Schwachstelle mit einer kontrollierten YAML-Nutzlast.
  4. Erkennen der verwundbaren Version mit einem automatisierten Skript.
  5. Aktualisieren auf die korrigierte Version.
  6. Testen derselben Nutzlast gegen die gepatchte Anwendung.
  7. Überprüfen, dass das bösartige YAML abgelehnt wird.

Die in diesem Lab verwendete Reproduktionsnutzlast ist absichtlich harmlos und gibt lediglich einen Testmarker aus.

2. CVE-Informationen

EigenschaftDetails
CVECVE-2020-14343
ProduktPyYAML
Betroffene VersionenVersionen vor 5.4
Korrigierte Version5.4
SchwachstellentypUnzureichende Eingabevalidierung (CWE-20)
SchweregradKritisch
AngriffsflächeYAML-Eingabe, die mit verwundbarer Ladefunktionalität verarbeitet wird

Ursache

Die Schwachstelle tritt auf, wenn nicht vertrauenswürdige YAML-Eingabe mit verwundbarer PyYAML-Ladefunktionalität verarbeitet wird.

PyYAML-Versionen vor 5.4 erlaubten speziell präparierte YAML-Tags, einschließlich Python-spezifischer Tags wie:

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

um Objektkonstruktionsfunktionalität zu erreichen, wenn FullLoader verwendet wurde.

Ein bösartiges YAML-Dokument kann daher eine unbeabsichtigte Ausführung von Python-Code verursachen.

Das Problem stand im Zusammenhang mit einer unvollständigen Korrektur einer früheren PyYAML-Schwachstelle.

PyYAML 5.4 behob CVE-2020-14343, indem beliebige Python-Tags zu UnsafeLoader verschoben wurden.

Für Anwendungen, die nicht vertrauenswürdiges YAML verarbeiten, verwendet dieses Lab außerdem yaml.safe_load() als sicheren Ladeansatz.

3. Lab-Architektur

Das Lab enthält zwei isolierte Docker-Dienste:

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

Dienste

DienstHost-PortContainer-PortPyYAMLZweck
vulnerable500050005.3.1Verwundbare Umgebung
patched500150005.4Behobene Umgebung

4. Repository-Struktur

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

Verzeichnisbeschreibung

Datei/VerzeichnisZweck
vulnerable/app.pyFlask-Anwendung mit verwundbarem YAML-Laden
vulnerable/DockerfileErstellt das verwundbare Docker-Image
vulnerable/requirements.txtLegt PyYAML auf 5.3.1 fest
patched/app.pyFlask-Anwendung mit sicherem YAML-Laden
patched/DockerfileErstellt das gepatchte Docker-Image
patched/requirements.txtLegt PyYAML auf 5.4 fest
exploit/reproduce.pyReproduziert die Schwachstelle mit einer kontrollierten Nutzlast
detection/detect.pyÜberprüft die PyYAML-Version innerhalb eines Docker-Containers
docker-compose.ymlErstellt und startet beide Umgebungen

5. Voraussetzungen

Die folgende Software ist erforderlich:

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

Docker Desktop muss laufen, bevor das Lab gestartet wird.

Die verwundbare Anwendung wird absichtlich nur auf dem lokalen Rechner über Docker-Portzuordnungen bereitgestellt.

6. Lab-Einrichtung

Schritt 1: Lab starten

Führen Sie aus dem Projektstammverzeichnis aus:

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

Schritt 2: Container überprüfen

Führen Sie aus:

root@kitploit:~
docker compose ps

Beide Dienste sollten Up anzeigen.

Schritt 3: Verwundbare Anwendung überprüfen

Öffnen Sie:

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

Erwartete Antwort:

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

Schritt 4: Gepatchte Anwendung überprüfen

Öffnen Sie:

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

Erwartete Antwort:

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

7. Starten, Stoppen und Neuerstellen des Labs

Starten

root@kitploit:~
docker compose up -d

Stoppen

root@kitploit:~
docker compose down

Erstellen und Starten

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

Laufende Dienste überprüfen

root@kitploit:~
docker compose ps

Logs der verwundbaren Anwendung anzeigen

root@kitploit:~
docker logs cve-vulnerable

Logs der gepatchten Anwendung anzeigen

root@kitploit:~
docker logs cve-patched

8. Reproduktion der Schwachstelle

Die verwundbare Anwendung stellt einen /parse-Endpunkt bereit, der YAML-Eingabe akzeptiert.

Die verwundbare Umgebung verwendet:

  • PyYAML 5.3.1
  • yaml.FullLoader

Das Reproduktionsskript befindet sich unter:

root@kitploit:~
exploit/reproduce.py

Exploit ausführen

Die verwundbare Anwendung ist verfügbar unter:

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

Führen Sie aus:

root@kitploit:~
python exploit/reproduce.py

Das Skript sendet eine kontrollierte YAML-Nutzlast, die ein Python-spezifisches YAML-Tag enthält.

Erwartetes Ergebnis

In der verwundbaren Umgebung wird die Nutzlast akzeptiert und die Anwendung gibt eine HTTP-200-Antwort zurück.

Der kontrollierte Testmarker:

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

wird innerhalb des Containers der verwundbaren Anwendung ausgeführt.

Die Ausführung kann überprüft werden mit:

root@kitploit:~
docker logs cve-vulnerable

Die erwartete Log-Ausgabe enthält:

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

Dies demonstriert Codeausführung durch das verwundbare YAML-Ladeverhalten.

Sicherheit

Die Reproduktionsnutzlast ist absichtlich harmlos. Sie gibt lediglich einen Testmarker aus und verändert nicht das Hostsystem, greift nicht auf Anmeldedaten zu, greift nicht auf sensible Daten zu, interagiert nicht mit externen Systemen und führt keine destruktiven Aktionen aus.

9. Erkennung der Schwachstelle

Das Erkennungsskript befindet sich unter:

root@kitploit:~
detection/detect.py

Das Skript überprüft die im angegebenen Docker-Container installierte PyYAML-Version.

Die korrigierte Version ist:

root@kitploit:~
5.4

Verwundbare Umgebung erkennen

Führen Sie aus:

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

Erwartetes Ergebnis:

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

Gepatchte Umgebung erkennen

Führen Sie aus:

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

Erwartetes Ergebnis:

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

Erkennungslogik

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

Das Skript fragt die installierte PyYAML-Version vom Zielcontainer ab.

10. Behebung

Die verwundbare Umgebung verwendet:

root@kitploit:~
PyYAML==5.3.1

Die gepatchte Umgebung verwendet:

root@kitploit:~
PyYAML==5.4

Die gepatchte Anwendung verwendet außerdem:

root@kitploit:~
yaml.safe_load(yaml_input)

anstelle von:

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

Behebungsschritte

  1. Aktualisieren Sie PyYAML auf Version 5.4 oder höher.
  2. Vermeiden Sie unsicheres YAML-Ladeverhalten bei der Verarbeitung nicht vertrauenswürdiger Eingaben.
  3. Verwenden Sie yaml.safe_load(), wenn die Anwendung nur standardmäßige YAML-Datentypen benötigt.
  4. Erstellen Sie das Docker-Image neu.
  5. Starten Sie die gepatchte Anwendung neu.
  6. Führen Sie das Erkennungsskript erneut aus.
  7. Führen Sie die Reproduktionsnutzlast erneut gegen die gepatchte Anwendung aus.

11. Überprüfung nach der Behebung

Dieselbe Exploit-Nutzlast wird gegen die gepatchte Anwendung getestet.

Die gepatchte Anwendung läuft auf:

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

Führen Sie aus:

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

Beobachtetes Ergebnis in diesem Lab:

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"}

Das Python-spezifische YAML-Tag wird von der gepatchten Anwendung abgelehnt.

Der kontrollierte Testmarker wird in der gepatchten Anwendung nicht ausgeführt.

Vorher vs. Nachher

TestVerwundbare UmgebungGepatchte Umgebung
PyYAML-Version5.3.15.4
ErkennungVULNERABLEPATCHED
Exploit-AnfrageHTTP 200HTTP 400
Python-spezifisches YAML-TagAkzeptiertAbgelehnt
Ausführung des TestmarkersIn Container-Logs beobachtetNicht ausgeführt

12. Fehlerbehebung

Docker-Daemon läuft nicht

Stellen Sie sicher, dass Docker Desktop läuft, und überprüfen Sie:

root@kitploit:~
docker version

Container-Namenskonflikt

Überprüfen Sie:

root@kitploit:~
docker ps -a

Entfernen Sie alte Container, falls erforderlich:

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

Dann:

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

Container-Status überprüfen

root@kitploit:~
docker compose ps

Anwendungs-Logs überprüfen

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

Nach Änderung von Abhängigkeiten neu erstellen

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

Für einen sauberen Neubau:

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

13. Einschränkungen

Dieses Projekt ist ein kontrolliertes Proof-of-Concept-Lab und stellt keine Produktionsbereitstellung dar.

Zu den Einschränkungen gehören:

  • Die verwundbare Anwendung ist absichtlich vereinfacht.
  • Das Lab verwendet eine harmlose Proof-of-Concept-Nutzlast.
  • Es werden keine echten Anmeldedaten oder sensiblen Daten verwendet.
  • Die Anwendung ist für lokale Tests konzipiert.
  • Der Erkennungsmechanismus konzentriert sich auf die installierte PyYAML-Version.
  • Eine rein versionsbasierte Erkennung beweist nicht, ob eine echte Anwendung ausnutzbar ist; das Anwendungsverhalten und die YAML-Ladekonfiguration müssen ebenfalls berücksichtigt werden.
  • Das Lab versucht keine Ausnutzung gegen externe oder nicht autorisierte Systeme.

14. Nachweise

Die folgenden Nachweise sollten für die Projekteinreichung erfasst werden:

  1. Docker Compose, das beide laufenden Container zeigt.
  2. Verwundbare Anwendung, die auf Port 5000 antwortet.
  3. Gepatchte Anwendung, die auf Port 5001 antwortet.
  4. Erkennung der verwundbaren Version mit PyYAML 5.3.1 und STATUS: VULNERABLE.
  5. Ausführung des Exploits in der verwundbaren Umgebung und der Marker CVE-2020-14343-TEST in den Docker-Logs.
  6. Erkennung der gepatchten Version mit PyYAML 5.4 und STATUS: PATCHED.
  7. Derselbe Exploit gegen die gepatchte Anwendung, der HTTP 400 zurückgibt.
  8. Fehler der gepatchten Anwendung, der die Ablehnung des Python-spezifischen YAML-Tags zeigt.

Screenshots können gespeichert werden in:

root@kitploit:~
screenshots/

15. Referenzen

  • GitHub Advisory Database – CVE-2020-14343 / GHSA-8q59-q68h-6hv4
  • PyYAML CHANGES – Versionshinweise zu PyYAML 5.4
  • PyYAML Wiki – Anleitung zu YAML-Laden und SafeLoader
  • PyYAML Issue #420 – Diskussion zu FullLoader und Codeausführung
  • National Vulnerability Database – CVE-Einträge zu PyYAML

Der gesamte Reproduktionscode und die Dokumentation in diesem Repository wurden speziell für dieses Lab entwickelt.

16. Fazit

Dieses Lab demonstriert CVE-2020-14343 von der Identifizierung bis zur Behebung.

Die verwundbare Umgebung verwendet PyYAML 5.3.1 und demonstriert kontrollierte Codeausführung durch eine präparierte YAML-Nutzlast.

Das Erkennungsskript identifiziert die verwundbare Abhängigkeitsversion.

Die behobene Umgebung aktualisiert PyYAML auf 5.4 und verwendet yaml.safe_load() zur Verarbeitung nicht vertrauenswürdigen YAMLs.

Dieselbe Reproduktionsnutzlast wird dann von der gepatchten Anwendung abgelehnt, was Vorher-Nachher-Nachweise für die Behebung liefert.

Die gesamte Umgebung kann mit Docker Compose reproduziert werden.

Tool herunterladen