Критична вразливість в ADOdb для PHP, що дозволяє підставляти SQL-запити

Критична вразливість в ADOdb для PHP, що дозволяє підставляти SQL-запити

У бібліотеці ADOdb, яка використовується у багатьох PHP-проєктах для абстрагування доступу до СУБД і налічує близько 3 млн встановлень з репозиторію Packagist, виявлено вразливість (CVE-2025-46337), що дозволяє виконати підставлення власного SQL-запиту. Проблемі присвоєно критичний рівень небезпеки (10 з 10). Вразливість усунуто у випуску ADOdb 5.22.9.

Як проявляється вразливість у PHP-проєктах

Вразливість виникає при використанні ADOdb разом із СУБД PostgreSQL в додатках, що викликають метод pg_insert_id() з передачею неперевірених зовнішніх даних у параметрі $fieldname. Зокрема, проблема стосується додатків, які працюють з базами даних.

Суть проблеми полягає в помилці ADOdb-драйвера до PostgreSQL, пов’язаній з відсутністю належного екранування спеціальних символів у параметрах $tablename та $fieldname перед їх застосуванням у функції pg_insert_id() для формування імені послідовності.

Технічні деталі вразливості в ADOdb

Вразливий код виглядає наступним чином:

$result=pg_query($this->_connectionID, 'SELECT last_value FROM '. $tablename .'_'. $fieldname .'_seq');

Як бачимо, значення параметрів $tablename та $fieldname безпосередньо підставляються у SQL-запит без належної перевірки чи екранування. Це створює можливість для атаки через SQL-ін’єкцію.

Наслідки та рекомендації щодо ADOdb вразливості

Враховуючи критичний рівень небезпеки, всім розробникам рекомендується негайно оновити ADOdb до версії 5.22.9 або новішої. Особливо це стосується проєктів, що використовують PostgreSQL.

Якщо з певних причин оновлення неможливе, варто впровадити додаткову перевірку даних, що передаються в параметри методу pg_insert_id(), щоб запобігти можливим атакам.

Додаткова інформація про ADOdb

ADOdb — це потужна бібліотека абстракції бази даних для PHP. Вона підтримує численні бази даних, включаючи MySQL, PostgreSQL, SQLite та інші. Бібліотека спрощує розробку додатків, що працюють з різними СУБД, надаючи уніфікований API.

Безпека таких компонентів критично важлива, адже вони широко використовуються в багатьох проєктах. Тому розробники повинні регулярно перевіряти наявність оновлень безпеки.

Більш детальну інформацію про вразливість можна знайти в офіційному повідомленні про безпеку.