
Lab Python intentionnellement vulnérable démontrant une désérialisation YAML non sécurisée menant à l'exécution de code, avec trois niveaux de difficulté, des scripts d'exploitation, des indices et une application corrigée de comparaison.
Un laboratoire Python local, intentionnellement vulnérable, pour apprendre comment une désérialisation YAML non sécurisée peut devenir un vecteur d'exécution de code. Il comprend trois niveaux de difficulté, une application de comparaison corrigée, des scripts d'exploitation, des indices, des write-ups et un petit tableau de scores.
Sécurité : Exécutez ce projet uniquement sur une machine locale jetable ou dans un environnement virtuel isolé. N'exposez pas les applications du challenge à un réseau public.
| Variante | Objectif |
|---|
| Facile | Point de terminaison vulnérable direct et chemin d'exploitation clair |
| Moyen | Routes leurres et faux assainisseur |
| Difficile | Route cachée, charges utiles encodées et flux de flag multi-étapes |
Le projet inclut également :
yaml.safe_load()python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
pytest -q
python3 challenge_runner.py start --variant easy
Utilisez les fichiers README des variantes pour le déroulement prévu du challenge. Les applications se lient à localhost par défaut et ne nécessitent pas Docker.
Les variantes vulnérables utilisent intentionnellement un chargeur YAML capable de créer des objets Python sur une entrée contrôlée par l'attaquant :
yaml.load(data, Loader=yaml.Loader)
L'implémentation de comparaison utilise le chargeur plus sûr :
yaml.safe_load(data)
N'utilisez jamais yaml.Loader pour du YAML non fiable dans une application réelle. Ce laboratoire est destiné uniquement à la formation défensive et aux tests autorisés.
Publié sous la licence MIT.