Sicherheitsveröffentlichung Dezember 2021 – Häufige Fragen
Eine Reihe von Schwachstellen in MediaWiki wurde gefunden, welche es Angreifern erlauben, Seiteninhalte privater Wikis zu erspähen und Bearbeitungsberechtigungen zu umgehen.
Der Hauptzugriffspunkt dieser Sicherheitslücken ist es, verwundbare Aktionen auf Seiten zu verwenden, die auf $wgWhitelistRead
gelistet und damit öffentlich zugänglich sind.
MediaWiki macht die Aktion „view“ („ansehen“) nun standardmäßig nur auf Seiten öffentlich zugänglich, die in $wgWhitelistRead
gelistet sind.
Diese Probleme wurden mit den Versionen 1.35.5, 1.36.3 und 1.37.1 behoben. Sie Veröffentlichungsankündigung für Links zu den Dateien und Änderungen.
Was sind die Probleme?
- CVE-2021-44858: Die „Rückgängig“-Funktion (
action=edit&undo=##&undoafter=###
) erlaubte es Angreifern, die Inhalte beliebiger Versionen zu sehen, unabhängig davon, ob sie dazu berechtigt waren. Dies betraf ebenso die „mcrundo“- und „mcrrestore“-Aktionen (action=mcrundo
undaction=mcrrestore
). - CVE-2021-45038: Die „kommentarlos zurücksetzen“-Funktion (
action=rollback
) konnte einen speziell erstellten Parameter empfangen, welcher es Angreifern erlaubte, die Inhalte beliebiger Seiten anzuzeigen, unabhängig davon, ob sie dazu berechtigt waren. - CVE-2021-44857: Die „mcrundo“- und „mcrrestore“-Aktionen (
action=mcrundo
undaction=mcrrestore
) prüften Bearbeitungsberechtigungen nicht richtig und erlaubten es Angreifern, den Inhalt einer beliebigen Version zu nehmen und auf einer beliebigen anderen, von den Angreifern gewählten Seite zu speichern. Dies betrifft sowohl öffentliche Wikis als auch öffentliche Seiten auf privaten Wikis.
Ich habe keine Zeit, zu patchen, wie deaktiviere ich das?
Füge Folgendes zu LocalSettings.php hinzu:
$wgActions['mcrundo'] = false;
$wgActions['mcrrestore'] = false;
Wenn dein Wiki privat ist (Einloggen erfordert, um Seiten anzusehen), musst du zusätzlich hinzufügen:
$wgWhitelistRead = [];
$wgWhitelistReadRegexp = [];
Dies sollte den verwundbaren Code vollständig deaktivieren. Diese Änderungen funktionieren auch für verwundbare MediaWiki-Versionen, die nicht mehr unterstützt werden und für die kein Patch verfügbar ist.
Falls du $wgWhitelistRead
verwendet hast, um es ausgeloggten Besuchern zu ermöglichen, die Hauptseite mit einer Hilfenachricht zu sehen, solltest du diese Hilfenachricht in die MediaWiki:Loginreqpagetext-Nachricht verschieben, welche als Teil des „Login erforderlich“-Fehlers gezeigt wird.
War ich betroffen?
- Falls dein Wiki öffentlich ist (jeder kann Seiten ansehen): ja
- Falls dein Wiki privat ist und
$wgWhitelistRead
oder$wgWhitelistReadRegexp
mindestens eine Seite enthält: ja
Falls du eine Erweiterung wie Lockdown oder Whitelist Pages verwendest, um einige Seiten gewissen Benutzern unzugänglich zu machen, bist du wahrscheinlich ebenfalls betroffen.
Welche Versionen sind betroffen?
Alle MediaWiki-Versionen seit 1.23.0 sind von den Umgehungen von Leseeinschränkungen auf privaten Wikis (CVE-2021-44858, CVE-2021-45038) betroffen.
Alle MediaWiki-Versionen seit 1.32.0 sind von der Umgehung von Bearbeitungsberechtigungen betroffen (CVE-2021-44857).
Wie wird dies langfristig behoben?
Alle Aktionen außer „view“ („ansehen“) benötigen nun eine explizite „read“-Berechtigung („lesen“). Das ist ähnlich zu Berechtigungsprüfungen in den Action- und REST-APIs. Falls weitere Schwachstellen in Aktionen gefunden werden, so werden sie immerhin nicht von ausgeloggten Benutzern auf privaten Wikis ausnutzbar sein.
Aktionen, die auf mit $wgWhitelistRead
festgelegten Seiten verfügbar sein müssen, können die neue Funktion Action::needsReadRight()
implementieren.
Wie kann ich sehen, ob jemand dies auf meinem Wiki ausgenutzt hat?
Durchsuche deine Zugangslogbücher nach action=mcrundo
oder action=mcrrestore
. Sofern du nicht eine Erweiterung, die sog. Mehrinhaltsrevisionen („Multi-Content Revisions“) verwendet, explizit erweitert hast, besteht kein legitimer Nutzen für diese Aktionen.
Suche außerdem nach action=edit&undo=###&undoafter=###
-Zugriffen und prüfe, ob die Versionsnummern zu einem anderen Titel gehören als dem der Seite, die bearbeitet wird.
Für die Schwachstelle im kommentarlosen Zurücksetzen, suche nach action=rollback&from=...
, wo der „from“-Parameter eine Vorlageneinbindung ist (zum Beispiel, from={{:private page}}
).
Diese Schwachstelle verursacht keinen Datenverlust, also werden jegliche Schreibzugriffe, die Angreifer verursacht haben, ebenso wie andere Bearbeitungen in der Versionsgeschichte angezeigt.
Danksagung
Das Problem wurde von Dylsss gefunden, vielen Dank für das Auffinden und die Meldung der Schwachstelle. Falls du ein Problem in MediaWiki findest, folge bitte dem Prozess, um Sicherheitslücken zu melden.