Update nginx 1.31.0 zur Behebung einer RCE-Sicherheitsanfälligkeit, die über HTTP-Anfragen ausgenutzt wird

Die Hauptversion nginx 1.31.0 wurde veröffentlicht, im Rahmen derer die Entwicklung neuer Funktionen fortgesetzt wird, sowie die parallele Unterstützung der stabilen Version nginx 1.30.1, in die nur Änderungen zur Behebung schwerwiegender Fehler und Sicherheitsanfälligkeiten eingeflossen sind. In den Updates wurden 6 Sicherheitsanfälligkeiten behoben, wobei die gefährlichste die Ausführung von Code aus der Ferne durch das Senden einer speziell gestalteten HTTP-Anfrage erlaubt. Zum Zeitpunkt der Erstellung dieser Nachricht wurden keine Patches für angie und freenginx veröffentlicht.

Die Sicherheitsanfälligkeit (CVE-2026-42945), die als kritisch eingestuft wird, resultiert aus einem Pufferüberlauf im Modul ngx_http_rewrite_module, der ausgenutzt werden kann, um Code mit den Rechten des nginx-Prozesses durch das Senden einer HTTP-Anfrage mit einem speziell gestalteten URI auszuführen. Das Problem tritt in Konfigurationen mit der Direktive „rewrite“ auf, in der reguläre Ausdrücke mit Platzhaltern durch unbenannte Variablen (z.B. $1 und $2) verwendet werden, sofern in der Ersetzungszeichenfolge ein Symbol „?“ vorhanden ist. Beispiel für eine angreifbare Konstruktion: rewrite ^\/users\/([0-9]+)\/profile\/(.*)$ \/profile.php?id=$1&tab=$2 last;

Ausdrücke mit benannten Platzhaltern sind von der Sicherheitsanfälligkeit nicht betroffen. Zum Beispiel betrifft die Sicherheitsanfälligkeit nicht Konstruktionen: rewrite ^\/users\/(?[0-9]+)\/profile\/(?

.*)$ \/profile.php?id=$user_id&tab=$section last;

Die Sicherheitsanfälligkeit besteht seit Version 0.6.27, die im März 2008 veröffentlicht wurde. Der Grund für das Auftreten der Sicherheitsanfälligkeit war, dass der Puffer so dimensioniert wurde, dass unmaskierte Daten darin gespeichert werden, und tatsächlich maskierte Daten nach der Verarbeitung von Sonderzeichen kopiert wurden, deren Größe größer war, da jedes Zeichen „+“, „%“ und „&“ nicht als ein Byte, sondern als drei Bytes kodiert wurde. Diese Diskrepanz trat auf, weil bei der Verwendung des Zeichens „?“ in der Regel rewrite das Flag „e->is_args“ gesetzt wurde, wodurch die Maskierung aktiviert wurde, während der Puffer bei einem zurückgesetzten Flag dimensioniert wurde, bei dem die Maskierung nicht angewendet wurde.

Weitere Sicherheitsanfälligkeiten:

  • CVE-2026-42926 — die Möglichkeit der Datenersetzung durch den Angreifer in die proxierte Anfrage bei Verwendung der Direktive „proxy_set_body“ und der Kommunikation mit dem Backend über HTTP/2 (proxy_http_version=2).
  • CVE-2026-40701 — Zugriff auf Speicher nach dessen Freigabe (use-after-free) im Modul ngx_http_ssl_module, der bei der Verarbeitung von Antworten vom DNS-Server in Konfigurationen mit der Direktive „ssl_ocsp“ auftritt.
  • CVE-2026-42946 — Lesen aus einem Bereich außerhalb des Puffers in den Modulen ngx_http_uwsgi_module und ngx_http_scgi_module, das bei der Verarbeitung einer speziell formatierten Antwort auftritt. Das Problem kann zu einem Speicherinhalt-Leck im Arbeitsprozess oder zu einem Absturz führen.
  • CVE-2026-42934 — Lesen aus einem Bereich außerhalb des Puffers im Arbeitsprozess, das bei der Verarbeitung von Antworten mit Dekodierung aus der UTF-8-Codierung bei Verwendung der Direktive „charset_map“ auftritt. Das Problem kann zu einem Speicherinhalt-Leck im Arbeitsprozess oder zu einem Absturz führen.
  • CVE-2026-40460 — Schwachstelle in der Implementierung des HTTP/3-Protokolls, die Spoofing zulässt IP-Adressen zur Umgehung von Autorisierungen oder Einschränkungen.

Verbesserungen, die in der Veröffentlichung von nginx 1.31.0 hinzugefügt wurden:

  • Das Modul ngx_http_tunnel_module wurde hinzugefügt, das die Möglichkeit eines Proxy-Betriebs („forward proxy“) bereitstellt, das Anfragen an einen anderen Server bei den Anfragen des Clients mittels der HTTP/1.1-Methode CONNECT weiterleitet. Es ist möglich, die Authentifizierung des Proxy-Zugriffs mit den Direktiven „auth_basic“, „satisfy“ und „auth_delay“ zu konfigurieren.
  • Im Block „upstream“ wurde die Direktive „least_time“ hinzugefügt, die eine Lastverteilungsmethode mit der Übertragung von Anfragen zu einem Server mit der geringsten durchschnittlichen Antwortzeit und der geringsten Anzahl aktiver Verbindungen umfasst.
  • Im Modul „stream_proxy“ wurde die Direktive „proxy_ssl_alpn“ hinzugefügt, um die Liste der Protokolle festzulegen, die im ALPN-Erweiterung beim Verbinden mit dem proxierten Server zulässig sind. Beispielsweise: „proxy_ssl_alpn h2 http/1.1“.
  • Es wurde sichergestellt, dass Anfragen über die Protokolle HTTP/2 und HTTP/3, die die Header „Connection“, „Proxy-Connection“, „Keep-Alive“, „Transfer-Encoding“, „Upgrade“ enthalten, abgelehnt werden.
  • Im Modul ngx_http_dav_module wurde sichergestellt, dass COPY- und MOVE-Anfragen mit wiederholten Quell- und Zielressourcen oder verschachtelten Sammlungen abgelehnt werden.
  • Das Fehlermeldungsprotokollierungsniveau SSL „invalid alert“, „record layer failure“ und „SSL alert number N“ wurde von „crit“ auf „info“ gesenkt.
  • Im Skript configure wurde der Parameter „—without-http_upstream_sticky_module“ hinzugefügt, um den Bau des Moduls http_upstream_sticky_module zu deaktivieren (der Parameter „—without-http_upstream_sticky“ ist als veraltet gekennzeichnet).

Zusatz: Ein Exploit für die RCE-Schwachstelle im ngx_http_rewrite_module ist verfügbar.

Quelle: opennet.ru

60GB SSD 8Gb DDR4