Kai Ole Hartwig
7 Min. Lesezeit
Kritisch

orval CVE-2026-96754 bis 96759: Sechs Code-Injection-Lücken in generiertem TypeScript-Code

Im CVE-Brief vom 24. September 2026 wurden sechs neue Sicherheitslücken im OpenAPI-Client-Generator orval veröffentlicht: CVE-2026-96754, -96755, -96757, -96758 und -96759 mit CVSS 9.3 (kritisch), CVE-2026-96756 mit CVSS 9.2. Alle sechs sind CWE-94-Lücken: orval übernimmt Werte aus der OpenAPI-Spezifikation ungeprüft in generierten TypeScript-Code. Eine präparierte Spezifikation kann so beim Import oder beim Aufruf des generierten Codes beliebigen JavaScript-Code ausführen. Es ist die zweite Welle solcher Lücken in orval innerhalb weniger Monate, nach einer Serie ähnlicher Advisories im Juli 2026.

TL;DR — 90 Sekunden

orval generiert TypeScript-Clients, React-Query-Hooks und Mock-Daten aus OpenAPI-Spezifikationen. Sechs neue CVEs zeigen dasselbe Muster in sechs verschiedenen Generatoren: Pfadsegmente, Media-Type-Schlüssel, Property-Namen, operationId-Werte und Datums-Defaults aus der Spezifikation landen ungeprüft in String- oder Template-Literalen des generierten Codes. Enthält einer dieser Werte ein Anführungszeichen oder eine ${}-Sequenz, kann er aus dem Literal ausbrechen. Der eingeschleuste Code läuft, sobald jemand die generierte Datei importiert oder die generierte Funktion aufruft, nicht erst zur Laufzeit einer Anfrage. Fix-Versionen liegen zwischen 8.28.0 und 8.30.0, je nach CVE. Ein Update auf 8.30.0 oder neuer schließt alle sechs Lücken gleichzeitig.

Was ist das Problem?

orval liest OpenAPI- oder Swagger-Dokumente ein und erzeugt daraus TypeScript-Typen, Fetch- oder Axios-Clients, React-Query- oder SWR-Hooks, MSW-Mocks und weitere Artefakte. Die sechs Lücken teilen ein gemeinsames Muster: Werte aus der Spezifikation werden ohne Escaping direkt in String-Literale oder Template-Literale des generierten Codes eingesetzt.

CVE-2026-96754 betrifft den @orval/hono-Generator: Pfadwerte aus der Spezifikation landen ungeprüft in einfach gequoteten Routen-Literalen; ein Apostroph im Pfad bricht aus dem Literal aus.

CVE-2026-96755 betrifft den @orval/effect-Generator: Schema-Defaults werden unsicher in Template-Literale umgewandelt; eine ${...}-Sequenz im Default-Wert führt zu Codeausführung beim Import oder bei der Code-Konstruktion.

CVE-2026-96756 betrifft den Factory-Generator in @orval/core: Sind factoryMethods und useDates gemeinsam aktiviert, werden Datums-Defaults ungeprüft in new Date()-Aufrufe eingesetzt.

CVE-2026-96757 betrifft den Fetch-Generator in @orval/core: Media-Type-Schlüssel aus der Spezifikation werden ungeprüft in einfach gequotete Content-Type-Literale eingesetzt.

CVE-2026-96758 betrifft den Form-Data-Serializer in @orval/core: Multipart-Property-Namen landen ungeprüft in Template-Literalen, die beim Aufbau des FormData-Bodys ausgeführt werden.

CVE-2026-96759 betrifft den TanStack-Query-Generator: Der operationId-Parameter wird ungeprüft in generierte Metadaten-Objekte der Mutator-Optionen eingesetzt.

In allen sechs Fällen genügt eine präparierte OpenAPI-Spezifikation als Eingabe. Wer Spezifikationen aus nicht vollständig vertrauenswürdigen Quellen generiert, etwa von Partnern oder aus automatisiert geladenen Drittanbieter-APIs, ist unmittelbar betroffen.

Wer ist betroffen?

CVEGeneratorBetroffenFixCVSS
CVE-2026-96754@orval/honoAlle Versionen vor 8.29.0 (v2.0.0–8.28.1)8.29.09.3 (kritisch)
CVE-2026-96755@orval/effect8.14.0–8.28.18.29.09.3 (kritisch)
CVE-2026-96756@orval/core (Factory)Alle Versionen vor 8.30.0 (v2.0.0–8.29.0)8.30.09.2 (kritisch)
CVE-2026-96757@orval/core (Fetch)6.7.1–8.28.18.29.09.3 (kritisch)
CVE-2026-96758@orval/core (Form-Data)Alle Versionen vor 8.28.0 (v2.0.0–8.27.0)8.28.09.3 (kritisch)
CVE-2026-96759TanStack-Query-GeneratorAlle Versionen vor 8.29.08.29.09.3 (kritisch)

Da die Fix-Versionen zwischen 8.28.0 und 8.30.0 liegen, schließt erst ein Update auf 8.30.0 oder neuer alle sechs Lücken gleichzeitig. Betroffen ist, wer einen der genannten Generatoren nutzt; die meisten Projekte, die orval für TypeScript-Client- oder Hook-Generierung einsetzen, verwenden mindestens einen davon.

Auswirkungen

Der eingeschleuste Code läuft im Kontext des Prozesses, der die generierte Datei importiert oder ausführt, typischerweise ein Build-Schritt, ein CI-Job oder eine Node.js-Laufzeitumgebung mit Dateisystem- und Netzwerkzugriff. Da orval üblicherweise beim Build oder in einem Codegenerierungs-Schritt mit Zugriff auf Repository, Secrets und CI-Umgebungsvariablen läuft, entspricht eine erfolgreiche Ausnutzung faktisch einer Remote Code Execution in der Build-Pipeline.

Für Teams, die OpenAPI-Spezifikationen von externen Partnern, Drittanbieter-APIs oder automatisiert aus einem nicht vollständig kontrollierten Backend beziehen, ist das Risiko unmittelbar: Eine manipulierte Spezifikation genügt, eine Interaktion mit der laufenden Anwendung ist nicht nötig.

Mitigation / Sofortmaßnahmen

Aktualisieren Sie orval auf Version 8.30.0 oder neuer, um alle sechs Lücken zu schließen:

 

# Gesamtes orval-Ökosystem aktualisieren
npm install orval@^8.30.0 --save-dev

# Falls einzelne Pakete direkt referenziert werden
npm install @orval/core@^8.30.0 @orval/hono@^8.30.0 @orval/effect@^8.30.0 --save-dev

# Generierten Code danach neu erzeugen
npx orval --config ./orval.config.ts

 

Prüfen Sie den bereits generierten Code auf verdächtige Muster, insbesondere Apostrophe, Backticks oder ${-Sequenzen in Pfaden, Property-Namen oder operationId-Werten aus der letzten Generierung vor dem Update. Committen Sie neu generierten Code nach dem Update, statt sich auf zwischengespeicherte Build-Artefakte zu verlassen.

Bis das Update eingespielt ist, sollten Sie orval nur mit Spezifikationen aus vertrauenswürdigen, versionierten Quellen ausführen und keine zur Laufzeit heruntergeladenen Spezifikationen direkt verarbeiten.

Detection / Prüfung

Prüfen Sie Ihre OpenAPI-Spezifikationen und den zuletzt generierten Code auf Auffälligkeiten:

 

# Verdächtige Zeichen in Pfaden, Property-Namen und operationId-Werten suchen
grep -E "['\"\`]|\$\{" openapi.yaml openapi.json

# Generierten Code auf ungewöhnliche Ausdrücke im String-Kontext prüfen
grep -rn '${' generated/ --include='*.ts'

# CI-Logs auf unerwartete Netzwerkverbindungen oder Prozesse während des orval-Laufs prüfen
grep -i 'orval' ci-build.log

 

Prüfen Sie zusätzlich, aus welchen Quellen Ihre OpenAPI-Spezifikationen stammen und ob eine dieser Quellen zwischen dem Bekanntwerden der Lücken und Ihrem letzten Update kompromittiert oder manipuliert worden sein könnte.

Betreiberempfehlung

Akut handeln, wenn: Sie orval mit OpenAPI-Spezifikationen aus nicht vollständig vertrauenswürdigen oder automatisiert bezogenen Quellen betreiben, insbesondere in einer CI-Pipeline mit Zugriff auf Secrets. Aktualisieren Sie umgehend auf 8.30.0 oder neuer und generieren Sie den Code neu.

Beobachten genügt, wenn: Sie orval ausschließlich mit selbst gepflegten, versionierten Spezifikationen in einer isolierten Build-Umgebung betreiben. Ein Update auf 8.30.0 bleibt dennoch empfehlenswert, da sich die Vertrauenswürdigkeit von Spezifikationsquellen über die Zeit ändern kann.

Häufig gestellte Fragen zu den orval-Sicherheitslücken vom 24. September 2026

Was unterscheidet diese sechs CVEs von der orval-Advisory-Welle im Juli 2026?+

Die Juli-2026-Welle betraf vor allem den Zod-Client, die Zod-CLI und den MSW-Mock-Generator mit RCE über computed-property-key-Injection beim Import. Die sechs CVEs aus diesem Beitrag betreffen andere Generatoren, Hono, Effect, Factory-Methoden, Fetch, Form-Data und TanStack Query, mit demselben grundlegenden Muster: fehlendes Escaping von Spezifikationswerten im generierten Code.

Reicht es, nur die zuletzt generierten Dateien zu löschen, statt orval zu aktualisieren?+

Nein. Solange orval nicht aktualisiert ist, erzeugt jeder erneute Lauf mit derselben präparierten Spezifikation wieder verwundbaren Code. Löschen allein entfernt nicht die Ursache im Generator.

Muss ich alle orval-Pakete gleichzeitig aktualisieren?+

Ja, sofern Sie mehrere der betroffenen Generatoren nutzen. Da mehrere Pakete im selben Monorepo versioniert werden, ist ein gemeinsames Update auf 8.30.0 oder neuer der einfachste Weg, alle sechs Lücken zu schließen.

Ist mein Projekt betroffen, wenn ich orval nur für interne, selbst geschriebene Spezifikationen nutze?+

Das Risiko ist deutlich geringer, aber nicht null. Wer die OpenAPI-Spezifikation selbst schreibt und versioniert, kontrolliert auch die Werte, die in generierten Code einfließen. Ein Update bleibt trotzdem sinnvoll, etwa falls die Spezifikation später von einem Tool oder einer Person ergänzt wird, die Sie nicht vollständig prüfen.

Gibt es öffentliche Exploits oder aktive Ausnutzung?+

Zum Zeitpunkt dieses Beitrags waren keine öffentlichen Exploits oder Berichte über aktive Ausnutzung bekannt. Die Lücken sind über OSV und die GitHub Advisory Database dokumentiert, jedoch ohne bekannte In-the-Wild-Fälle.

Warum sind die CVSS-Werte kritisch, obwohl eine präparierte Spezifikation nötig ist?+

CVSS bewertet die Ausnutzbarkeit bei erfolgreichem Zugriffsweg, nicht die Wahrscheinlichkeit dieses Zugriffswegs. Eine OpenAPI-Spezifikation gilt oft fälschlich als reine Konfigurationsdatei ohne Sicherheitsrelevanz, wird aber häufig aus Quellen bezogen, die nicht denselben Prüfprozess durchlaufen wie eigener Code.

Fazit

Die sechs orval-CVEs zeigen ein Muster, das über orval hinausweist: Code-Generatoren, die Fremddaten wie OpenAPI-Spezifikationen in ausführbaren Code umsetzen, brauchen dieselbe Sorgfalt beim Escaping wie jede andere Code-Injection-Angriffsfläche. Wer orval oder vergleichbare Generatoren einsetzt, sollte Spezifikationsquellen wie Eingabedaten behandeln, nicht wie vertrauenswürdige Konfiguration.

Quellen

Ich prüfe und härte JavaScript- und PHP-Build-Pipelines laufend, von Codegenerierung bis CI/CD.

Audits von Codegenerierungs- und Build-Schritten, Absicherung von CI/CD-Pipelines, Bewertung von Drittanbieter-Abhängigkeiten.

Plattform-Betrieb statt Beratung auf Papier: Ich prüfe, patche und härte Ihre Infrastruktur laufend.

Kontakt aufnehmen →

Über den Autor

Foto von Kai Ole Hartwig.

Kai Ole Hartwig

Freiberuflicher DevSecOps-Berater · OnlyOle Consulting

Programmiert seit 2002 – autodidaktisch gelernt, 2012 mit KO-Web selbständig gemacht. Über 100 Projekte, Fokus auf Security, Performance, Automatisierung und Qualität. Heute freiberuflich: DevSecOps-Beratung, Schulungen und Softwareentwicklung.