Faille critique sur Flarum : mettez à jour immédiatement CVSS 9.8
Une vulnérabilité critique vient d'être publiée sur Flarum, permettant à un attaquant non authentifié de prendre le contrôle de n'importe quel compte, y compris les comptes administrateur, sans connaître le token de réinitialisation de mot de passe.
Le problème
Le défaut vient d'un mauvais typage sur la clé primaire des modèles de tokens (PasswordToken, EmailToken, RegistrationToken). Ces classes utilisent token comme clé primaire mais ne déclarent jamais $keyType = 'string'. Eloquent traite donc la clé comme un entier par défaut.
En envoyant passwordToken sous forme d'entier 0 plutôt qu'en chaîne, MySQL et MariaDB comparent ce 0 à tous les tokens dont la valeur commence par une lettre, ce qui correspond à environ 84% des tokens générés aléatoirement. Une seule requête suffit donc pour écraser le mot de passe d'une victime et obtenir une session authentifiée à sa place.
Scénario d'attaque
- Déclencher
/api/forgotpour l'email de la victime, ce qui crée un token que l'attaquant ne voit jamais - Envoyer une requête POST sur
/resetavec{"passwordToken": 0, "password": "...", "password_confirmation": "..."} - L'entier 0 matche un token existant commençant par une lettre, le mot de passe est écrasé et une session est ouverte pour l'attaquant
Versions concernées
- 1.x jusqu'à 1.8.18 inclus
- 2.x de 2.0.0-beta.1 à 2.0.0-beta.6
Correctif
La faille est corrigée dans les versions 1.8.19 et 2.0.0-rc.1. Aucune configuration côté application ne permet de s'en protéger, seule la mise à jour du core corrige réellement le problème.
Si une mise à jour immédiate n'est pas possible, un filtrage au niveau du reverse proxy ou du WAF peut limiter le risque en bloquant les requêtes POST vers /reset dont le champ passwordToken n'est pas une chaîne JSON explicitement quotée.
À retenir
Si vous gérez un forum Flarum, vérifiez votre version dès aujourd'hui et mettez à jour sans attendre.
Sources :