В WordPress 4.8.3 устранена уязвимость, которая может привести к подстановке SQL-кода

В системе управления 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 недель, чтобы доказать наличие уязвимости и добиться выпуска исправления.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.