Zusammenfassung

  • Forwarded und X-Forwarded-For übermitteln Aussagen über einen Weiterleitungspfad, keine authentisierte Clientidentität. Ausgangspunkt ist der lokal beobachtete Transport-Peer; ältere Adressen benötigen eine ausdrückliche Delegation.
  • Beweiskräftige Spuren erhalten ursprüngliche Feldzeilen und Reihenfolge, Parser, Vertrauensregel, erste nicht vertrauenswürdige Grenze und die nachgelagerte Entscheidung.

Korrekt gelesen, falsch geglaubt

Die Feststellung „Header lassen sich fälschen“ bleibt zu oberflächlich. Ein HTTP-Header ist Eingabe. Der eigentliche Kontrollverlust entsteht, wenn das System diese Eingabe zu einer eigenen Beobachtung über die Verbindung erklärt.

Eine engere Beobachtung liefert der Socket: die Adresse des unmittelbaren Peers. Dieser Peer kann ein Load-Balancer statt des Endnutzers sein. Trotzdem bildet er den lokal festgestellten Anker, von dem aus delegierte Aussagen geprüft werden können.

Ist der Peer nicht dazu berechtigt, Weiterleitungsmetadaten vorzulegen, endet die Kette. Dann kann der Peer selbst verwendet oder der unerlaubte Direktpfad abgewiesen werden. Den linken Listenwert trotzdem auszuwählen, erlaubt dem Anfragenden, seine Herkunft selbst zu bestimmen.

Die bewusste Grenze von RFC 7239

RFC 7239 beschreibt Forwarded als optionales Feld für Informationen, die ein Proxy verändert oder verdeckt. for, by, host und proto betreffen unterschiedliche Beobachtungen eines Hops. Ihre Verbindung ist hilfreich, aber kein Identitätsnachweis.

Der Standard warnt ausdrücklich, dass das Feld nicht als richtig vorausgesetzt werden kann. Jeder Knoten, einschließlich des Clients, kann es irrtümlich oder böswillig verändern. Geprüfte Proxys zuzulassen, begründet Vertrauen in deren eigene Beobachtung. Es beglaubigt keinen beliebigen Präfix, der bereits vorlag, und schützt keine ungesicherte Verbindung danach.

Auch unknown und verschleierte Kennungen sind gültige Zustände. Sie dürfen nicht in eine scheinbar numerische Adresse gezwungen werden. Fehlend, unbekannt, verschleiert, ungültig und normalisiert müssen getrennt bleiben.

XFF ist ein anderer Vertrag

X-Forwarded-For ist verbreitet, aber nicht das durch RFC 7239 definierte Feld. AWS ALB zeigt drei mögliche Regeln: append, preserve und remove. Bei append bleibt die eingehende Liste erhalten; die vom Load-Balancer beobachtete Adresse wird rechts angefügt. Seine Teilnahme bestätigt damit nicht die Werte links davon.

HAProxy dokumentiert die XFF-Einfügung und die Erzeugung des standardisierten Feldes getrennt. Der Empfänger muss daher Feldname, Position, Bereinigung und Lesealgorithmus kennen. „Immer den ersten“ oder „immer den letzten“ auszuwählen, ist ohne Sendervertrag keine Vertrauensregel.

Am beobachtbaren Ende beginnen

NGINX bestimmt mit set_real_ip_from, welche Absender korrekte Ersatzwerte liefern dürfen. Bei real_ip_recursive on wird nach Durchlaufen des vertrauenswürdigen Teils die letzte nicht vertrauenswürdige Adresse gewählt; $realip_remote_addr bewahrt den ursprünglichen Peer.

Apache mod_remoteip verarbeitet von rechts nach links und warnt, dass uneingeschränkte Zwischenstellen triviale Adressimpersonation ermöglichen. Envoy zählt vertrauenswürdige Hops ebenfalls von rechts, wobei use_remote_address die genaue Auswahl verändert; alternativ kann eine CIDR-Regel verwendet werden.

Es gibt deshalb keine topologiefreie Funktion „echte IP ermitteln“. Ein zusätzlicher CDN-Pfad, ein entfernter Proxy oder eine Direktverbindung verändert die Position der ersten nicht autorisierten Aussage.

Doppelte Zeilen als Konsistenzprüfung

RFC 9110 erlaubt, wiederholte Zeilen listenfähiger Felder in Empfangsreihenfolge mit Kommas zu verbinden. Ein Proxy kann mehrere Rohzeilen sehen, eine Bibliothek eine Zeichenkette und das Framework ein Array. Absichtlich wiederholte Felder zeigen, ob Filter, Anwendung und Auditprotokoll dieselbe Ordnung auswerten.

IPv6 bricht naive Doppelpunkt-Trennung. Port, Klammern und Anführungszeichen schaffen weitere Grenzen. Tests brauchen IPv6 mit Port, IPv4 mit Port, unknown, verschleierte Knoten, Leerraum und fehlerhafte Trennzeichen.

Normalisierung beantwortet, welcher Wert gelesen wurde. Vertrauen beantwortet, warum der Sender ihn liefern durfte. Beides ist getrennt aufzuzeichnen.

host und proto sind keine Beglaubigung

Nach TLS-Terminierung können weitergeleiteter Host und Scheme für Redirects, absolute URLs oder Secure-Cookies nötig sein. Ein clientseitiges proto=https beweist jedoch keine TLS-Beobachtung am vertrauenswürdigen Rand. Ein weitergeleiteter Host authentisiert keinen Origin.

Jeder Parameter braucht eine eigene Quelle und Verwendung. Die Adresse kann vom Edge stammen, während der öffentliche Host aus einer festen Routingtabelle kommt. Vertrauen in einen Parameter darf nicht unbemerkt das gesamte Feld erfassen.

PROXY Protocol gehört in ein anderes Beweisbuch

PROXY Protocol übermittelt Quell- und Zielinformationen vor HTTP. Die frühere Position macht den Inhalt nicht authentisch. Der Empfänger muss den Vorspann auf einem dedizierten oder streng gefilterten Listener erwarten und nur berechtigte Sender akzeptieren. Sonst kann jeder Client eine beliebige Quelle voranstellen.

Tatsächlicher Peer, Erwartung und Annahme des Vorspanns, behauptete Adresse und spätere HTTP-Felder bleiben getrennte Beobachtungen. Eine einzige überschriebene Variable client_ip vernichtet ihre Herkunft.

Negative Pfade definieren die laufende Regel

Zuerst wird der Origin außerhalb des Edge direkt angesprochen. Wenn das Modell diesen Pfad verbietet, muss die Verbindung vor HTTP scheitern. Danach wird von einem unberechtigten Peer eine freigegebene XFF-Adresse gesendet und ihre Ablehnung geprüft.

Über den legitimen Edge folgen ein gefälschter Präfix, ein eingeschobener nicht vertrauenswürdiger Proxy sowie ein zusätzlicher und ein fehlender Hop. Doppelte Zeilen und schwierige IPv6-Formen prüfen Parsergleichheit. Edge, Origin, Framework, Rate-Limiter, Autorisierung und Logs müssen denselben Wert aus demselben Grund erhalten. Ein PROXY-Vorspann aus fremder Quelle ist zurückzuweisen.

Konfigurationstext belegt Absicht. Diese feindlichen Abweichungen belegen das ausgeführte Verhalten.