Overgebleven foutopsporingscode
De poort was de bug. Eén typefout liet de foutopsporingsroute open.
Wat is Overgebleven foutopsporingscode?
De fout zit hier niet in de functie, maar in de schakelaar die bedoeld is om deze uit te schakelen. Een debug-route beschermt zichzelf met een verkeerd gespelde omgevingsvariabele, de vergelijking wordt undefined !== 'production' en de route antwoordt in productie. Je doorzoekt de foutopsporingspaden totdat /api/_debug/env het databasewachtwoord, het JWT-ondertekeningsgeheim en live cloudsleutels retourneert, en vervolgens een admin-token met dat geheim vervalst. De oplossing roteert elke gelekte inloggegevens en sluit de route uit de productiebundel tijdens de bouwtijd.
Wat je leert in Overgebleven foutopsporingscode
- Herken de blootstelling aan debug-routes als een foutieve beveiligingsconfiguratie; de poort is de bug, niet de logica die de poort beschermt
- Begrijp dat runtime env-var-poorten stilletjes falen bij typefouten (<code>process.env.UNDEFINED</code> retourneert ongedefinieerd, geen fout), dus positieve acceptatielijsten met expliciete gelijkheid zijn veiliger dan negatieve weigeringslijsten
- Pas de onmiddellijke oplossing toe (roteer elke gelekte inloggegevens, draai de poort om naar een expliciete toelatingslijst met de juiste env-var-naam) en de systemische oplossing (uitsluiting tijdens het bouwen via DefinePlugin / esbuild --define / conditional require)
- Controleer elk debug-, status-, status-, statistische en beheerdersinterne eindpunt op responsinhoud die geheimen, interne IP-adressen, afhankelijkheidsversies of stacktraces bevat
- Internaliseren: routes die niet zouden mogen bestaan in de productie moeten afwezig zijn in de productiebundel, niet aanwezig, maar afgesloten
Overgebleven foutopsporingscode — Trainingsstappen
-
Maak het doel groter
Bob is een kwaadwillende acteur. Hij verdient zijn geld door gegevens te verzamelen van bedrijven die iets bloot hebben achtergelaten, en deze vervolgens te verkopen of te gebruiken om aan hun geld te komen. Tegenwoordig is zijn doelwit Vessura, een inkoopplatform waar andere bedrijven op draaien. Hij begint waar iedereen dat zou doen, op de openbare site, en neemt het bedrijf in kaart voordat hij een manier zoekt om binnen te komen.
-
Breng in kaart wat zichtbaar is
Niets op de openbare site is ongebruikelijk: een login, een leverancierslijst, een ondersteuningspagina. Maar apps worden geleverd met meer dan alleen hun voordeur. De ontwikkelaarssteigers die in een build zijn achtergebleven, blijven bereikbaar voor iedereen die op zoek gaat, dus brengt Bob elk pad in kaart dat de API van de portal daadwerkelijk beantwoordt.
-
Ga naar de debug-route
Bob herbouwt het verzoek dat door de scan is gemarkeerd. Hij wijst de API-tester op het debug-pad en stuurt een gewone GET, zonder login en zonder token, om te zien wat hij teruggeeft.
-
Elk geheim tegelijk
Het antwoord is geen foutpagina. Het is de gehele procesomgeving van een productieserver, overhandigd aan een verzoek zonder login.
-
Een beheerdertoken vervalsen
De dump overhandigde Bob de JWT_SECRET , de sleutel die de app gebruikt om elk sessietoken te ondertekenen. Terug in dezelfde terminal munt hij zijn eigen token, stempelt de rol als admin en de server accepteert het als een echte login.
-
Loop binnen als beheerder
Nu gebruikt Bob het token. Hij roept de API van de interne leverancier aan, een pagina die alleen bedoeld is voor ingelogde beheerders, en draagt het vervalste token in een Authorization -header, zodat de server hem als één token behandelt. De terminal aan de linkerkant bevat nog steeds het token dat hij zojuist heeft geslagen.
-
Het grootboek is geopend
De server vertrouwde het token en antwoordde. Bob leest nu het interne leveranciersgrootboek via een openbare API, zonder dat hij zelf een account heeft.
-
Kennis check
Je hebt zojuist gezien hoe een enkel overgebleven pad elk geheim overhandigde en vervolgens een beheerderssessie. Leg vast waarom.
-
De DLP-waarschuwing komt binnen
U bent eigenaar van het inkoopportaal van Vessura. Van de ene op de andere dag werd de monitoring van uitgaand gegevensverlies geactiveerd vanwege een reactie die live geheimen van de server bracht. Security Operations heeft u de details per e-mail gestuurd.
-
Open de handler
Open de foutopsporingshandler en kijk hoe deze beslist of er moet worden geantwoord.
Dekking van beveiligingsframeworks
OWASP Top 10
- A02:2025 Security Misconfiguration
- A05:2021 Security Misconfiguration
CWE
- CWE-489 Active Debug Code
- CWE-215 Insertion of Sensitive Information Into Debugging Code
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security