W wersjach PHP 8.0, 8.1 i 8.2 funkcja PDO::quote() nieprawidłowo obsługuje zbyt długie ciągi znaków przy pracy z bazą SQLite, co może prowadzić do SQL injection. Podatność jest krytyczna, ponieważ nie wymaga uwierzytelnienia ani interakcji użytkownika.
▸ Pokaż oryginał (EN)
In PHP versions 8.0.* before 8.0.27, 8.1.* before 8.1.15, 8.2.* before 8.2.2 when using PDO::quote() function to quote user-supplied data for SQLite, supplying an overly long string may cause the driver to incorrectly quote the data, which may further lead to SQL injection vulnerabilities.
Funkcja PDO::quote() służy do bezpiecznego cytowania danych dostarczanych przez użytkownika przed ich przekazaniem do zapytania SQL. Gdy przekazany ciąg znaków jest zbyt długi, sterownik SQLite w PHP nieprawidłowo go cytuje, powodując wyjście danych poza oczekiwany kontekst. Skutkuje to możliwością wstrzyknięcia dowolnych instrukcji SQL (SQL injection) do zapytania wykonywanego w bazie SQLite.
Atakujący może odczytać lub zmodyfikować dane przechowywane w bazie SQLite, omijając mechanizmy ochrony oparte na PDO::quote(). W konsekwencji możliwe jest nieautoryzowane ujawnienie poufnych danych oraz manipulacja zawartością bazy danych.
Należy zaktualizować PHP do wersji 8.0.27 lub nowszej (gałąź 8.0), 8.1.15 lub nowszej (gałąź 8.1) albo 8.2.2 lub nowszej (gałąź 8.2). Jako obejście zaleca się stosowanie zapytań parametryzowanych (prepared statements) zamiast ręcznego cytowania danych przez PDO::quote().
PHP w wersjach 8.0.x przed 8.0.27, 8.1.x przed 8.1.15 oraz 8.2.x przed 8.2.2 — wyłącznie w przypadku użycia sterownika PDO z SQLite.
Podatność dotyczy wyłącznie kombinacji PHP + PDO + SQLite. Aplikacje korzystające z innych silników baz danych (np. MySQL, PostgreSQL) przez PDO nie są narażone na ten konkretny problem.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:NPHP
APPPhp8.0.0 – 8.0.27 (bez)8.1.0 – 8.1.15 (bez)8.2.0 – 8.2.2 (bez)Sqlite
APPSqlite≥ 3.39.2
Powiązane podatności
PHP CGI argument injection – RCE na Windows przez mechanizm Best-Fit
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi)...
Use-after-free w rozszerzeniu SOAP PHP umożliwiające RCE
PHP use-after-free przez __set lub ??= z wyjątkami — RCE
PHP: integer overflow w ldap_escape() prowadzący do out-of-bounds write