Подвержены этому багу все версии, включая и WordPress 2.8.3.
Заключается он в следующем – на любом сайте можно сбросить административный пароль. Так во всяком случае написано в источнике, откуда собственно я об этом узнал.
Достаточно всего лишь пойти на сайте на котором установлен WordPress по следующему url:
http://DOMAIN_NAME.TLD/wp-login.php?action=rp&key[]=
при этом на почтовый адрес, указанный в учётной записи администратора (ID=1 – это важно – запомните)
А теперь что удалось выяснить мне:
- эксплойт работает… пароль сбрасывается и высылается на почту сгенерированный самим WordPress-ом;
- особенно не повезёт тем, у кого не работает отсылка писем (бывает такое) – сможете получить доступ к своему аккаунту только путём правки базы MySQL своего блога;
- а теперь самое важное – пароль сбрасывается для пользователя с наименьшим ID – если вы воспользовались ранее мудрыми советами по защите своего блога, где кроме всего прочего рекомендуется удалять административную учётную запись по-умолчанию. Хотя опять же, если вы сразу же после этого создали нового пользователя с ID=2 – то у вас проблемы!!!
- на данном блоге у меня админ-пользователь не с наименьшим ID – так что можете даже не пытаться
– не повезёт Жилинскому
(его пользователь имеет наименьший ID) - даже если вы залогинились в блог как админ и в браузере зашли на http://DOMAIN_NAME.TLD/wp-login.php?action=rp&key[]= – всё равно сбросится пароль пользователя с наименьшим ID
Мои рекомендации:
- срочно создаёте нового пользователя с административными правами
- меняете привилегии пользователя с наименьшим ID (по-умолчанию это admin) на «Подписчик» или удаляете его. Только если будете удалять – не забудьте переназначить все его записи и комментарии на нового админа. Да и если у вас всего два пользователя в блоге – не удаляйте с наименьшим ID – иначе вы ничего не исправите.
- не забывайте делать регулярные бекапы.
Ну и конечно будем ждать обновления от команды WordPress.
Update:
Оказывается решение проблемы уже давно есть.
Находим в файле wp-login.php 190-ю строку if ( empty( $key ) ) и меняем её на if ( empty( $key ) || is_array( $key ) )
