Hooks

Hook network: URLs auf SSRF bewerten

Bewerte das SSRF-Risiko eines oder mehrerer Anfrageziele, direkt über die Kommandozeile.

Der Hook network entscheidet, ob das Ziel einer serverseitigen Anfrage vor SSRF sicher ist (einer Anfrage, die sich auf interne Dienste, Cloud-Metadaten oder private Hosts richten lässt). Er ist die deterministische Engine hinter der Spezialisierung network, und du kannst ihn selbst ausführen.

Ausführen​

Übergib jedes Ziel mit --url. Der Hook gibt pro Ziel ein Wort aus, dessen Bedeutung die Tabelle weiter unten erklärt.

npx lagune read network --url 'http://example.com/'
# => safe

npx lagune read network --url 'http://0x7f000001/'
# => private-target

Er löst den Host so auf, wie es das Netzwerk tut, deshalb rutschen codierte Formen einer internen Adresse nicht durch: Hexadezimale, oktale, punktlose dezimale, verkürzte, IPv6- und IPv4-gemappte Schreibweisen ergeben alle private-target. Und wo ein nachlässiger Validator und der Client, der die Anfrage tatsächlich ausführt, unterschiedliche Hosts lesen würden, lautet das Urteil parser-divergent.

So liest du das Urteil​

UrteilBedeutung
safeDas Ziel führt zu einem öffentlichen Host, und ein nachlässiger Validator würde denselben Host lesen.
private-targetDer Host löst zu einer privaten, Loopback-, Link-Local-, unspezifizierten oder Cloud-Metadaten-Adresse auf.
parser-divergentEin nachlässiger Textvalidator würde einen anderen realen Host lesen als den, mit dem sich der Client verbindet.
invalid urlDie Zeichenkette lässt sich nicht als URL parsen, also gibt es nichts abzurufen.

Nur safe bedeutet Zulassen. Behandle private-target, parser-divergent und invalid url alle als Sperre.

CLI-Optionen​

OptionWertBeschreibung
--urleine URL oder ein HostPrüft ein Ziel. Wiederhole die Option, um mehrere zu prüfen, ein Urteil pro Zeile.

Mindestens ein --url ist Pflicht. Das Ziel ist nie ein bloßes Positionsargument, deshalb kann es nicht mit einer Option verwechselt werden.

Warum als Wert einer Option

Jedes Ziel wird als Wert einer Option übergeben und nie in den Befehl interpoliert. Ein Wert mit Anführungszeichen oder Backticks bleibt wirkungslos und kann nichts in die Shell einschleusen. Setze ihn immer in einfache Anführungszeichen, damit deine Shell ihn nicht vorher expandiert.

Was er nicht abdeckt

Der Hook ist rein und löst nie DNS auf, deshalb liegen zwei Lücken, die erst zur Laufzeit entstehen, außerhalb seines Umfangs: DNS-Rebinding (ein Name, der bei der Prüfung öffentlich und beim Abruf intern auflöst) und Weiterleitungsketten (ein erster Sprung, der die Prüfung besteht und dann nach innen weiterleitet). Schließe sie, indem du einmal auflöst und dich mit der validierten Adresse verbindest, und indem du Weiterleitungen ablehnst. Die reservierten Loopback-Namen (localhost und die Familie .localhost) stuft er ohne Abfrage als intern ein, aber jeder andere DNS-Name ergibt safe, denn die Behauptung, er löse nach innen auf, würde eine Auflösung erfordern: Diese Namen schützt die Allowlist, und genau sie prüft dieser Checker.

tipp

Das ist dieselbe Prüfung, die die Spezialisierung network ausführt, um nachzuweisen, dass ein Zielfilter greift.

Häufige Fragen

Führe den Hook network aus. Er bewertet ein Anfrageziel und gibt safe, private-target, parser-divergent oder invalid url zurück. Nur safe bedeutet Zulassen.

Eine URL, die verschiedene Parser unterschiedlich lesen, was ein klassischer Weg ist, einen SSRF-Schutz zu umgehen. Der Hook network meldet sie, statt sie zuzulassen.