Version de sécurité 2021-12/FAQ

This page is a translated version of the page 2021-12 security release/FAQ and the translation is 100% complete.

Une série de vulnérabilités ont été trouvées dans MediaWiki qui permettent à un attaquant de divulguer le contenu de pages à partir de wikis privés et de contourner les autorisations d'édition. Le vecteur principal de cette fuite de wiki est l'utilisation d'actions vulnérables sur des pages répertoriées dans $wgWhitelistRead et donc accessibles au public. MediaWiki ne rend désormais l'action « visualiser » accessible au public que sur les pages de $wgWhitelistRead par défaut. Ces problèmes sont résolus dans 1.35.5, 1.36.3 et 1.37.1, voir l'annonce pour les liens vers les archives et les correctifs.

Quels sont les problèmes ?

  • CVE-2021-44858 : La fonctionnalité « annuler » (action=edit&undo=##&undoafter=###) permettait à un attaquant d'afficher le contenu de révisions arbitraires, qu'il ait ou non l'autorisation de le faire. Cela a également été trouvé dans les actions "mcrundo" et "mcrrestore" (action=mcrundo et action=mcrrestore).
  • CVE-2021-45038 : la fonctionnalité "rollback" (action=rollback) pourrait recevoir un paramètre spécialement conçu qui permettait à un attaquant d'afficher le contenu de pages arbitraires, qu'il ait ou non l'autorisation de le faire.
  • CVE-2021-44857 : Les actions "mcrundo" et "mcrrestore" (action=mcrundo et action=mcrrestore) ne vérifient pas correctement les droits d'édition, et permettent à un attaquant de prendre le contenu d'une révision arbitraire et de l'enregistrer sur la page de son choix. Ceci affecte à la fois les wikis publics et les pages publiques sur les wikis privés.

Je n'ai pas le temps de patcher, comment désactiver cela ?

Ajoutez ce qui suit à votre LocalSettings.php :

$wgActions['mcrundo'] = false;
$wgActions['mcrrestore'] = false;

Si votre wiki est privé (nécessite une connexion pour afficher les pages), vous devrez également définir :

$wgWhitelistRead = [];
$wgWhitelistReadRegexp = [];

Il devrait désactiver complètement le code vulnérable. Ces changements fonctionneront également pour les versions vulnérables de MediaWiki en fin de vie pour lesquelles aucun correctif n'est disponible.

Si vous utilisiez $wgWhitelistRead pour permettre aux utilisateurs déconnectés de voir la page principale avec le texte d'aide, vous devriez plutôt déplacer ce texte d'aide vers le message MédiaWiki:Loginreqpagetext, qui est affiché sur l'erreur "Connexion requise".

Ai-je été affecté ?

Si vous utilisez une extension comme Lockdown ou Whitelist Pages pour rendre certaines pages illisibles pour certains utilisateurs, vous êtes également susceptible d'être affecté.

Quelles versions sont vulnérables ?

Toutes les versions de MediaWiki de la 1.23.0 à la 1.34.x, 1.36.x, 1.37.x avant les corrections (voir ci-dessus) sont vulnérables aux contournements des autorisations de lecture du wiki privé (CVE-2021-44858, CVE-2021-45038).

Toutes les versions de MediaWiki de la 1.23.0 à la 1.34.x, 1.36.x, 1.37.x avant les corrections (voir ci-dessus) sont vulnérables aux contournements des autorisations de lecture du wiki privé (CVE-2021-44858, CVE-2021-45038).

Comment cela se règle-t-il sur le long terme ?

Toutes les actions à l'exception de « afficher » nécessitent désormais un droit d'utilisateur « lecture » explicite. Ceci est similaire aux contrôles d'autorisation utilisés dans les API Action et REST. Si d'autres vulnérabilités sont trouvées dans les actions, elles ne seront au moins pas exploitables par les utilisateurs déconnectés sur des wikis privés.

Les actions qui doivent être utilisables sur les pages $wgWhitelistRead peuvent remplacer la nouvelle fonction Action::needsReadRight().

Comment puis-je voir si quelqu'un l'a exploité sur mon wiki ?

Recherchez action=mcrundo ou action=mcrrestore dans vos journaux d'accès. À moins que vous n'ayez spécifiquement activé une extension qui utilise révisions à contenu multiple, il n'y a aucune utilisation légitime pour ces actions.

Recherchez en plus, les demandes action=edit&undo=###&undoafter=### et vérifiez si les ID de révision appartiennent à un titre différent de celui de la page en cours d'édition.

Pour le bogue de retour en arrière, recherchez action=rollback&from=... où le paramètre "from" est une transclusion de modèle (par exemple, from={{:private page}}).

Ce bogue ne provoque aucune perte de données, donc toutes les actions d'écriture qu'un attaquant aurait pu effectuer seront enregistrées dans l'historique des pages comme toutes les autres modifications.

Crédit

Le problème a été découvert par Dylsss, merci beaucoup à eux pour avoir identifié et signalé le problème. Si vous trouvez un bogue dans MediaWiki, veuillez consulter le processus pour signaler des bogues de sécurité.