The OpenNET Project / Index page

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

Новая критическая уязвимость в WordPress

28.04.2015 09:58

Спустя несколько дней с момента устранения прошлой уязвимости в популярной системе управления web-контентом WordPress выявлена новая критическая уязвимость, которая как и прошлая проблема дает возможность осуществить подстановку JavaScript-кода в комментарий к заметкам в блогах. В настоящий момент проблема уже устранена в оперативно сформированном выпуске WordPress 4.2.1, но информация об уязвимости была раскрыта до исправления, т.е. потенциально любой сайт на базе актуальной версии WordPress мог быть атакован.

Метод атаки основан на том, что поле TEXT в MySQL не может превышать 64 Кб. Если сообщение превышает данный размер, то хвост обрезается и в БД помещается лишь часть текста. Соответственно, можно добавить сообщение, размером чуть больше 64 Кб, в котором размещается HTML-тег с произвольным большим блоком текста внутри. Так как хвост будет обрезан тег останется разорван, что позволит обойти код чистки HTML-тегов в WordPress. После отображения такого текста, закрытием тега послужат далее идущие теги интерфейса WordPress. Если размещённый таким образом комментарий просмотрит администратор блога, то в его браузере в контексте блога будет выполнен JavaScript, через который можно получить доступ к операциям в интерфейсе администратора и организовать выполнение PHP-кода на сервере путём загрузки плагина или редактирования темы оформления.



  1. Главная ссылка к новости (http://arstechnica.com/securit...)
  2. OpenNews: Релиз WordPress 4.2 с устранением серьёзной уязвимости
  3. OpenNews: ФБР предупредило о волне атак на уязвимые плагины к WordPress
  4. OpenNews: Более ста тысяч сайтов на платформе WordPress поражены вредоносным ПО
  5. OpenNews: В WordPress 3.x выявлена уязвимость, позволяющая подставить JavaScript-код через комментарий
  6. OpenNews: Релиз системы управления web-контентом WordPress 4.0
Лицензия: CC-BY
Тип: Проблемы безопасности
Ключевые слова: wordpress
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (44) Ajax | 1 уровень | Линейный | Раскрыть всё | RSS
  • 1.1, anonimous (?), 10:19, 28/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +11 +/
    Это просто праздник какой-то!
     
     
  • 2.4, pkdr (ok), 10:34, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Для вордпресса каждый день - такой "праздник".
     
  • 2.8, anonymous (??), 10:43, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Вордпресс - это праздник, который всегда с тобой.
     
     
  • 3.45, Аноним (-), 21:28, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Праздник каждый день :)
     

  • 1.2, нонэйм (?), 10:23, 28/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    да уж, лучше использовать чистый html чем это..
     
     
  • 2.7, pkdr (ok), 10:42, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +16 +/
    Чистый html - совершенно не годится. Текст на голом html будет очень легко читаться, причём посетитель может позволять себе такую возмутительную наглость, как выбрать нравящийся ему, а не дизайнеру шрифт, его цвет и размер. На голом html неудобно делать текст сайта в виде тонкого столбца в 500 пикселей на экране шириной в 2-4 тысячи пикселей. На голом html никак не сделать, чтобы во время чтения вылезло на передний план какое-нибудь очень важное изображение. Крайне неудобно делать весь текст переливающимся всеми мыслимыми цветами.
    Ну и кому он нужен, чистый html?
     
     
  • 3.20, Онотоле (?), 13:06, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ммм, простыню текста раскинувшуюся на весь экран от левого края до правого удобно читать?
     
     
  • 4.23, Аноним (-), 13:20, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    CSS? Нет, никогда не слышал и слышать не желаю!
     
  • 4.24, Аноним (-), 13:26, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    не экран, а окно... думать надо головой покупая "экран" с соотношением от 16:9 и открывая там одно окно браузера на всю ширь...
     
     
  • 5.26, playnet (ok), 13:39, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > не экран, а окно... думать надо головой покупая "экран" с соотношением от
    > 16:9 и открывая там одно окно браузера на всю ширь...

    У меня так и есть. 16:9, 23" моник. На весь экран. И мне удобно.

     
  • 5.40, Аноним (-), 18:35, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > не экран, а окно... думать надо головой покупая "экран" с соотношением от
    > 16:9 и открывая там одно окно браузера на всю ширь...

    Так у нормальных сайтов "резиновая" верстка и они на весь экран как раз получаются.

    И если что - мониторы с мало-мальски большой диагональю нынче почти все 16:9 как правило. А не нравится .. ну смотри в офисные 1280х1024, блин. "Зато 4:3" - единственное достоинство такого экспоната.

     
     
  • 6.43, Vkni (ok), 20:01, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > И если что - мониторы с мало-мальски большой диагональю нынче почти все
    > 16:9 как правило. А не нравится .. ну смотри в офисные
    > 1280х1024, блин. "Зато 4:3" - единственное достоинство такого экспоната.

    Есть, кстати, 2048х1536, тоже 4:3.

     
     
  • 7.47, Аноним (-), 22:02, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Хз, мне достойные внимания аппараты за разумные деньги в продаже не попадались ... текст свёрнут, показать
     
     
  • 8.48, Vkni (ok), 22:27, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Для большого настольного дисплея широкий формат удобнее Уже 17-ти дюймовый ноут... текст свёрнут, показать
     
  • 8.53, Аноним (-), 20:06, 29/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще это 16 9 16 10 8212 2560х1600 ... текст свёрнут, показать
     
  • 4.31, pkdr (ok), 14:42, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Ммм, простыню текста раскинувшуюся на весь экран от левого края до правого удобно читать?

    Немного увеличенным шрифтом - вполне удобно. И у меня экран лёгким движением руки становится вертикальным.

     
     
  • 5.44, Vkni (ok), 20:02, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Немного увеличенным шрифтом - вполне удобно. И у меня экран лёгким движением
    > руки становится вертикальным.

    Если экран - не совсем щель, то это даже лучше 4:3.

     
  • 3.25, playnet (ok), 13:38, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > На голом html неудобно делать текст сайта в виде тонкого столбца в 500 пикселей на экране шириной в 2-4 тысячи пикселей.

    Табличная вестка же! Там это делается элементарно.

     

  • 1.3, Аноним (-), 10:26, 28/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    "поле TEXT в MySQL не может превышать 64 Кб, в то время как лимит на размер комментария установлен в 66 тысяч символов"

    Я даже не знаю, как это прокомментировать.

     
     
  • 2.10, Аноним (-), 11:20, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ну ошиблись, сделать alter table, поменять TEXT на LONGTEXT и всё заработает или массив свой поменять на 63кб
     
     
  • 3.19, Умник (?), 12:51, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Движок самдолжен запрашивать макс размер поля в БД
     
     
  • 4.27, playnet (ok), 13:42, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Движок самдолжен запрашивать макс размер поля в БД

    На каждый запрос клиента? Получать типы, размерности, связи и прочее? Этак мы до битрикса докатимся. Если и делать, то с кэшированием, хотя бы в админке, а лучше при обновлении версии/изменении модулей, и в конфиги. Тогда не будет провала в скорости для простых юзеров.

     
     
  • 5.28, playnet (ok), 13:44, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Если и делать, то с кэшированием, хотя бы в админке

    в смысле, перечитывать свойства базы при изменениях в админке, причём не во всех разделах, а только в тех, где есть шанс изменения структур данных.
    Ну и кнопка force sync для ручных изменений.

     
  • 3.42, Ilya Indigo (ok), 19:47, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Какой LONGTEXT?
    VARCHAR(xxx) уже давно как позволяет до нескольких мегабайт записывать с указанием ограничения в байтах.
    TEXT-ом пользуются те, кто до сих пор в танке.
    Но проблему это всё равно не решает, нужно при валидации самому следить чтобы текст был не пустым и не переваливал за установленное значение, что делается простым isset-ом.
     

  • 1.6, йцу (?), 10:37, 28/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > в то время как лимит на размер комментария установлен в 66 тысяч символов.

    Сначала не понял откуда такое число, но

    > The exploit works by posting some simple JavaScript code as a comment and then adding a massive amount of text—about 66,000 characters or more than 64 kilobytes worth.

    Если я правильно понял, в самом WP никакого лимита нет вообще. Имеется в виду, что для размещения XSS достаточно 64k любого текста + пару k на сам эксплойт.

    А вообще, имхо, предоставлять пользователям публичных ресурсов возможности HTML-разметки - это всегда опасная практика. Формат уже слишком сложный, чтобы можно было полагаться на всякие средства "очистики". Если прям необходимо дать возможность выделять текст "жирненьким", лучше встроить какой-нибудь markdown или bb-коды на худой конец.

     
     
  • 2.15, Crazy Alex (ok), 12:07, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Точнее, разметку можно (и нужно) делать HTML-подобной - такое большему числу людей понятно, но всё равно её полностью парсить и генерировать заново.
     
  • 2.17, Аноним (-), 12:37, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    html проще парсить, чем тот же markdown. Не говоря о textile.
     

  • 1.9, Аноним (-), 11:05, 28/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    А все потому что мыскль.
    В нормальной субд при превышении размера поля будет error и rollback.

    Да, в мыскле тоже можно включить strict mode, но этого никто не делает - половина кода, написанного похапе-программистами, отвалится.

     
     
  • 2.21, Аноним (-), 13:08, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Какой флаг нужно вписать в sql-mode?  
     
     
  • 3.29, Аноним (-), 13:49, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    STRICT_ALL_TABLES
     
     
  • 4.30, Аноним (-), 14:21, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    У меня STRICT_TRANS_TABLES
     
     
  • 5.37, Аноним (-), 16:56, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Если таблицы в InnoDB - сойдёт.
     
     
  • 6.38, Аноним (-), 17:35, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    TokuDB
     
     
  • 7.39, Аноним (-), 17:50, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну или так, TRANS_ - это для всех движков, которые Transactions = YES в SHOW ENGINES.
     
  • 2.22, Онотоле (?), 13:09, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Если не 90%.
     

  • 1.14, arisu (ok), 11:59, 28/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    всё‐таки пицца оказалась не умнее сыра.
     
     
  • 2.33, A.Stahl (ok), 15:24, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Увы. Это, наверное, зелёная Жаба виновата. Давно пора было уволить.
     

  • 1.32, vitalif (ok), 14:46, 28/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Да просто не надо полагаться на то, что в базе html типа "чистый" - нужно очищать ПОСЛЕ того, как берёшь из базы. Заодно получаешь защиту от просто подстановки яваскрипта через какую-нибудь дыру, которая позволяет текст записей менять.

    Очищать кстати норм htmLawed'ом.

    P.S: Я думал, что "критичная" - это выполнение кода, а тут XSS всего лишь... этих XSS'ов там по-моему на каждом углу.

     
     
  • 2.41, Аноним (-), 18:40, 28/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > P.S: Я думал, что "критичная" - это выполнение кода, а тут XSS
    > всего лишь... этих XSS'ов там по-моему на каждом углу.

    Нет, тут не XSS и не всего лишь, а возможность впихать свой JS, который при просмотре админом может лихо вкачать PHP shell на сервер и далее поиметь все и вся с правами пользователя под которым php крутился.

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

     

  • 1.46, Музыкант (?), 21:50, 28/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Слушайте, а у меня идея: ставишь на localhost любой http сервер, на него загружаешь любой, какой угодно дырявый CMS (ну или делаешь сайт с нуля), а потом сделать такой скриптик, который скачивает его целиком с помощью чего-то вроде httrack в виде статических html файлов и заливает их на хостинг (само собой только те, котрые обновились). Правда комментарии в таком блоге оставлять не получится, но можно вынести их в отдельные страницы (типа как гостевые книги в старые времена, только для каждого поста). А порядком можно даже специально заточенный CMS запилить для этой цели, который генерировал бы реальные html файлы и заливал их на хостинг. А можно чтоб даже можно было выбрать, какие страницы превращать в 100% статические, а какие оставить динамическими.
     
     
  • 2.49, Typography Nazi (?), 01:09, 29/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    https://www.staticgen.com/ is your friend.
     
     
  • 3.50, Музыкант (?), 11:39, 29/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо! Я просто не смог найти, как этот подход называется - везде тупо давали ссылки на flat-file CMS.
     
  • 2.52, бедный буратино (ok), 16:19, 29/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Я такую фигню на python, bottle и scp собрал минуты за две. Правда, не для блогов, а для просто статических сайтов, у меня они все статические.

    А для блогов существуют десятки подобных решений, с разными дискусами для комментариев.

     

  • 1.51, бедный буратино (ok), 11:56, 29/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Wordpress удалили из портов OpenBSD. Ибо нефиг :)
     

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



    Спонсоры:
    MIRhosting
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

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