Integer-Overflow-Schwachstelle in FastCGI (CVE-2025-23016)

FastCGI ist ein wichtiges Protokoll, das die Leistung von Webservern verbessert, indem es persistente Verbindungen zwischen Webservern und Anwendungsservern aufrechterhält. Es wird häufig in eingebetteten Systemen mit begrenzten Rechenressourcen eingesetzt, wie z. B. Netzwerkkameras, Routern und IoT-Geräten. Aufgrund seiner schlanken Natur wird FastCGI oft in Umgebungen implementiert, in denen die Ressourcen für Sicherheit begrenzt sind, was Schwachstellen besonders besorgniserregend macht.

Diese Schwachstelle betrifft die in C geschriebene FastCGI-Kernbibliothek, nicht PHP-FPM (das seine eigene Version des FCGI-Protokolls implementiert). Viele IoT-Geräte und eingebettete Systeme verwenden die anfällige Bibliothek, wodurch zahlreiche Geräte gefährdet sind, wenn sie nicht ordnungsgemäß aktualisiert werden.

ProduktFastCGI
Datum2025-05-07 14:18:55
Informationen
  • Fix verfügbar
  • Aktive Ausnutzung

Technische Zusammenfassung

Die Schwachstelle befindet sich in der Funktion ReadParams der FastCGI-Bibliothek. Diese Funktion verarbeitet die von Webservern empfangenen Parameter und analysiert die Längen von Name und Wert, bevor sie Speicher für diese zuweist.

Die Schwachstellenkette funktioniert wie folgt:

  1. Die Funktion ReadParams liest die Länge des Parameternamens und des Wertes aus dem Eingabestrom.
  2. Wenn eines der beiden Längenfelder das höchste Bit gesetzt hat (≥ 0x80), wird es als 32-Bit-Integer verarbeitet.
  3. Anschließend wird Speicher mit malloc(nameLen + valueLen + 2) zugewiesen, um beide Zeichenfolgen, ein Gleichheitszeichen und das Null-Terminierungszeichen zu speichern.
  4. Auf 32-Bit-Systemen führt die Summe plus 2 zu einem Integer-Überlauf, wenn sowohl nameLen als auch valueLen nahe am Maximalwert (0x7FFFFFFF) liegen.
  5. Dies führt zu einer sehr kleinen Speicherzuweisung (typischerweise 0x10 Bytes) anstelle der benötigten Gigabytes.
  6. Die Funktion versucht dann, den gesamten Parameternamen und -wert in diesen zu kleinen Puffer zu lesen.
  7. Dies erzeugt einen Heap-Buffer-Overflow, der von einem Angreifer kontrolliert werden kann.

Der kritischste Aspekt ist, dass dieser Überlauf das Überschreiben benachbarter Strukturen im Heap ermöglicht, insbesondere der FCGX_Stream-Struktur, die Funktionszeiger enthält. Durch das Überschreiben des Zeigers auf die Funktion fillBuffProc mit der Adresse von system() und die Kontrolle des ersten Parameters (der Stream selbst, der Shell-Befehle enthalten kann), wird eine Remote-Code-Ausführung erreicht.

Die Schwachstelle betrifft alle Versionen der FastCGI-Bibliothek vor 2.4.5.

Angriffsvektor

Der Angriff erfordert:

  1. Direkten Zugriff auf einen FastCGI-Socket.
  2. Die Fähigkeit, präparierte FastCGI-Parameter mit spezifischen Größen zu senden.

Obwohl FastCGI-Sockets nur lokal zugänglich sein sollten, legen viele Implementierungen diese Sockets fälschlicherweise für Remote-Verbindungen offen. Dies gilt insbesondere für einige eingebettete Systeme und falsch konfigurierte Webserver, wie das im Bericht erwähnte Beispiel mit lighttpd, bei dem viele Tutorials unsichere Konfigurationen vorschlagen.

Empfehlungen

Um diese Schwachstelle zu entschärfen, sind folgende Schritte erforderlich:

  1. FastCGI-Bibliothek aktualisieren: Aktualisieren Sie auf Version 2.4.5 oder höher, die Korrekturen für diese Schwachstelle enthält.

  2. Webserver sicher konfigurieren:

    • Verwenden Sie nach Möglichkeit UNIX-Sockets anstelle von TCP-Sockets.
    • Wenn TCP-Sockets erforderlich sind, beschränken Sie den Zugriff auf localhost.
    • Implementieren Sie eine ordnungsgemäße Netzwerksegmentierung, um den direkten Zugriff auf FastCGI-Dienste zu verhindern.
  3. Defense-in-Depth-Maßnahmen implementieren:

    • Aktivieren Sie alle verfügbaren Systemsicherheitsmechanismen (ASLR, PIE, RELRO, etc.).
    • Führen Sie FastCGI-Anwendungen mit minimalen Privilegien aus.
    • Erwägen Sie den Einsatz von Anwendungswall-Firewalls, um bösartige Anfragen zu filtern.
  4. Bestehende Implementierungen überprüfen:

    • Prüfen Sie auf im Netzwerk exponierte FastCGI-Sockets.
    • Stellen Sie sicher, dass Webserver-Konfigurationen keine Optionen wie check-local => "disable" ohne angemessene Sicherheitskontrollen enthalten.
    • Überprüfen Sie Dokumentationen und Tutorials, um sicherzustellen, dass Bereitstellungspraktiken sicher sind.

[Callforaction-THREAT-Footer]

Leave a Reply

Your email address will not be published. Required fields are marked *