The OpenNET Project / Index page

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

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

  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
Тип: Проблемы безопасности
Ключевые слова: wordpress
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.1, _hide_, 11:23, 01/11/2017 [ответить] [смотреть все]
  • +3 +/
    Веберы действительно столь упрямые, чтобы не добавлять промежуточный слой перед любой генерацией SQL запросов?
    3 версия вышла в 2010, 4 в 2014 году!
    Только мне кажется, что это даже не смешно? До сих пор работают плагины со 2-ей версии? Или просто разрабатывают чрезвычайно упертые мудрые люди?
     
     
  • 2.2, istepan, 11:40, 01/11/2017 [^] [ответить] [смотреть все]
  • +4 +/
    Там есть куча плагинов которые уже давно не разрабатывают, но люди пользуются. Вот в WordPress и стараются всеми силами сохранить совместимость.
     
     
  • 3.4, YetAnotherOnanym, 12:14, 01/11/2017 [^] [ответить] [смотреть все]
  • –4 +/
    Это медвежья услуга, имхо.
     
     
  • 4.6, пох, 13:08, 01/11/2017 [^] [ответить] [смотреть все]
  • –3 +/
    ну да, ну да - давай у тебя сайт просто рухнет и полежит, с недельку, пока ты ра... весь текст скрыт [показать]
     
     
  • 5.7, YetAnotherOnanym, 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, 11:50, 01/11/2017 [^] [ответить] [смотреть все]  
  • –1 +/
    > Веберы действительно столь упрямые, чтобы не добавлять промежуточный слой перед любой генерацией SQL запросов?

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

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

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

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

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

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

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

     
  • 1.5, trolleybus, 13:03, 01/11/2017 [ответить] [смотреть все]  
  • +/
    Что, подстановку через ? вместо %s не осилили?
     
     
  • 2.9, Comdiv, 15:40, 01/11/2017 [^] [ответить] [смотреть все]  
  • +/
    Ошибки на то и ошибки, чтобы даже зная как надо, сделать что-то не то.
     
     
  • 3.11, Kodir, 18:10, 01/11/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Это слишком древнаяя и широко освещённая ошибка, чтобы в 21 веке иметь её в коде. Код с подобными проблемами автоматом считается "лабуховским".
     
     
  • 4.15, Comdiv, 16:41, 02/11/2017 [^] [ответить] [смотреть все]  
  • +/
    Если ошибка легко достижима, то она будет проявляться вне зависимости от того, насколько она древняя и широко освещённая. Переполнение буфера в Си - это тоже древняя и широко освещённая ошибка, но их находили и будут находить и использовать в своих целях.
     
  • 1.10, Kodir, 18:08, 01/11/2017 [ответить] [смотреть все]  
  • –1 +/
    SQL injection существует десятки лет. Неужели похапасты настолько тупые, что не перепроверили свой позорный код за столько лет?? Уже даже не смешно читать про SQL с прямой подстановкой данных.
     
     
  • 2.12, Аноним, 19:26, 01/11/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Не хватает совета мудрых хеловорлдщиков, что поделать.
     
  • 1.17, KonstantinB, 19:44, 02/11/2017 [ответить] [смотреть все]  
  • +1 +/
    Забавно, что среди комментирующих про тупых похапешников никто так и не понял суть проблемы.

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

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

     

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


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor