Ungepatcher Buffer-Overflow in allen PHP Versionen < 26.3.2022

Ihr nutzt PHP, Eurer Code nutzt die Funktion filter_var() und das Builddate liegt vor dem 26.3.2022(macht lieber 27. draus)? Na dann sind Glückwünsche angebracht: Ihr habt eine 0Day-Lücke in Eurem System!

Ungepatcher Buffer-Overflow in allen PHP Versionen < 26.3.2022

Ganz im stillen haben die Entwickler von PHP eine Sicherheitslücke gefixt, die derzeit noch in jeder PHP Version steckt, die vor dem 26.3.2022 kompiliert wurde. Gemacht haben Sie das nur, weil jemand auf der Mailingliste Full-Disclosure einen Post gebracht hat, in dem er/sie sich über den Mangel an Aufmerksamkeit vom PHP_Security-Team beschwerte. Ich finde die Beschwerde geht ok, weil der Fehler im Code einen Buffer-Overflow ermöglicht.

static int _php_filter_validate_domain(char * domain, int len, zend_long flags) /* {{{ */
+static int _php_filter_validate_domain(char * domain, size_t len, zend_long flags) /* {{{ */

Es handelt sich hier um den Klassiker schlecht hin: Signed Integer <=> unsigned Long . Bei Exim war das letztes Jahr ein großes Ding, weil ein Codeaudit u.a. so einen Fehler im Code entdeckt hatte.

Prikär an der Lage ist, daß der Patch zwar im Github ist, aber keine PHP Updates released wurden, ganz im Gegensatz zur Info, daß da ein Buffer-Overflow im Code ist und wie man den benutzt aka sich einen Exploit baut. Ich habe da mal dem Fedora Maintainer einen Hinweis gemailt, mal gucken ob da was geht.

Wer seine PHP Version auf Commitbasis versioniert, den hier müßte Ihr drin haben, sonst wechselt der Appstatus bei Benutzung von filter_var() +extern eingelieferten Parametern von meine auf owned :

https://github.com/php/php-src/commit/771dbdb319fa7f90584f6b2cc2c54ccff570492d

Aus der POC-Exploit Seite:

// filter bypass
var_dump(filter_var(„5;id;“ . str_repeat(„a“, 4294967286) . „a.com“, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME));

// DoS/Memory corruption
var_dump(filter_var(str_repeat(„a“, 2294967286), FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME));

Ich wette, da hat schon wer nen Exploit in Umlauf gebracht, wenn da so leicht ist.

An der Stelle möchte ich mich gleich noch mal Rene Collét für seine langjährige, ausdauernde Arbeit in Sachen PHP für Linux bedanken. Dem Mann können die Linux-PHP-Anwender gar nicht genug danken! Ihr macht Euch keine Vorstellung davon was der für alle leistet!

Hinweis: mit „Alle Versionen“ sind hier gemeint: PHP 5 >= 5.2.0, PHP 7, PHP 8, PHP 8.1

UPDATE:

Aus dem Umfeld(Autor bekannt) der PHP Security Liste kam dazu folgende Info:

„Wir haben das nicht als Sicherheitslücke klassifiziert, weil man das mit einem (ungenannten) MemoryLimit blockieren kann.“

Und, „es wurde nur in 8.0+ gefixt, nicht in 7.4“ 🙂  Aber, sagen können die ja viel, ausprobieren hilft:

[Wed Mar 30 22:10:37.167712 2022] [cgid:error] [pid 587854:tid 587945] [client x.x.x.x:41412] AH01215: stderr from /etc/httpd/bin/cgiwrap64: PHP Fatal error: Allowed memory size of 536.870.912 bytes exhausted (tried to allocate 4.294.967.318 bytes) in /home/linux-am-dienstagde/public_html/php7.4.x-exploit.php on line 3

Erklärung: „4G“ will er, „512M“ sind in der Master php.ini als Limit drin und unsere Prozessüberwachung mußten wir auch noch überreden damit, noch mal etwas mehr RAM drauf geworfen werden konnte:

[Wed Mar 30 22:17:20.266256 2022] [cgid:error] [pid 1060712:tid 1060735] [client x.x.x.x:41464] AH01215: stderr from /etc/httpd/bin/cgiwrap64: PHP Fatal error: Allowed memory size of 2.122.317.824 bytes exhausted (tried to allocate 4.294.967.318 bytes) in /home/linux-am-dienstagde/public_html/php7.4.x-exploit.php on line 5

Ist eher unwahrscheinlich, daß man bei einem Hoster über 4 GB allokieren darf, pro Script. Ich halt es aber nicht gänzlich für ausgeschlossen 😉

Die Sicherheitslücke ist dann also eher theoretischer Natur.

HTTPd < 2.4.53 von kritischer Lücke betroffen

httpd mit neuer Sicherheitslücke / 9.8 auf der bis 10 gehenden CVE Skala.

HTTPd < 2.4.53 von kritischer Lücke betroffen

Der Apache hat dies Jahr schon die dritte Sicherheitslücke gefixt, aber nicht bei allen ist das Update angekommen. Benutzer von Fedora 34 hatten da jetzt leider doppelt Pech, da das 2.4.53 Update im Test stecken geblieben ist und sich leider niemand die Mühe gemacht hatte, es obwohl es funktional ok ist, ins Stable Repo zu pushen.

Die Lücke CVE-2022-22720 selbst ist mit 9.8/10 bewertet worden, also extrem kritisch:

* httpd: Errors encountered during the discarding of request body lead to HTTP request smuggling (CVE-2022-22720)

Wer seinen httpd für Fedora 34 updaten will, muß dies hier angeben:

dnf update -y –enablerepo=updates-testing httpd

(Hinweis: WP wandelt doppelte Bindestriche gern in einen anderen einfachen Bindestrich um)

 

„Entschuldigung für die vielen Security Fixe“

Aus der Schmunzelecke von Fedora … könnte man meinen …

Update Chromium to 99.0.4844.51. Fixes, well, a LOT of security bugs. Sorry
about that.  CVE-2021-22570 CVE-2022-0096 CVE-2022-0097 CVE-2022-0098
CVE-2022-0099 CVE-2022-0100 CVE-2022-0101 CVE-2022-0102 CVE-2022-0103
CVE-2022-0104 CVE-2022-0105 CVE-2022-0106 CVE-2022-0107 CVE-2022-0108
CVE-2022-0109 CVE-2022-0110 CVE-2022-0111 CVE-2022-0112 CVE-2022-0113
CVE-2022-0114 CVE-2022-0115 CVE-2022-0116 CVE-2022-0117 CVE-2022-0118
CVE-2022-0120 CVE-2022-0789 CVE-2022-0790 CVE-2022-0791 CVE-2022-0792
CVE-2022-0793 CVE-2022-0794 CVE-2022-0795 CVE-2022-0796 CVE-2022-0797
CVE-2022-0798 CVE-2022-0799 CVE-2022-0800 CVE-2022-0801 CVE-2022-0802
CVE-2022-0803 CVE-2022-0804 CVE-2022-0805 CVE-2022-0806 CVE-2022-0807
CVE-2022-0808 CVE-2022-0809

… ist es aber nicht 🙁

„Entschuldigung für die vielen Security Fixe“

Der Hintergrund ist, daß vor einigen Tagen festgestellt wurde, daß Chromium bei Securityfixen weit hinten lag bei Fedora, weil wichtige Security-Fixe nicht durch Updates verteilt wurden. Der Maintainer war leider nicht so aktiv, wie es das Projekt erfordert.

Das wurde nun offensichtlich von Tom nachgeholt, der in der Vergangenheit eigentlich als sehr aktiver Maintainer aufgefallen war. Man weiß nicht, was dazu führte und spekulieren will ich da auch nicht.

Ich fordere analog zum Sysadmin-Tag noch den Maintainer-Tag einzuführen. Wer nicht so lange warten will, kann seinen Lieblingsmaintainern ja auch einfach mal ein dickes „Thank You“ per Email schicken, was deutlich zur Langzeitmotivation der Menschen beiträgt, die für uns die Arbeit machen!

Und so kommt man die Mailadressen ran

Unter Fedora ist das relativ einfach: Entweder Ihr abonniert die Package-Announce Mailingliste „package-announce@lists.fedoraproject.org“ oder Ihr schaut ins Changelog des Pakets auf Eurem PC rein:

# rpm -qi –changelog httpd | grep „@“ | head -n 1
* Do Okt 07 2021 Patrick Uiterwijk <patrick@puiterwijk.org> – 2.4.51-1

Ich glaube, den muß ich auch mal motivieren 😀