BLZ-Updater: Versionsformat vor URL-Interpolation strikt pruefen

Die von der npm-Registry gelieferte "latest"-Version wird in die jsDelivr-
CDN-URL interpoliert. Nun nur noch rein numerisches semver (^\d.\d.\d$)
zugelassen, damit eine manipulierte Registry-Antwort (../, Slashes, Query)
den Pfad nicht verbiegen kann. Host bleibt ohnehin fix.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-12 14:09:24 +02:00
co-authored by Claude Opus 4.8
parent 91fbe12299
commit a28c8355fd
+9
View File
@@ -204,10 +204,19 @@ async function fetchJson(url: string): Promise<any> {
}
}
// Erlaubtes Versionsformat (semver-Kern, rein numerisch). Die Version wird in
// die CDN-URL interpoliert ohne strikte Prüfung könnte eine manipulierte
// Registry-Antwort (`../`, Slashes, Query-Zeichen) den Pfad verbiegen. Der Host
// bleibt zwar fix (CDN_BASE), aber wir lassen nur `1.2.3` zu.
const VERSION_RE = /^\d{1,6}\.\d{1,6}\.\d{1,6}$/;
/** Ermittelt die neueste verfügbare Paket-Version (npm dist-tag latest). */
export async function fetchLatestVersion(): Promise<string> {
const manifest = await fetchJson(`${REGISTRY_BASE}/${PACKAGE}/latest`);
if (!manifest || typeof manifest.version !== 'string') throw new Error('Registry lieferte keine Version');
if (!VERSION_RE.test(manifest.version)) {
throw new Error(`Unerwartetes Versionsformat: ${manifest.version}`);
}
return manifest.version;
}