The OpenNET Project / Index page

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

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

01.11.2017 11:01

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

  1. Главная ссылка к новости (https://wordpress.org/news/201...)
  2. OpenNews: Выявлена скупка плагинов к WordPress для распространения вредоносного кода
  3. OpenNews: Уязвимость, позволяющая получить контроль над WordPress через форму сброса пароля
  4. OpenNews: Возможность подстановки SQL-кода в популярном дополнении к WordPress
  5. OpenNews: В результате атак на уязвимые версии WordPress поражено почти 2 млн страниц
  6. OpenNews: Через уязвимость в WordPress атакующие подменили страницы сайта openSUSE
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/47481-wordpress
Ключевые слова: wordpress
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (17) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, _hide_ (ok), 11:23, 01/11/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Веберы действительно столь упрямые, чтобы не добавлять промежуточный слой перед любой генерацией SQL запросов?
    3 версия вышла в 2010, 4 в 2014 году!
    Только мне кажется, что это даже не смешно? До сих пор работают плагины со 2-ей версии? Или просто разрабатывают чрезвычайно упертые мудрые люди?
     
     
  • 2.2, istepan (ok), 11:40, 01/11/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Там есть куча плагинов которые уже давно не разрабатывают, но люди пользуются. Вот в WordPress и стараются всеми силами сохранить совместимость.
     
     
  • 3.4, YetAnotherOnanym (ok), 12:14, 01/11/2017 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Это медвежья услуга, имхо.
     
     
  • 4.6, пох (?), 13:08, 01/11/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Это медвежья услуга, имхо.

    ну да, ну да - давай у тебя сайт просто рухнет и полежит, с недельку, пока ты разбираешься - каким плагином это вызвано, и можно ли его хотя бы временно отключить, или надо пол-сайта переделать.

    При том что страшная и ужасная уязвимость, если сайт написан нормально, скорее всего позволяет оплатить своей карточкой чужой заказ (а не наоборот), или еще что-то столь же жизненно необходимое сделать.

    Или просто вайпнуть форум (надеюсь, ты бэкапы-то делаешь, прежде чем рассуждать о том какие плохие кодеры в вордпрессе?) и нагадить на главной. То есть в самом худшем случае - если ты не неуловимый джо, кто-то все же сумел нетеоретически (!) воспользоваться уязвимостью - сведется к варианту из первого абзаца.

     
     
  • 5.7, YetAnotherOnanym (ok), 13:54, 01/11/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Рухнет сайт или не рухнет - мне пох, не моя епархия. Да и рушится там нечему - одна страничка с контактами и прайсом в xls, экспортируемым из 1с.
    Да, бэкапы есть - пятничные полные и ежедневные ночные и обеденные инкрементальные.
    А лохи, у которых сайт на wp, должны страдать, такова их лоховская участь. И "рухнет" - это не самое худшее. Кража номеров кредиток, слив адресов спамерам или распространение вирусов гораздо хуже.
     
     
  • 6.8, пох (?), 14:39, 01/11/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Рухнет сайт или не рухнет - мне пох, не моя епархия.

    удобно, чо. Я бы, правда, уволил сотрудника, которому пох на бизнес - просто вот на всякий случай.

    > Да и рушится там нечему - одна страничка с контактами и прайсом в xls, экспортируемым из
    > 1с.

    тогда и sql injection некуда запихнуть. И модулей никаких нет.

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

    поэтому я добавлю костыликов и подпорочек, и буду надеяться, что этот сайт никому не нужен. Вордпрессовцы сделали то же самое, но глобально.

     
  • 5.13, Аноним (-), 21:58, 01/11/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > ну да, ну да - давай у тебя сайт просто рухнет и полежит, с недельку, пока ты разбираешься - каким плагином это вызвано, и можно ли его хотя бы временно отключить, или надо пол-сайта переделать.

    То есть "стейджин" - это для трусов?

     
  • 2.3, freehck (ok), 11:50, 01/11/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Веберы действительно столь упрямые, чтобы не добавлять промежуточный слой перед любой генерацией SQL запросов?

    Я спрошу мягко, чтобы никого не обидеть: а много ты знаешь адекватных вебников?

    > Только мне кажется, что это даже не смешно?

    Не одному, поверь. Дыры в WP - уже настолько притча во языцех, что даже порой переплёвывает шуточки про дыры в Windows.

     
     
  • 3.14, _hide_ (ok), 13:39, 02/11/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>> Я спрошу мягко, чтобы никого не обидеть: а много ты знаешь адекватных вебников?

    Вообще такие встречаются. Упрямые, но ошибки свои исправляют. Хотя признают только перед исправлением (сообщили о проблеме - нет тут ошибки... исправил - да была ошибка, исправил. но таких редко встречаю)

     
     
  • 4.16, freehck (ok), 18:28, 02/11/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Да, непризнание ошибок у них чаще всего. Пока не разжуёшь всё от А до Я, пока чуть ли не покажешь в какой строке ошибка -- тяжело добиться выполнения задачи. В общем-то без этого нюанса я их и вовсе не встречал никогда. Так что я соглашусь с Вами -- если это всё, что за вебником замечено -- то это хороший, годный, грамотный вебник.

    Но увы, такие именно что, как Вы изволили выразиться "встречаются". В основном же уровень их общей безграмотности ужасает. Когда вёл семинары, помнится, сразу вбрасывал студентам мысль, что если хотят научиться нормальной разработке, от веба надо поначалу держаться подальше. :/

     

  • 1.5, trolleybus (?), 13:03, 01/11/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что, подстановку через ? вместо %s не осилили?
     
     
  • 2.9, Comdiv (ok), 15:40, 01/11/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ошибки на то и ошибки, чтобы даже зная как надо, сделать что-то не то.
     
     
  • 3.11, Kodir (ok), 18:10, 01/11/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это слишком древнаяя и широко освещённая ошибка, чтобы в 21 веке иметь её в коде. Код с подобными проблемами автоматом считается "лабуховским".
     
     
  • 4.15, Comdiv (ok), 16:41, 02/11/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Если ошибка легко достижима, то она будет проявляться вне зависимости от того, насколько она древняя и широко освещённая. Переполнение буфера в Си - это тоже древняя и широко освещённая ошибка, но их находили и будут находить и использовать в своих целях.
     

  • 1.10, Kodir (ok), 18:08, 01/11/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    SQL injection существует десятки лет. Неужели похапасты настолько тупые, что не перепроверили свой позорный код за столько лет?? Уже даже не смешно читать про SQL с прямой подстановкой данных.
     
     
  • 2.12, Аноним (-), 19:26, 01/11/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не хватает совета мудрых хеловорлдщиков, что поделать.
     

  • 1.17, KonstantinB (ok), 19:44, 02/11/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Забавно, что среди комментирующих про тупых похапешников никто так и не понял суть проблемы.

    Читать еще раз внимательно - "благодаря двойной подстановке".

    А почему не prepared statements - это понятно: обратная совместимость с плагинами, написанными 15 лет назад. Без плагинов этот вордпресс сразу станет никому не нужен, потому и тянется, прямо скажем, не самая удачная архитектура времен начала нулевых.

     

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



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

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