CSIRTS // UNIFIED SECURITY ADVISORY FEEDSYS ● ONLINE · POWERED BY INTELFUSIONS.COM

CVE-2026-54662

highCVSS 8.3covered by 2 sourcesfirst seen 2026-07-29
Summary swagger-typescript-api interpolates servers[0].url directly into a TypeScript class-body field initializer of the generated fetch HttpClient (templates/base/http-clients/fetch-http-client.ejs:75), without any escaping. A malicious URL containing a " closes the string literal that initializes public baseUrl and exposes the surrounding *class body* to injection. The most direct exploit declares a new static field whose initializer is an async IIFE — TypeScript evaluates static field initializers at class definition time, which is at module load. A consumer who imports the generated client (or anything that transitively imports it) executes the injected code with no further interaction — no instantiation, no method call, no use of the baseUrl. The attacker controls the OpenAPI spec; the victim is whoever runs the generator and imports the result. This is the highest-impact sink in the package: the trigger requires only a bare import of the generated module. Details createApiConfig in src/code-gen-process.ts:591 sets the templated baseUrl from the spec without sanitization: return { ... baseUrl: serverUrl, // <-- serverUrl = swaggerSchema.servers[0].url, raw ... }; The fetch http-client template (templates/base/http-clients/fetch-http-client.ejs:75) then interpolates that value into a TS string literal that initializes a public class-body field of the generated HttpClient: export class HttpClient<SecurityDataType = unknown> { public baseUrl: string = "<%~ apiConfig.baseUrl %>"; private securityData: SecurityDataType | null = null; ... } <%~ %> is Eta's raw, unescaped interpolation. The codebase's only escape function — escapeJSDocContent (src/schema-parser/schema-formatters.ts:127) — only replaces */ and is not applied to this path. TypeScript class-body grammar permits any number of field declarations and static blocks between { and }. A spec value of the form: URL"; static _pwn = (IIFE)(); public x: string = " produces the following class body: exp

⚡ Watch CVE-2026-54662

Get an email if CVE-2026-54662 is added to CISA KEV, gains public exploit code, or a new advisory cites it — max one per day, one-click unsubscribe.

Exploitation outlook

Advisory coverage (2)

External references

NVD record for CVE-2026-54662

CVE.org record

Embed the live status

CVE-2026-54662 live status badge — this badge updates automatically when the KEV or exploit status changes. How to embed it →

[![CVE-2026-54662 status](https://www.csirts.com/badge/CVE-2026-54662)](https://www.csirts.com/cve/CVE-2026-54662)