Geheimnis mit fest eingebautem Ersatzwert
Prüfregel · RSC-SEC-146
- Sicherheit
- Schweregrad: Hoch
- CWE-798
- OWASP A07-2021
Findet Geheimnisse aus der Umgebung mit festem Ersatzwert (`process.env.JWT_SECRET || "dev-secret"`, `?? "…"`) — öffentliche Präfixe (NEXT_PUBLIC …) ausgenommen.
Warum das zählt
KI-Generatoren schreiben `const secret = process.env.JWT_SECRET || "dev-secret"`, damit die App auch ohne gesetzte Variable startet. Lokal praktisch — in Produktion fatal: Fehlt die Variable auf dem Server (ein häufiger Konfigurationsfehler), läuft die App still mit dem Wert aus dem Quellcode weiter, statt den Start zu verweigern.
Bei einem Signier- oder Sitzungsschlüssel ist dieser Ersatzwert öffentlich bekannt — er steht im Repository. Wer ihn kennt, fälscht gültige Tokens oder übernimmt fremde Sitzungen. Der Fehler ist unsichtbar, weil nichts abstürzt: Die App funktioniert, nur eben mit einem Schlüssel, den jeder kennt.
Fix: Den Ersatzwert streichen. Fehlt die Variable, den Start abbrechen (`if (!process.env.JWT_SECRET) throw new Error("JWT_SECRET fehlt")`). Den bisher eingebauten Wert als kompromittiert behandeln und rotieren.
Prüfstufe
- Quellcode aus Source Maps
- Repo-Zugang (Deep-Scan)
So behebt ihr es
Keinen Ersatzwert setzen: fehlt die Variable, den Start mit einem Fehler abbrechen — und den bisher eingebauten Wert als kompromittiert rotieren.