Se protéger du hack wordpress 2.8.3 qui réinitialise le mot de passe
Par Korben | Nb visites : 604

Si vous avez un site ou un blog sous Wordpress, il y a un hack qui tourne depuis quelques jours (et dont j’ai appris l’existence ce matin), qui permet de forcer la réinitialisation du mot de passe admin. En gros, c’est tout con (et vous pouvez essayer sur votre wordpress), lorsque vous entrez l’url suivante :
http://VOTRE-DOMAINE.COM/wp-login.php?action=rp&key[]=
Vous obtenez un très sympathique message vous disant que le mot de passe a été réinitialisé. Le hack n’est pas dangereux sauf que l’admin devra ouvrir sa boite mail pour retrouver le nouveau mot de passe… Imaginez donc une moulinette qui effectue cette opération toutes les 2 secondes et le webmaster ou le bloggeur devient FOU !
Voici donc comme désactiver cette fonction temporairement, en attendant la mise à jour de Wordpress.
Ouvrez le fichier wp-login.php et recherchez la fonction suivante :
function reset_password($key) {
global $wpdb;
$key = preg_replace('/[^a-z0-9]/i', '', $key);
if ( empty( $key ) )
return new WP_Error('invalid_key', __('Invalid key'));
$user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users
WHERE user_activation_key = %s", $key));
if ( empty( $user ) )
return new WP_Error('invalid_key', __('Invalid key'));
// Generate something random for a password...
$new_pass = wp_generate_password();
do_action('password_reset', $user, $new_pass);
wp_set_password($new_pass, $user->ID);
update_usermeta($user->ID, 'default_password_nag', true);
$message = sprintf(__('Username: %s'), $user->user_login) . "\r\n";
$message .= sprintf(__('Password: %s'), $new_pass) . "\r\n";
$message .= site_url('wp-login.php', 'login') . "\r\n";
$title = sprintf(__('[%s] Your new password'), get_option('blogname'));
$title = apply_filters('password_reset_title', $title);
$message = apply_filters('password_reset_message', $message, $new_pass);
if ( $message && !wp_mail($user->user_email, $title, $message) )
die('<p>' . __('The e-mail could not be sent.') . "<br />\n" . __('Possible reason:
your host may have disabled the mail() function...') . '</p>');
wp_password_change_notification($user);
return true;
}
Mettez tout son contenu en commentaire afin d’empêcher la réinitialisation du mot de passe mais laissez le « return true » à la fin
Ça donnera ça :
function reset_password($key) {
/*
global $wpdb;
$key = preg_replace('/[^a-z0-9]/i', '', $key);
if ( empty( $key ) )
return new WP_Error('invalid_key', __('Invalid key'));
$user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users
WHERE user_activation_key = %s", $key));
if ( empty( $user ) )
return new WP_Error('invalid_key', __('Invalid key'));
// Generate something random for a password...
$new_pass = wp_generate_password();
do_action('password_reset', $user, $new_pass);
wp_set_password($new_pass, $user->ID);
update_usermeta($user->ID, 'default_password_nag', true);
$message = sprintf(__('Username: %s'), $user->user_login) . "\r\n";
$message .= sprintf(__('Password: %s'), $new_pass) . "\r\n";
$message .= site_url('wp-login.php', 'login') . "\r\n";
$title = sprintf(__('[%s] Your new password'), get_option('blogname'));
$title = apply_filters('password_reset_title', $title);
$message = apply_filters('password_reset_message', $message, $new_pass);
if ( $message && !wp_mail($user->user_email, $title, $message) )
die('<p>' . __('The e-mail could not be sent.') . "<br />\n" . __('Possible reason:
your host may have disabled the mail() function...') . '</p>');
wp_password_change_notification($user);
*/
return true;
}
La fonction ne fera alors que renvoyer VRAI …
Cherchez ensuite le petit passage suivant :
case 'rp' :
$errors = reset_password($_GET['key']);
if ( ! is_wp_error($errors) ) {
wp_redirect('wp-login.php?checkemail=checkemail');
exit();
}
et commentez la redirection en mettant ensuite un echo si vous voulez laisser un petit message au script kiddy :
case 'rp' :
$errors = reset_password($_GET['key']);
if ( ! is_wp_error($errors) ) {
/*wp_redirect('wp-login.php?checkemail=checkemail');*/
echo('Mouahahaha ! Tu crois quand meme pas que tu vas
hacker mon site, petit script kiddy ? Arf !');
exit();
}
Et voilà ! Vous êtes protégé !
Ensuite, lorsque la mise à jour de Wordpress arrivera (ce qui ne devrait pas tarder), vous n’aurez qu’à faire la mise à jour et le fichier wp-login.php sera écrasé avec la nouvelle version, donc vous reviendrez à la normale.
Sinon, une autre technique consiste à simplement placer un htaccess et un htpasswd sur votre serveur pour ajouter un niveau de protection. Puis allez lire ces quelques (vieux mais toujours valables) conseils sur la façon de sécuriser son blog.
Et Stagueve me dit aussi dans les commentaires, qu’on peut tout simplement virer le compte admin et se créer un compte « toto » (ou autre) qui aurait les droits admin. Effectivement, pourquoi faire simple quand on peut faire compliqué
)) Ma devise ? Roooohh
Bonne chance !
Je vous recommande aussi la lecture des sujets suivants
- Trouver des mots de passe avec Google
- Récupérer toutes vos boites mails en 1 fois avec thunderbird
- Comment changer le mot de passe root perdu de MySQL
- The Pirate Bay piraté
- Générateurs…partie 14/24
Grossefaille non patchée dans Wordpress ! Amis bloggers, voici l’astuce pour éviter le drame…- Changez les mots de passe de vos site enregistrés dans Firefox en une seule fois
- Cracker le mot de passe principal de Firefox
- Comment afficher des publicités Adsense uniquement aux visiteurs en provenance des moteurs de recherche
- Calculez en combien de temps peut être cracké votre mot de passe







Stagueve
C’est pas plus simple de retirer les droits du compte Admin et d’utiliser un autre compte (1ère chose à faire suite à la création d’un site sous WP…)
Posté le 11 août 2009 à 08:38:59
Gogopex
Wow, ça c’est de la réactivité !
Posté le 11 août 2009 à 08:39:59
Ganlhi
En effet, je pense que Stagueve a raison, c’est sans doute la solution la plus sage ^^
Cela dit, merci pour l’astuce, Korben !
Posté le 11 août 2009 à 08:41:37
Félix Aimé
Troll :
Dotclear 1 – Wordpress 0
Euh la date de la release du PoC date d’hier donc je pense pas que cette vulnérabilité est publique depuis quelques jours.
Posté le 11 août 2009 à 08:45:07
Tatsu-Kan
« Mouahahaha ! Tu crois quand meme pas que tu vas hacker mon site, petit script kiddy ? Arf ! »
Posté le 11 août 2009 à 08:45:28
semageek
Merci pour l’info, c’est clair que la solution de stagueve est très bonne,
Normalement d’ailleurs on vire toujours le compte admin….
C’est souvent une des première entrée d’un hack ou autre….
Posté le 11 août 2009 à 08:50:31
Joe
Comme l’a dit Gogopex, quelle réactivité !
Merci Korbinou et stagueve
Posté le 11 août 2009 à 08:51:12
homerunisgood
Merci Korben, comme toujours on peut compter sur toi ! (sous-entendu nous, les mecs qui ont un blog mais qui n’ont pas le temps de trop s’en occuper)
Posté le 11 août 2009 à 08:55:22
S.
yen a un qui marche mieux
rm -rf ~/www/wp*
%wget http://download.dotclear.net/latest-2.0.zip
%unzip latest-2.0.zip
%vi /etc/apache/httpd.conf
%/etc/init.d/httpd restart
enjoy
Posté le 11 août 2009 à 09:00:26
Tito
Zut, je comptais hacker korben.info
Posté le 11 août 2009 à 09:02:10
homerunisgood
Petite curiosite: On t’a fait chier avec cette faille avant que tu la repares ?
Posté le 11 août 2009 à 09:10:43
Korben
@homerunisgood: non… j’ai juste pris les devants
Posté le 11 août 2009 à 09:13:23
Cretch
Un grand merci Korben
Posté le 11 août 2009 à 09:22:34
aciDben
C’est les vacances ? un exploit 0day qui prend aucun skill pour le faire ?
C’est noël pour les 11-14ans là…
Posté le 11 août 2009 à 09:24:01
Wordpress 2.8.3 : faille sur le reset password » Cogitations Peckiennes
[...] propose une solution, en modifiant le code, je vous en propose une autre qui ne permet pas d’éviter le bug (pas de modification de [...]
Posté le 11 août 2009 à 09:25:07
FOx15
+1 avec stagueve
Posté le 11 août 2009 à 09:41:40
Carmin.D
Merci Tonton, tout est ok now
Posté le 11 août 2009 à 10:04:29
Lousia
MERCI.
En fait quand j’ai reçu le mail j’ai pensé à toi, en me disant : « Pas grave, Korben saura. »
Tu te rends compte que tu es en train de devenir le Superman des bugs ?
Posté le 11 août 2009 à 10:07:24
Korben
@Lousia: héhé
Le sauveur des geeks
Posté le 11 août 2009 à 10:08:41
Sylvain
Je m’y suis peut être pris comme un manche, mais en virant l’utilisateur admin, « le bug fonctionne » quand même. Mon autre utilisateur ayant les droits d’administrateur a vu son mot de passe changé…
Posté le 11 août 2009 à 10:09:18
Korben
@Sylvain: Peut être que ça marche avec tous les comptes admins… aucune idée
Posté le 11 août 2009 à 10:19:12
Wacken
@ Sylvain : pareil chez moi, le bug fonctionne même avec un autre compte admin.
Posté le 11 août 2009 à 10:36:50
Kiwi
ben ça va j’ai pas fait la MAJ ^^
Posté le 11 août 2009 à 10:40:41
Wacken
@ Kiwi : ça fonctionne aussi sous WP 2.8.2
Posté le 11 août 2009 à 10:50:09
Jeff
c’est pas mal cette astuce ^^ j’ai déjà fait mon petit coup sur un grand wordpress de jeux videos (WiiFolder). Ya pas de moyens qu’elle remonte a moi quand même ???
Posté le 11 août 2009 à 10:55:34
Korben
@Jeff: mdr ! Tu viens de laisser le nom du site et l’adresse de ton blog, donc si maintenant, y’a moyen !
Posté le 11 août 2009 à 10:58:52
daguo
J’ai viré le compte Admin… 64 messages dans ma boite mail. Doit il y avoir des gens qui m’aime bien…
Posté le 11 août 2009 à 11:09:15
zul595
hello mister Korben
pas méchant , mais chiant comme hack
merci pour l’info
Posté le 11 août 2009 à 11:20:59
Francois
ça marche au poil ! Merci
Posté le 11 août 2009 à 11:24:07
Pirhoo
Merci Korbenichou ! Sinon bravo @Jeff: si t’a fait un script qui mouline le wp-login.php, dans les logs de apache c’est hyper voyant une adresse ip qui apparait 100 fois sur le même fichier… Aha.
Posté le 11 août 2009 à 11:58:30
geekbay
mmm je ne suis pas sur que changer le compte admin, change quelque chose ici, puisque comme on voit
$user = $wpdb->get_row($wpdb->prepare(« SELECT * FROM $wpdb->users
WHERE user_activation_key = %s », $key));
donc il va prendre le premier user qui a user_activation_key = » qui peut avoir n’importe quel nom.
D’ailleur dans l’exploit aussi wp-login.php?action=rp&key[]= , l’utilisateur n’est pas precisé.
Voila j’ai pas encore test pour vérifier ce que je dis mais à la lecture du code, ca a l’air ca.
Quelqu’un peut confirmer ?
Posté le 11 août 2009 à 12:07:17
filc
aha, n’empêche si jamais le blog est hébergé sur un truc gratos qui ne permet pas à PHP d’envoyer des mails…ça peut être gênant. =)
Ou comme chez free, ou l’utilisation de la fonction mail est limité, suffit de le faire énormément de fois, et hop la, il recevra pas le nouveau mot de passe…
(Ceci dit, au passage, il peut toujours le modifier ensuite manuellement dans la BDD)
Posté le 11 août 2009 à 12:20:55
Moubai
merci pour l’infos, blog modifié
Posté le 11 août 2009 à 12:29:12
Shughart
@geekbay: La solution du changement de compte admin n’est que temporaire, une personne malintentionnée qui retrouverai votre nouveau nom d’admin, par exemple Korben, pourra encore réinitialiser votre mot de passe. La méthode sure c’est de désactiver cette fonction.
Posté le 11 août 2009 à 12:46:20
geekbay
@shugart ce que je dis c’est que meme si on change l’utilisateur admin, l’exploit fonctionne et le mdp de l’utilisateur renomme est quand meme changé, sans meme connaitre le nouveau nom.
Posté le 11 août 2009 à 12:55:17
keeg
Merci de l’information, je me garde ça sous le coude au cas où.
Posté le 11 août 2009 à 13:02:27
Shughart
Ooooups pardon, je me suis mal réveillé et j’ai mal formulé ma phrase, en fait je voulais « abonder dans ton sens » et non remettre en question ce que tu disais … Sorry :s
Sauf que tu parle de l’admin renommé en disons korben, alors que je parle d’un utilisateur totalement différent, nouveau, là ou l’admin aura été supprimé.
Mais globalement, c’est tout à fait ça :p
Posté le 11 août 2009 à 13:02:31
Jeff
@Korben: Eh mince! ^^
Posté le 11 août 2009 à 13:34:44
Vendeesign
Thanks
<3 le commentaire de redirection^^
Posté le 11 août 2009 à 13:38:30
Correctif pour la faille WordPress de réinitialisation de mot de passe : correctif pour la faille d
[...] “solutions” ont été apportées notamment par Korben ou encore par l’équipe de développement de l’outil de [...]
Posté le 11 août 2009 à 14:44:09
piouPiouM
C’est d’un crade :-/
Plus proprement : http://bit.ly/wskWZ
Posté le 11 août 2009 à 14:49:07
Une faille sur Wordpress 2.8.3 « Tout simplement moi…
[...] : Blog de Korben Aucun [...]
Posté le 11 août 2009 à 14:59:21
piouPiouM
@Stagueve: ça ne servira à rien, la faille agit sur le premier utilisateur trouvé dans la table des utilisateurs. Ici l’effet pervers est que d’une règle générale ce premier utilisateur est l’adminsitrateur du site.
Posté le 11 août 2009 à 15:36:03
Shughart
@piouPiouM: Merci !
Posté le 11 août 2009 à 16:06:18
Correctif pour la faille WordPress de réinitialisation du mot de passe at Shughart’s Technolo
[...] “solutions” ont été apportées notamment par Korben ou encore par l’équipe de développementde l’outil de [...]
Posté le 11 août 2009 à 16:14:14
Galdon
Des bugs comme ça c’est un peu abusé quand même
Posté le 11 août 2009 à 16:31:34
darky
plus simple: $key = (string) $key; avant le preg_replace()
Posté le 11 août 2009 à 17:21:53
WordPress 2.8.3 : correctif du hack de réinitialisation du mot de passe at Shughart’s Technol
[...] “solutions” pour désactiver cette fonction ont été apportées notamment par Korben ou encore par l’équipe de développementde l’outil de [...]
Posté le 11 août 2009 à 18:33:51
Kiwi
Bon j’ai fait la modif du code, pas mal de d’autres sites d’ailleurs xD
Posté le 11 août 2009 à 18:49:10
skullpat
Plus simple encore, faille corrigée par WP :
http://core.trac.wordpress.org/changeset/11798
Posté le 11 août 2009 à 19:40:09
fabien
en fait c’est quand meme plus simple de changer le nom du fichier php
Posté le 11 août 2009 à 20:51:03
ZePRiNCE
http://www.korben.info/wp-login.php?action=rp&key=
Oh zut
Posté le 12 août 2009 à 00:58:00
William
Merci Korben de nous avoir fait passé l’info. Sympa, je l’ai mise en place en attendant la mise à jour de WordPress.
PS : Je viens de faire la mise à jour. Corrigé et quel soulagement
Posté le 12 août 2009 à 09:29:36
Amaury
Pour info WP 2.8.4 est sortie et corrige la chose
Pour corriger le bug manuellement :
http://core.trac.wordpress.org/changeset?old_path=%2Ftags%2F2.8.3&old=11806&new_path=%2Ftags%2F2.8.4&new=11806
Posté le 12 août 2009 à 12:02:01
Wordpress : Mise à jour de sécurité 2.8.4 | Le Journal du Blog
[...] malveillante. Je vous conseille d’installer la version 2.8.4 ou de mettre en place la solution proposée par Korben. Vous avez aimé cet article : abonnez-vous au flux [...]
Posté le 12 août 2009 à 21:48:02
Albarsark
Fiouu, vous avec pris les devants et été plus vite que wp….joli…
j’ai lu avec intéret l’article
salut
Posté le 25 novembre 2009 à 11:07:02