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

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

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
seal-security-nuget-demo-net7 — .NET 7 fork de seal-security-nuget-demo : même scénario d'exploitation de la CVE-2024-21907, réorienté pour les clients verrouillés sur le SDK .NET 7. | Kitploit
Outils/GitHubGitHub/isecuritytw/seal-security-nuget-demo-net7
Analyse des VulnérabilitésDevSecOpsSécurité de la Chaîne LogistiqueApprentissage et ÉducationRessources Organisées
GitHubisecuritytw/seal-security-nuget-demo-net7

seal-security-nuget-demo-net7

.NET 7 fork de seal-security-nuget-demo : même scénario d'exploitation de la CVE-2024-21907, réorienté pour les clients verrouillés sur le SDK .NET 7.

Voir le dépôt
11il y a 4 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

Démo Navigateur + CLI (NuGet/C#) — Édition .NET 7

Pourquoi un fork .NET 7 ?

Ceci est un fork reciblé du dépôt canonique seal-security-nuget-demo (qui cible net9.0). Le scénario d'exploitation, les contrôleurs et la liste des paquets scellés sont identiques — seul le TargetFramework diffère.

Il existe parce que la plupart des clients en entreprise ne peuvent pas migrer vers le dernier SDK .NET à la demande. .NET 7 a atteint la fin de support le 14 mai 2024, mais de nombreux environnements de production tournent encore dessus pour des raisons de compatibilité, de certification ou opérationnelles. C'est précisément le cas d'usage pour lequel Seal Security est conçu : lorsqu'un client ne peut pas (ou ne veut pas) effectuer une montée de version majeure, Seal corrige la dépendance vulnérable sur place dans la même version, sans changement d'API publique ni modification de code dans l'application du client. Cette démo permet d'avoir cette conversation sur la pile technologique réelle du client au lieu de lui demander d'installer d'abord net8/net9.

Le fork épingle le SDK à 7.0.x via global.json afin que des mises à niveau accidentelles ne s'infiltrent pas pendant la démo.


Vue d'ensemble

Cette application de démonstration est une simple page d'accueil ASP.NET Core qui utilise Newtonsoft.Json 12.0.2 pour analyser la saisie utilisateur comme objet de configuration. L'application possède un champ de nom — saisissez votre nom, cliquez sur Go, et elle affiche « Welcome, alice! ». En coulisses, elle fait passer la saisie par JsonConvert.DeserializeObject<NestedConfig>() de Newtonsoft.Json. C'est tout — une utilisation tout à fait standard d'une bibliothèque JSON populaire.

Le problème est que Newtonsoft.Json 12.0.2 (et les versions antérieures à 13.0.1) présente CVE-2024-21907 — une vulnérabilité de déni de service de haute sévérité avec un score CVSS de 7,5 (ÉLEVÉ). Cette démo montre comment Seal Security corrige la vulnérabilité sur place sans exiger de mise à niveau de version majeure.


La vulnérabilité : CVE-2024-21907

Quelle est la vulnérabilité ?

La méthode JsonConvert.DeserializeObject<T>() de Newtonsoft.Json peut être exploitée en créant des charges utiles JSON profondément imbriquées. Lors de la désérialisation dans un objet typé (POCO), le JsonSerializerInternalReader de la bibliothèque effectue des appels véritablement récursifs (CreateValueInternal → CreateObject → PopulateObject → SetPropertyValue → CreateValueInternal) qui provoquent un débordement de pile, entraînant le plantage de l'application (déni de service).

Comment fonctionne l'exploit

L'application prend la saisie utilisateur et l'analyse via Newtonsoft.Json. Si la saisie est une URL, l'application récupère d'abord le contenu — un modèle réaliste utilisé par les chargeurs de configuration, les testeurs d'API et les récepteurs de webhooks :

root@kitploit:~
public class NestedConfig
{
    [JsonProperty("n")]
    public NestedConfig? N { get; set; }
}

var config = JsonConvert.DeserializeObject<NestedConfig>(name);

Saisie normale : Saisissez alice → affiche « Welcome, alice! »

Exploit : Collez cette URL dans le champ de nom et cliquez sur Go :

root@kitploit:~
https://raw.githubusercontent.com/seal-sec-demo-2/json-payload/main/payload.json

L'application détecte qu'il s'agit d'une URL, récupère le json-payload (JSON profondément imbriqué {"n":{"n":{...}}}), et le désérialise via Newtonsoft.Json dans la classe récursive NestedConfig — déclenchant le débordement de pile.

Le JsonSerializerInternalReader récure à travers CreateValueInternal → CreateObject → PopulateObject → SetPropertyValue pour chaque niveau d'imbrication. À environ 5 000 niveaux de profondeur, cela épuise la pile du thread et l'application plante avec une StackOverflowException — le processus meurt instantanément (aucune gestion d'erreur gracieuse possible).

Impact dans le monde réel

Avec cette vulnérabilité, les attaquants peuvent :

  • Faire planter l'application en envoyant des charges utiles JSON malveillantes
  • Provoquer un déni de service affectant tous les utilisateurs
  • Épuiser les ressources du serveur par une exploitation répétée
  • Contourner la limitation de débit car chaque requête fait planter le processus

Pourquoi ne pas simplement passer à Newtonsoft.Json 13.0.1 ?

Le correctif publiquement disponible exige une mise à niveau vers la version 13.0.1. Cependant, les mises à niveau de version majeure introduisent souvent :

  • Des changements d'API cassants dans le comportement de sérialisation
  • Des problèmes de compatibilité avec d'autres bibliothèques attendant des versions spécifiques
  • Des exigences de tests approfondis pour tous les chemins de code de sérialisation/désérialisation
  • Un risque de changements de comportement à l'exécution en production

Cela fait du correctif « il suffit de mettre à niveau » un projet qui peut facilement prendre des semaines de temps de développement — laissant la vulnérabilité ouverte entre-temps.

Comment Seal Security le corrige

La version corrigée de Seal (12.0.2-sp1) ajoute une protection de profondeur de récursion sans changer aucune API publique. Le correctif :

  1. Ajoute des limites MaxDepth par défaut pour empêcher une récursion illimitée
  2. Gère gracieusement l'imbrication profonde avec des exceptions appropriées au lieu d'un débordement de pile
  3. Ne change aucune API publique — le code existant continue de fonctionner sans modification

C'est la même stratégie d'atténuation appliquée dans Newtonsoft.Json 13.0.1, rétroportée en 12.0.2 comme remplacement direct.


Autres dépendances vulnérables

Cette démo inclut également d'autres paquets NuGet vulnérables que Seal Security peut corriger :

log4net 2.0.5 - CVE-2018-1285 (CVSS 9.8 CRITIQUE)

Vulnérabilité d'entité externe XML (XXE) dans l'analyse de configuration XML de log4net. Un attaquant qui peut contrôler le fichier de configuration log4net peut :

  • Lire des fichiers arbitraires depuis le serveur
  • Effectuer une falsification de requête côté serveur (SSRF)
  • Provoquer un déni de service

Note sur System.Net.Http : La démo net9 canonique inclut également une référence vulnérable System.Net.Http 4.3.0 pour CVE-2017-0249. Nous l'avons omise de ce fork net7 car sur .NET 7, System.Net.Http fait partie de la BCL et la référence de paquet autonome est un méta-paquet vestigial — il présente des cas limites connus avec dotnet add package --source <local-nupkg>, ce qui est exactement la façon dont la CLI Seal applique les versions scellées. Le supprimer rend l'étape seal fix fiable sans changer le scénario de la démo (HttpClient fonctionne toujours parfaitement ; le runtime le fournit).


Prérequis

  • SDK .NET 7.0 (téléchargement depuis Microsoft)
  • CLI Seal Security v0.3.238 pour Windows x64 (téléchargement direct)

    Les binaires CLI Windows ont été interrompus après v0.3.238. v0.3.238 est entièrement fonctionnel pour la remédiation NuGet sur Windows.

  • Jeton Seal Security (depuis le tableau de bord Seal)

Un guide détaillé d'installation et d'exécution sur Windows Server est disponible dans README-WINDOWS-SERVER.md. Le démarrage rapide ci-dessous couvre les mêmes étapes sous forme condensée.


Démarrage rapide (Windows Server local)

1. Définir les variables d'environnement

PowerShell :

root@kitploit:~
$env:SEAL_TOKEN = "votre-jeton-seal-ici"
$env:SEAL_PROJECT = "nuget-demo-net7"

2. Exécuter l'application vulnérable (avant Seal)

root@kitploit:~
cd seal-security-nuget-demo-net7

# Restauration (tire depuis nuget.org et le flux Seal — voir nuget.config)
dotnet restore

# Compilation et exécution
dotnet build
dotnet run

Ouvrez http://localhost:5000 — l'application tourne avec des dépendances vulnérables.

Test avec une saisie normale

Saisissez alice dans le champ de nom, cliquez sur Go. Vous devriez voir : « Welcome, alice! »

Test avec la charge utile d'exploit

Collez l'URL suivante dans le champ de nom et cliquez sur Go :

root@kitploit:~
https://raw.githubusercontent.com/seal-sec-demo-2/json-payload/main/payload.json

Résultat non corrigé : Le navigateur affiche une erreur / une réinitialisation de connexion — l'application a planté avec une StackOverflowException dans JsonSerializerInternalReader.CreateValueInternal. Le processus est mort.

3. Appliquer le correctif Seal Security

root@kitploit:~
# (Facultatif — déjà fait ci-dessus) Restaurer d'abord les dépendances
dotnet restore

# Exécuter la CLI Seal pour corriger les vulnérabilités
seal fix . --mode remote -v

# Restaurer à nouveau pour récupérer les versions scellées
dotnet restore

# Compiler et exécuter l'application corrigée
dotnet build
dotnet run

L'application utilise désormais des versions corrigées (Newtonsoft.Json 12.0.2-sp1, log4net 2.0.5-sp1).

Résultat corrigé : Collez la même URL d'exploit → la page affiche « Blocked by Seal patch: MaxDepth of 64 has been exceeded. » — la limite de récursion corrigée de Newtonsoft.Json a rejeté la charge utile profonde. Le serveur continue de fonctionner normalement.

4. Vérifier les versions corrigées

root@kitploit:~
dotnet list package

Vous devriez voir des paquets avec le suffixe -sp1 indiquant les correctifs Seal Security.


Intégration de la CLI Seal Security

La règle d'or

L'étape CLI doit être ajoutée immédiatement après l'installation des dépendances mais avant la compilation finale.

root@kitploit:~
# 1. Restaurer les dépendances
dotnet restore

# 2. <--- Exécuter la CLI Seal ici
$env:SEAL_TOKEN = "votre-jeton-seal-ici"
$env:SEAL_PROJECT = "nuget-demo-net7"
seal fix . --mode remote -v

# 3. Restaurer à nouveau (pour obtenir les versions scellées)
dotnet restore

# 4. Compiler
dotnet build

Modes de correction

ModeDescription
allAppliquer automatiquement tous les correctifs disponibles
remoteAppliquer uniquement les correctifs approuvés dans l'interface Seal
localAppliquer uniquement les correctifs définis dans .seal-actions.yml

.seal-actions.yml dans ce dépôt liste déjà les trois remplacements scellés pour le mode local, donc seal fix . --mode local -v fonctionne hors ligne (nécessite toujours le jeton pour le serveur d'artefacts).


Configuration du serveur d'artefacts

Configuration nuget.config

nuget.config est préconfiguré pour utiliser Seal Security avec des variables d'environnement :

root@kitploit:~
<configuration>
  <packageSources>
    <add key="Seal" value="https://nuget.sealsecurity.io/v3/index.json" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <Seal>
      <add key="Username" value="%SEAL_PROJECT%" />
      <add key="ClearTextPassword" value="%SEAL_TOKEN%" />
    </Seal>
  </packageSourceCredentials>
</configuration>

Variables d'environnement requises

VariableDescription
SEAL_TOKENVotre jeton d'accès Seal Security
SEAL_PROJECTID du projet (par ex., nuget-demo-net7)

Liste blanche réseau (pour environnements restreints)

La CLI Seal nécessite un HTTPS sortant (TCP 443) vers :

  • cli.sealsecurity.io — configuration d'analyse / correction
  • authorization.sealsecurity.io — validation du jeton
  • nuget.sealsecurity.io — téléchargements de .nupkg scellés
  • d2zko6i8myndc4.cloudfront.net — CDN qui sert les artefacts scellés réels (les noms d'hôte .sealsecurity.io redirigent ici)
  • api.nuget.org / points de terminaison nuget.org standard — pour les dépendances non scellées

Vérifiez depuis PowerShell après l'ouverture du pare-feu :

root@kitploit:~
Test-NetConnection cli.sealsecurity.io -Port 443
Test-NetConnection authorization.sealsecurity.io -Port 443
Test-NetConnection nuget.sealsecurity.io -Port 443
Test-NetConnection d2zko6i8myndc4.cloudfront.net -Port 443

Tous devraient rapporter TcpTestSucceeded: True.


Notes spécifiques à .NET 7

ÉlémentPourquoi c'est important
global.json épingle le SDK à 7.0.x avec rollForward: latestFeatureEmpêche les machines avec net8/net9 côte à côte de basculer silencieusement de SDK en pleine démo.
System.Configuration.ConfigurationManager épinglé à 7.0.0La démo net9 canonique utilise 8.0.0, qui cible uniquement net8 et échoue à la restauration sur net7. 7.0.0 a la même surface d'API dont log4net a besoin.
NU1701 supprimé dans le csprojlog4net 2.0.5 annonce un TFM net4x hérité que .NET 7 accepte à l'exécution mais signale à la restauration. L'avertissement est cosmétique ; la suppression maintient une sortie de compilation propre pendant la démo.
CLI Seal v0.3.238 pour Windows x64Dernière version avec un binaire Windows ; entièrement fonctionnelle pour la remédiation NuGet. Les binaires Windows ont été interrompus après cette version, donc ne suggérez pas une version plus récente.

Points de discussion de la démo

  • Aucune modification de code — le code de l'application est identique à la version non corrigée. Seule la version du paquet NuGet a été remplacée.
  • Même API — 12.0.2-sp1 est un remplacement direct compatible binaire pour 12.0.2.
  • Cible la pile technologique réelle du client — net7.0, pas net9.0. Aucune mise à niveau de SDK requise.
  • Défense en profondeur — protège tous les chemins de code, y compris les dépendances transitives.
  • Correctifs publics — tous les correctifs sont open source et auditable.
  • .NET en fin de vie reste corrigé — c'est la valeur fondamentale : Microsoft ne publie plus de mises à jour de sécurité pour .NET 7, mais Seal maintient la surface de dépendances existante du client sécurisée.

Paquets NuGet scellés disponibles

Paquets utilisés par cette démo :

PaquetVersion vulnérableVersion scelléeCVECVSS
Newtonsoft.Json12.0.212.0.2-sp1CVE-2024-219077,5 ÉLEVÉ
log4net2.0.52.0.5-sp1CVE-2018-12859,8 CRITIQUE

Autres paquets NuGet scellés disponibles depuis le flux Seal (pas dans cette démo, listés pour référence) :

PaquetVersion vulnérableVersion scelléeCVECVSS
log4net2.0.02.0.0-sp1CVE-2018-12859,8 CRITIQUE
System.Net.Http4.3.04.3.0-sp1CVE-2017-02497,3 ÉLEVÉ
Snappier1.1.01.1.0-sp1CVE-2023-286387,0 ÉLEVÉ
jQuery.Validation1.17.01.17.0-sp1CVE-2021-212527,5 ÉLEVÉ

Licence

Licence MIT — Voir le fichier LICENSE pour plus de détails.

Télécharger l’outil