Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-33331 — Lokales Labor zur Reproduktion von gespeichertem XSS in der OpenAPI-Dokumentgenerierung von oRPC (CVE-2026-33331), mit verwundbaren und gepatchten Versionen zum Vergleich sowie einem eigenständigen PoC. | Kitploit
Tools/GitHubGitHub/abhayclasher/cve-2026-33331
SchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitLernen & BildungLabs & Praxis
GitHubabhayclasher/cve-2026-33331

CVE-2026-33331

Lokales Labor zur Reproduktion von gespeichertem XSS in der OpenAPI-Dokumentgenerierung von oRPC (CVE-2026-33331), mit verwundbaren und gepatchten Versionen zum Vergleich sowie einem eigenständigen PoC.

Repository anzeigen
12vor 6 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-33331 — Stored XSS im oRPC OpenAPI Reference Plugin

CVE GHSA CWE-79 Patched

Proof-of-Concept-Labor für Stored XSS in der OpenAPI-Dokumentationsgenerierung von orpc


Zweck

oRPC erstellt API-Dokumentationsseiten aus einer OpenAPI-Spezifikation. Vor v1.13.9 wurde die Spezifikation direkt in ein <script>-Tag mit JSON.stringify() ohne HTML-Kodierung eingefügt. Jedes vom Angreifer kontrollierte Feld, wie info.description, konnte dieses Tag vorzeitig schließen und Skript ausführen.

Dieses Repository bietet Ihnen ein lokales Labor zur Reproduktion des Fehlers sowie eine gepatchte Version zum Vergleich.

Kurzfakten

FeldWert
CVE-IDCVE-2026-33331
GHSAGHSA-7f6v-3gx7-27q8
CWECWE-79 (Unzureichende Neutralisierung von Eingaben während der Webseitengenerierung)
Produktmiddleapi/orpc
BetroffenAlle Versionen unterhalb von v1.13.9
Gepatchtv1.13.9
EntdeckungAbhay Kumar (@abhayclasher)

Schwachstellendetails

Der verwundbare Code in packages/openapi/src/plugins/openapi-reference.ts rendert die Spezifikation wie folgt:

<script id="spec" type="application/json">${JSON.stringify(spec)}</script>

JSON.stringify() erzeugt gültiges JSON, escapet jedoch keine < oder >. Der Browser behandelt </script> weiterhin als HTML-Schließtag, selbst innerhalb eines <script type="application/json">.

Eine Payload in info.description, die die Ausführung auslöst:

"</script><script>alert('XSS')</script>"

Der Browser sieht:

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

Das erste </script> schließt den Block. Alles danach wird als Inline-JavaScript ausgeführt.

Auswirkungen

  • Session-Hijacking durch Cookie- oder Token-Diebstahl
  • Beliebige API-Aufrufe im Namen des Opfers, das die Dokumentation betrachtet
  • Phishing-Overlays, die innerhalb der vertrauenswürdigen Dokumentationsdomäne gerendert werden

Dies gilt, wenn eine Anwendung OpenAPI-Spezifikationen aus benutzergesteuerten Eingaben erstellt, was genau der Fall ist, den oRPC über seine Router-Definitionen ermöglicht.

Systemanforderungen

  • Node.js 18 oder neuer
  • Docker (optional, für containerisiertes Labor)
  • 500 MB freier Speicherplatz

Einrichtung

Option 1: Direkt ausführen

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

Option 2: Mit Docker ausführen

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

Verwendung

Nachdem der Server gestartet ist, besuchen Sie diese URLs:

URLBeschreibung
http://localhost:3000/docsVerwundbare Dokumentationsseite — XSS-Payload wird beim Laden ausgeführt
http://localhost:3000/docs/safeDieselbe Seite mit dem v1.13.9-Patch
http://localhost:3000/spec.jsonRohe OpenAPI-Spezifikation als JSON

Die verwundbare Version löst beim Laden der Seite ein alert() aus, was die Skriptausführung bestätigt. Die gepatchte Version rendert dieselbe bösartige Spezifikation sicher — die Payload wird als Klartext angezeigt.

Sie können auch das eigenständige PoC ausführen:

cd poc
node exploit.js

Dies startet einen minimalen Server auf Port 3000, der denselben Fehler ohne den vollständigen Anwendungskontext demonstriert.

So funktioniert es

Erkennungsablauf

1. Angreifer kontrolliert ein Feld in der OpenAPI-Spezifikation (z. B. description)
2. oRPC generiert das Dokumentations-HTML mit JSON.stringify(spec)
3. Das </script> in der Payload schließt das <script>-Tag vorzeitig
4. Der Browser führt alles Folgende als Inline-JavaScript aus

Die Angriffskette

┌─────────────────────────────────────────────────────┐
│  1. Bösartige Spezifikation erstellt:                │
│                                                       │
│     info.description =                                │
│       "</script><script>alert('XSS')</script>"        │
│                                                       │
│  2. orpc bettet Spezifikation in HTML ein:            │
│                                                       │
│     <script id="spec" type="application/json">        │
│     {"info":{"description":"</script>    <-- Tag      │
│       <script>alert('XSS')</script>      <-- Payload  │
│       "}}                                             │
│     </script>                                         │
│                                                       │
│  3. Browser führt alert('XSS') aus                    │
└─────────────────────────────────────────────────────┘

Der Fix

Version 1.13.9 führt escapeJsonForHtml() ein, das HTML-empfindliche Zeichen durch Unicode-Escapes ersetzt, bevor JSON in das Skript-Tag eingebettet wird:

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

Unicode-Escapes funktionieren, weil sie gültiges JSON bleiben — JSON.parse() rekonstruiert die ursprüngliche Zeichenfolge — aber sie sehen für den HTML-Parser des Browsers nie wie HTML aus.

Der Patch änderte auch das Lesen von JSON aus einem DOM-dataset.config-Attribut (das brach, wenn Werte Klammern enthielten) hin zur direkten Zuweisung des escapeten JSON an eine Inline-Variable.

Vollständigen Commit ansehen: 4f0efa8

Projektstruktur

CVE-2026-33331/
├── README.md               # Diese Datei
├── docker-compose.yml      # Docker-Labor-Konfiguration
├── app/
│   ├── Dockerfile          # Container-Build-Konfiguration
│   ├── package.json        # Node.js-Abhängigkeiten
│   └── server.js           # Verwundbarer + gepatchter Dokumentations-Renderer
└── poc/
    └── exploit.js          # Eigenständiges minimales Proof-of-Concept

Referenzen

  • NVD — CVE-2026-33331
  • GitHub Security Advisory
  • Patch-Commit
  • Release v1.13.9
  • CWE-79

Gemeldet von Abhay Kumar. Dieses Repository ist nur für lokale Bildungszwecke gedacht. Stellen Sie den verwundbaren Server nicht in einem öffentlichen Netzwerk bereit.

Nur für Bildungszwecke — nur in isolierten Umgebungen verwenden

Tool herunterladen