В WordPress 4.8.3 устранена уязвимость, которая может привести к подстановке SQL-кода
1 ноября 2017 года
В системе управления web-контентом WordPress выявлена уязвимость, позволяющая выполнить произвольные SQL-запросы на сервере. Уязвимость устранена в выпуске 4.8.3.
Проблема связана с генерацией функцией $wpdb-prepare() запросов, допускающих совершение атак через подстановку SQL-запросов из-за отсутствия экранирования последовательности "%s" функцией esc_sql(). Утверждается, что базовая часть WordPress напрямую не подвержена атаке, но уязвимость может проявиться в плагинах и темах оформления при наличии двойного вызова prepare в сочетании с подстановками через "%s". Например, если в коде
$value_clause = $wpdb-prepare( " AND meta_value = %s", $meta_value ); $object_ids = $wpdb-get_col( $wpdb-prepare( "SELECT $type_column FROM $table WHERE meta_key = %s $value_clause", $meta_key ) );
в качестве значения $meta_value пользователь передаст строку " %s ", а $meta_key - массив ['dump', ' OR 1=1 /*'], то благодаря двойной подстановке через оператор "%s" в первом prepare() вместо %s c учётом добавленного экранирования кавычками будет подставлена строка " '%s' ", в во втором prepare() эта строка приведёт к подстановке второго элемента массива из $meta_key. В итоге будет подготовлен SQL-запрос:
SELECT type FROM table WHERE meta_key = 'dump' AND meta_value = '' OR 1=1 /*'
Примечательно, что более общая уязвимость, связанная с подстановкой SQL-кода через манипуляцию значениями с символом "%", вначале была исправлена в версии 4.8.2, но для сохранения совместимости с кодом плагинов была оставлена возможность использования последовательности "%s", что не устранило проблему, а лишь потребовало изменения метода атаки. 20 сентября, спустя день после релиза 4.8.2, разработчикам был продемонстрирован иной способ атаки, но выявившему проблему исследователю потребовалось 5 недель, чтобы доказать наличие уязвимости и добиться выпуска исправления.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.