Уязвимость компонента ia.core.mysqli.php CMS-системы Intelliants Subrion CMS связана с непринятием мер по защите структуры запроса SQL. Эксплуатация уязвимости может позволить нарушителю, действующему удалённо, выполнять произвольные SQL-запросы
Установка обновлений из доверенных источников.
В связи со сложившейся обстановкой и введенными санкциями против Российской Федерации рекомендуется устанавливать обновления программного обеспечения только после оценки всех сопутствующих рисков.
Компенсирующие меры:
1. При поиске числа использовать явное преобразование данных в число.
2. При работе со строками использовать привязку параметров.
3. Проверять, что значение в перечислении строго соответствует строковому объекту перечисления.
Пример использования PDO (для любого поддерживаемого драйвера базы данных):
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
$stmt->execute([ 'name' => $name ]);
foreach ($stmt as $row) {
// $row
}
Если используется MySQL и PHP 8.2+:
$result = $dbConnection->execute_query('SELECT * FROM employees WHERE name = ?', [$name]);
while ($row = $result->fetch_assoc()) {
// $row
}
Для PHP до версии 8.1:
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name); // 's' означает тип переменной => 'string'
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// $row
}
Если используется база данных отличная от MySQL, для других драйверов баз данных существует второй вариант, например, pg_prepare() и pg_execute() для PostgreSQL.
Использование рекомендаций:
https://github.com/intelliants/subrion/issues/910
| Балл | 7.5 — высокая опасность |