The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уязвимость в ADOdb, допускающая подстановку SQL-запросов

05.05.2025 08:22

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

Уязвимость проявляется при использовании ADOdb вместе с СУБД PostgreSQL в приложениях, вызывающих метод pg_insert_id() и передающих непроверенные внешние данные через параметр $fieldname. Проблема вызвана ошибкой в ADOdb-драйвере к PostgreSQL, связанной с отсутствием должного экранирования спецсимволов в параметрах $tablename и $fieldname, перед их применением в функции pg_insert_id() для формирования имени последовательности.


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


  1. Главная ссылка к новости (https://xaliom.blogspot.com/20...)
  2. OpenNews: Уязвимость в PHP, позволяющая выполнить код при работе в режиме CGI
  3. OpenNews: Уязвимость в Glibc, эксплуатируемая через скрипты на PHP
  4. OpenNews: Локальная root-уязвимость в PHP-FPM
  5. OpenNews: Уязвимость в PHP, позволяющая обойти ограничения, заданные в php.ini
  6. OpenNews: Уязвимость в пакетном менеджере Composer, допускающая компрометацию PHP-репозитория Packagist
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/63186-adodb
Ключевые слова: adodb, php
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (16) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 08:47, 05/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Насколько я знаю, имена таблиц ни в одной базе не могут быть плейсхолдерами  в подготовленных запросах, поэтому добавление контроллируемых удаленной стороной данных в имя таблицы - это верный путь к RCE. Единственное нормальное решение в случае, если это 146% нужно и избежать этого нельзя - это сделать HMAC с секретным ключом.
     
     
  • 2.2, Аноним (1), 08:52, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    P.S. Подготовленные запросы - это фича самой базы, а не обвязки. Но без поддержки фичи в обвязке, разумеется, ничего не выйдет. И обвязка не должна скрывать недостатки самой базы. Если пользователь решает HMACать - то это его решение. В таких случаях может иметь смысл иметь отдельную таблицу, мапящую обратно HMAC на имена.
     
  • 2.21, Аноним (-), 17:30, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Единственное нормальное решение в случае, если это 146% нужно и избежать этого нельзя - это сделать HMAC с секретным ключом.
    > нормальное

    Каким определением "нормальности" ты пользуешься?

    Можно написать QueryBuilder, про который можно будет формально доказать, что использование имени таблицы взятого от пользователя без валидации не будет приводить к RCE. Оно всё же может приводить к обращению к таблице, к которой не хотелось бы обращаться (к таблице с ровно таким именем, который пользователь нам выдал, например, "; DROP TABLE users"), но это не RCE. На самом деле не только с именем таблицы так можно поступить, можно сделать так, что любые строки от пользователя переданные в любой метод QueryBuilder'а не приводили бы к RCE.

    QueryBuilder может позволить совать внешние данные в СУБД, которая не поддерживает prepared statements, и не иметь никаких RCE. Проблемы PHP проистекают из того, что он настаивает на том, что раз у программиста есть конкатентация строк, то больше ему ничего не нужно для построения SQL запросов. Но это проблемы PHP, и судя по возрасту PHP, который до сих пор ходит по граблям sql-injection, проблемы эти невозможно устранить без устранения PHP.

     
     
  • 3.25, Аноним (25), 08:39, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Никакая санитизация в принципе не является нормальным решением, так каксанитизация - это в принципе чёрный список, а для безопасности нужен белый.
     
     
  • 4.27, Аноним (-), 16:05, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ты чего-то не понял. QueryBuilder не является ни белым, ни чёрным списком. Он позволяет передавать любые строки в запросы. Единственное о чём он заботится, это о том, чтобы запросы при этом составлялись бы правильно, чтобы передаваемые строки не смогли бы сломать структуру запроса.
     
  • 3.26, Аноним (25), 08:40, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Проблемы PHP проистекают из того, что он настаивает на том, что раз у программиста есть конкатентация строк, то больше ему ничего не нужно для построения SQL

    Это не так, PHP прекрасно поддерживает подготовленные запросы.

     

  • 1.5, Gemorroj (ok), 09:23, 05/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    эта либа давно умерла уже. что-то из времен php 3-4
     
  • 1.8, Аноним (8), 10:25, 05/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Админы хостингов, которые обслуживают большинство этих php-проектов итак можут делать с бд всё что захотят. Зачем с либами морочиться.
     
  • 1.10, Аноним (10), 12:06, 05/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    по названию подумал, что это либа доступа к акцессовским базам :)
     
     
  • 2.18, Аноним (-), 23:51, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ну технологию ADO давно придумали и видимо это удобный способ написать дата провайдер в виде драйвера ADO чтобы программное обеспечение умеющее работать с ADO могло подключиться к твоему источнику данных.
     

  • 1.16, Аноним (16), 18:03, 05/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Без ссылки на «PHP: a fractal of bad design» (2012 год) эта новость кажется неполной. Да и вообще любая новость про PHP.
     
  • 1.19, Аноним (19), 08:11, 06/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Это что - php? Кто-то этим ещё пользуется?
     
     
  • 2.20, Аноним (-), 08:55, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Знаешь такого Дурова? Вот он на том самом php никому не нужном и стал богатым и известным. Поэтому чушь не неси, это до сих пор один из самых популярных языков
     
  • 2.24, Oleg (??), 08:02, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    На самом деле не так уж много сайтов есть, которые обходятся без PHP. Почти весь интернет на этом языке работает ¯\_(ツ)_/¯
     
  • 2.29, еропка (?), 21:36, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ага.
    Это как с Макдаком. Кого ни спроси - никто там не ест. А приди в любой ресторан - народищу не протолкнуться. Также и с РНР
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру