Update zum Buffer-Overflow in PHP

Es ging hierrum:

Ungepatcher Buffer-Overflow in allen PHP Versionen < 26.3.2022

Update zum Buffer-Overflow in PHP

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.

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.

32 Sicherheitslücken in Chromium gefixt

Kleine Abschweifung in RHEL:

32 Sicherheitslücken in Chromium-Browser gefixt

Wie man einem Update aus dem RHEL Security Newsletter entnehmen kann, wurden im Chromiumbrowser 32 Sicherheitslücken in einem Rutsch gefixt. Da einige davon Pufferüberläufe waren, sollte man umgehend updaten, auch wenn man nicht bei RHEL ist, da hier typischerweise RCE Lücken schlummern können, sprich:  Jemand kann aus der Ferne Code ausführen. Das bedeutet nicht, daß es so ist, aber i.d.R.  ist das eine Grundvoraussetzung dafür.  Für drei habe ich die Bewertung mal rausgesucht, wer selbst mehr wissen will, kann die  CVE Nummer einfach bei Google eingeben und landet dann hier:

https://nvd.nist.gov/vuln/detail/CVE-2020-6513

Einfach die Nummer am Ende mit der gewünschten ersetzen und man bekommt auch diese Info.

Security Fix(es):

* chromium-browser: Heap buffer overflow in background fetch (CVE-2020-6510) (Score: 7.8 )
* chromium-browser: Side-channel information leakage in content security policy (CVE-2020-6511) (Score: 6.5)
* chromium-browser: Type Confusion in V8 (CVE-2020-6512)
* chromium-browser: Heap buffer overflow in PDFium (CVE-2020-6513) (Score: 8.8)
* chromium-browser: Inappropriate implementation in WebRTC (CVE-2020-6514)
* chromium-browser: Use after free in tab strip (CVE-2020-6515)
* chromium-browser: Policy bypass in CORS (CVE-2020-6516)
* chromium-browser: Heap buffer overflow in history (CVE-2020-6517)
* chromium-browser: Use after free in SCTP (CVE-2020-6532)
* chromium-browser: Type Confusion in V8 (CVE-2020-6537)
* chromium-browser: Inappropriate implementation in WebView (CVE-2020-6538)
* chromium-browser: Use after free in CSS (CVE-2020-6539)
* chromium-browser: Heap buffer overflow in Skia (CVE-2020-6540)
* chromium-browser: Use after free in WebUSB (CVE-2020-6541)
* chromium-browser: Use after free in developer tools (CVE-2020-6518)
* chromium-browser: Policy bypass in CSP (CVE-2020-6519)
* chromium-browser: Heap buffer overflow in Skia (CVE-2020-6520)
* chromium-browser: Side-channel information leakage in autofill (CVE-2020-6521)
* chromium-browser: Inappropriate implementation in external protocol handlers (CVE-2020-6522)
* chromium-browser: Out of bounds write in Skia (CVE-2020-6523)
* chromium-browser: Heap buffer overflow in WebAudio (CVE-2020-6524)
* chromium-browser: Heap buffer overflow in Skia (CVE-2020-6525)
* chromium-browser: Inappropriate implementation in iframe sandbox (CVE-2020-6526)
* chromium-browser: Insufficient policy enforcement in CSP (CVE-2020-6527)
* chromium-browser: Incorrect security UI in basic auth (CVE-2020-6528)
* chromium-browser: Inappropriate implementation in WebRTC (CVE-2020-6529)
* chromium-browser: Out of bounds memory access in developer tools (CVE-2020-6530)
* chromium-browser: Side-channel information leakage in scroll to text (CVE-2020-6531)
* chromium-browser: Type Confusion in V8 (CVE-2020-6533)
* chromium-browser: Heap buffer overflow in WebRTC (CVE-2020-6534)
* chromium-browser: Insufficient data validation in WebUI (CVE-2020-6535)
* chromium-browser: Incorrect security UI in PWAs (CVE-2020-6536)

Für Fedora steht dieses Update leider noch aus, da Chromium-Freeworld von RPMFusion kommt und „chromium“, was aus dem Fedora Repo kommt, vom Maintainer noch nicht gebaut wurde. Ich hab die mal beide angestupst, mal sehen was passiert 😉