WordPress <= 2.8.3 Remote admin reset password



Внимание! Найдена уязвимость в Wordpress. Уязвимость заключается в том что любой недоброжелатель может сбросить пароль администратора блога на Wordpress версии <= 2.8.3 (то есть любых версий на данный момент существующих).

Любой посетитель вашего блога на WordPress может попытаться зайти в админку блога и попытаться набрать пароль. Кроме того он может также нажать ссылку “Забыл пароль”, после чего на e-mail администратора придёт письмо с просьбой подтвердить намерение пересоздать пароль и хитрой ссылкой вида:

http://DOMAIN_NAME.TLD/wp-login.php?action=rp&key=o7naCKN3OoeU2KJMMsag

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

http://DOMAIN_NAME.TLD/wp-login.php?action=rp&key[]=

И пароль будет сброшен без дополнительного подтверждения. Ничего приятного. Хотя вроде и не смертельно.
В моём представлении

Как спастись

Исправленной версии Wordpress пока нет. Но исправить ситуацию можно вручную.
Достаточно найти в wp-login.php функцию reset_password, в которой найти строчку

1
if ( empty( $key ) )

и заменить на

1
if ( empty( $key ) || is_array( $key ) )

В версиях 2.8.х это должна быть строчка 190. У меня в 2.7.1 это строчка 169.

Кстати всё никак не соберусь обновляться. Подожду, когда версии утрясутся.

Источники
Всё вышенаписанное – это свободный пересказ нижеперечисленных источников

PS: Если я что-то напутал – поправьте меня.

Посты по теме:

  1. Русификация Wordpress
  2. Снижаем нагрузку в WordPress. (ru_RU_lite)
  3. Комментарии к страницам в Wordpress
  4. Разработка шаблона в Wordpress
  5. Зачем нужен OpenId в WordPress?

Категории Wordpress |
автор: altesack / Среда, Август 12, 2009 / 10 комментов »

10 комментов

    Спасибо, завтра займусь.

    Спасибо.

    Ога… Аналогично…

    Спасибо, исправлю

    На самом деле классная дыра, как её только не углядели ;)

    А вроде про 2.8.3 что-то писали, что она как раз это фиксит? Я, правда, мельком по заголовкам сделал такой вывод. Или все же не прав?

    wordpress какбэ намекает, что уже выпущен 2.8.4 фиксящий эту багу.

    @ zeleboba:
    Баг свежий. Буквально вчерашний. По-любому не успевают
    @ qosys:
    Кстати в одном заброшенном непропаченом 2.7.1 я не смог воспроизвести сброс пароля.
    O_O

    @ Накукрыскин:
    и правда =) в админке еще предлагает 2.8.3, но в новостях в админке уже 2.8.4 трубят =) Пойду обновляться.

    Баги не пропускают – их порождают те же программисты.
    Как с такими руками вообще писать код можно…