PHP: CVE-2024-8929 – Heap-Datenleck durch Buffer Over-Read in Mysqlnd
Table of Contents
Am 26. November 2024 wurde die Schwachstelle CVE-2024-8929 veröffentlicht, die sich auf das mysqlnd (MySQL Native Driver) in PHP bezieht. Die Schwachstelle ermöglicht es Angreifern, Speicherinhalte (Heap-Daten) durch eine fehlerhafte Verarbeitung von MySQL-Paketen zu lesen. Die Sicherheitslücke wird als hoch (Severity: High) eingestuft. Die Versionen < 8.1.31, < 8.2.26 und <8.3.14 sind betroffen.
Die Schwachstelle tritt in der Funktion php_mysqlnd_rset_field_read auf, die MySQL-Datenpakete verarbeitet. Bei fehlerhaften oder manipulierten Paketen kann der MySQL-Native-Treiber (mysqlnd):
- Daten aus dem Speicher (Heap) auslesen, die nicht zur aktuellen Anfrage gehören.
- Inhalte des vorherigen MySQL-Server-Antwortpakets preisgeben.
Ursache
- Heap Buffer Over-Read:
- Ein manipuliertes MySQL-Paket führt dazu, dass der Treiber Daten über die erwartete Paketlänge hinausliest.
- Dies geschieht durch das Umgehen der Sicherheitsprüfung
BAIL_IF_NO_MORE_DATA, da der Paketzeiger (p) nicht korrekt aktualisiert wird.
- PHP-FPM Speicherwiederverwendung:
- Da PHP-FPM zwischen HTTP-Anfragen läuft und Speicherressourcen recycelt, kann ein Angreifer Inhalte des vorherigen Speicherzustands extrahieren.
Mögliche Angriffe und Szenarien
- Hosting-Umgebungen:
- Ein Hosting-Anbieter bietet Dienste wie verwaltete Datenbanken oder Tools wie phpMyAdmin.
- Ein böswilliger Benutzer richtet einen manipulierten MySQL-Server ein.
- Andere Benutzer, die sich mit diesem Server verbinden, können sensible Daten aus vorherigen Anfragen preisgeben.
- Multi-User-Umgebungen:
- In einer Umgebung mit gemeinsam genutzten Ressourcen (z. B. PHP-FPM-Pools) könnte ein Angreifer Informationen über andere Benutzer erhalten.
- Datenlecks in Applikationen:
- Wenn Datenbankverbindungen nicht ausreichend geschützt sind, könnten Anwendungen versehentlich vertrauliche Informationen preisgeben.
Ein Angreifer kann:
- Einen manipulierten MySQL-Server erstellen.
- Ein PHP-Skript aufrufen, das sich mit diesem Server verbindet.
- Speziell manipulierte Pakete senden, um Speicherinhalte (z. B. Ergebnisse früherer SQL-Anfragen) zu extrahieren.
Empfohlene Maßnahmen
Konfiguration
- Nutzen Sie eine sichere PHP- und MySQL-Konfiguration, insbesondere in gemeinsam genutzten Hosting-Umgebungen.
- Isolieren Sie PHP-FPM-Pools für unterschiedliche Benutzer oder Anwendungen, um Speicherlecks zu verhindern.
Netzwerkschutz
- Filtern Sie eingehende MySQL-Verbindungen und erlauben Sie nur bekannte, vertrauenswürdige Datenbankserver.
Weitere Sicherheitsmaßnahmen
- Überprüfen Sie die Konfiguration von PHP-Datenbanktreibern und deaktivieren Sie unnötige Funktionen.
- Nutzen Sie TLS für die Kommunikation zwischen PHP und MySQL, um Manipulationen am Netzwerkverkehr zu verhindern.