CVE-2022-31631: PDO::quote() in PDO_SQLite führt zu SQL Injection
Eine kritische Sicherheitslücke (CVE-2022-31631) in PHPs PDO_SQLite-Komponente wurde veröffentlicht. In betroffenen PHP-Versionen (8.0.x vor 8.0.27, 8.1.x vor 8.1.15 und 8.2.x vor 8.2.2) kann die Funktion PDO::quote() bei der Verarbeitung von benutzerdefinierten, überlangen Strings einen unzureichend zitierten String zurückliefern – konkret lediglich ein einzelnes Apostroph.
Der Fehler entsteht durch einen nicht abgefangenen Integer-Overflow in der Funktion sqlite3_snprintf(), bei der ein unverhältnismäßig großer Längenwert (zend_long) an eine int-Variable übergeben wird. Insbesondere auf 64-Bit-Systemen führt dies zu einem Überlauf, der den Sicherheitsmechanismus unterläuft und somit potenziell zu SQL-Injection-Angriffen führen kann.
Ein beispielhafter Testscript demonstriert den Fehler:
<?php
$pdo = new PDO("sqlite::memory:");
$string = str_repeat("a", 0x80000000);
var_dump($pdo->quote($string));
?>
Während hier ein ordnungsgemäß quotierter String oder ein Fehler erwartet wird, liefert die Funktion lediglich ein einzelnes Apostroph zurück.
Nutzer und Administratoren sollten dringend auf neuere PHP-Versionen aktualisieren, um diese kritische Schwachstelle auszuschließen.