Zurückgelassener Debug-Code
Das Tor war der Fehler. Ein Tippfehler ließ die Debug-Route offen.
Was ist Zurückgelassener Debug-Code?
Der Fehler liegt hier nicht in der Funktion, sondern im Schalter, der sie ausschalten soll. Eine Debug-Route schützt sich selbst mit einer falsch geschriebenen Umgebungsvariablen, der Vergleich wird zu undefined !== 'production' und die Route antwortet in der Produktion. Sie durchsuchen Debugpfade, bis /api/_debug/env das Datenbankkennwort, das JWT-Signaturgeheimnis und Live-Cloud-Schlüssel zurückgibt, und fälschen dann ein Admin-Token mit diesem Geheimnis. Der Fix rotiert alle durchgesickerten Anmeldeinformationen und schließt die Route zur Erstellungszeit aus dem Produktionspaket aus.
Was Sie lernen in Zurückgelassener Debug-Code
- Die Offenlegung einer Debug-Route als Fehlerbild einer Sicherheits-Fehlkonfiguration erkennen: Die Prüfung ist der Fehler, nicht die Logik, die sie schützt
- Verstehen, dass Umgebungsvariablen-Prüfungen zur Laufzeit bei Tippfehlern stillschweigend fehlschlagen (<code>process.env.UNDEFINED</code> gibt undefined zurück, keinen Fehler), sodass positive Allowlists mit expliziter Gleichheit sicherer sind als negative Denylists
- Den unmittelbaren Fix anwenden (alle offengelegten Zugangsdaten rotieren, die Prüfung mit dem richtigen Namen der Umgebungsvariable in eine explizite Allowlist umwandeln) sowie den systemischen Fix (Ausschluss zur Build-Zeit über DefinePlugin / esbuild --define / bedingtes require)
- Jeden Debug-, Status-, Health-, Metrics- und internen Admin-Endpunkt auf Antwortinhalte prüfen, die Secrets, interne IP-Adressen, Abhängigkeitsversionen oder Stack Traces enthalten
- Verinnerlichen: Routen, die in der Produktion nicht existieren sollten, müssen im Produktions-Bundle fehlen, statt vorhanden, aber abgesichert zu sein
Zurückgelassener Debug-Code — Trainingsschritte
-
Das Ziel einschätzen
Bob ist ein Angreifer. Er verdient sein Geld damit, Daten aus Unternehmen abzuziehen, die etwas offengelegt haben, und diese dann zu verkaufen oder damit an ihr Geld zu gelangen. Heute ist sein Ziel Vessura, eine Beschaffungsplattform, die andere Unternehmen nutzen. Er beginnt wie jeder andere auf der öffentlichen Website und schätzt das Unternehmen ein, bevor er nach einem Einstieg sucht.
-
Offengelegte Bereiche erfassen
Auf der öffentlichen Website ist nichts ungewöhnlich: ein Login, ein Lieferantenverzeichnis, eine Support-Seite. Anwendungen enthalten aber mehr als nur ihre Eingangstür. In einem Build verbliebene Entwickler-Hilfskonstrukte bleiben für jeden erreichbar, der danach sucht. Deshalb erfasst Bob jeden Pfad, auf den die API des Portals tatsächlich antwortet.
-
Die Debug-Route aufrufen
Bob rekonstruiert die Anfrage, die der Scan markiert hat. Er richtet den API-Tester auf den Debug-Pfad und sendet ein einfaches GET – ohne Login und ohne Token –, um zu sehen, was zurückkommt.
-
Alle Secrets auf einmal
Die Antwort ist keine Fehlerseite. Sie enthält die gesamte Prozessumgebung eines Produktionsservers und wird einer Anfrage ohne Login übergeben.
-
Ein Admin-Token fälschen
Der Dump lieferte Bob das JWT_SECRET , den Schlüssel, mit dem die Anwendung jedes Session-Token signiert. Im selben Terminal erstellt er sein eigenes Token, setzt die Rolle auf admin, und der Server akzeptiert es als echten Login.
-
Als Admin anmelden
Jetzt verwendet Bob das Token. Er ruft die interne Lieferanten-API auf, einen nur für angemeldete Admins bestimmten Endpunkt, und übermittelt das gefälschte Token in einem Authorization -Header, damit der Server ihn als Admin behandelt. Im linken Terminal befindet sich noch das Token, das er gerade erstellt hat.
-
Das Lieferantenverzeichnis ist offen
Der Server vertraute dem Token und antwortete. Bob liest nun über eine öffentliche API das interne Lieferantenverzeichnis – ohne eigenes Konto.
-
Wissenscheck
Sie haben gerade gesehen, wie ein einziger zurückgelassener Pfad alle Secrets und anschließend eine Admin-Sitzung preisgab. Prägen Sie sich ein, warum.
-
Die DLP-Warnung geht ein
Sie verantworten das Beschaffungsportal von Vessura. Über Nacht schlug die Überwachung ausgehender Datenverluste bei einer Antwort an, die aktive Secrets vom Server nach außen übermittelte. Security Operations hat Ihnen die Details per E-Mail geschickt.
-
Den Handler öffnen
Öffnen Sie den Debug-Handler und sehen Sie sich an, wie er entscheidet, ob er antwortet.
Abdeckung der Sicherheits-Frameworks
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