
CVE-2024–27632 Referenz
In Savane v3.12 und früher wird der Unix-Zeitstempel als Seed im Pseudo-Zufallszahlengenerator (PRNG) verwendet, der zum Generieren von Cross-Site Request Forgery (CSRF)-Schutz-Tokens (form_id) eingesetzt wird. Dadurch kann ein Angreifer möglicherweise eigenständig dasselbe gültige CSRF-Token erzeugen, das einem Opfer zugewiesen wurde, und somit CSRF-Prüfungen umgehen, was zu einem erfolgreichen CSRF-Angriff führt. Die Auswirkungen eines CSRF-Angriffs umfassen Privilegieneskalation und Kontoübernahme.
CWE Klassifikation: CWE-335: Incorrect Usage of Seeds in Pseudo-Random Number Generator (PRNG)
Gemeldet von: Ally Petitt
Betroffenes Produkt: Savane
Betroffene Versionen: 3.12 und früher
Bevor die form_id generiert wird, wird utils_srand() aufgerufen. Anschließend wird die generierte form_id als MD5-Hash eines Werts erstellt, der vom PRNG von PHP erzeugt wird.
frontend/php/include/form.php:61
if (!$form_id)
{
utils_srand ();
$form_id = md5 (mt_rand (0, 1000000));
}
Wie im folgenden Codeblock gezeigt, ist utils_srand() als eine Funktion definiert, die den Seed mit microtime() setzt – einer Funktion, die den Unix-Zeitstempel zurückgibt, multipliziert mit 1.000.000.
frontend/php/include/utils.php:969
function utils_srand ()
{
mt_srand ((int)((double)microtime () * 1000000));
}
Folglich wird der Unix-Zeitstempel, ein vorhersagbarer Wert, zur Erzeugung einer sicherheitskritischen Pseudozufallszahl verwendet. Der Zeitpunkt, zu dem das Token eines Benutzers erstellt wurde, kann möglicherweise von einem Angreifer erraten oder ausgelöst werden, um einen gültigen Zeitstempel zu erhalten, mit dem er ein gültiges CSRF-Token erstellen kann.
Diese Schritte sollen demonstrieren, dass die Kenntnis des Zeitstempels ausreicht, um eigenständig ein gültiges Token zu generieren. Reale Angriffsstrategien können zusätzliche Kreativität erfordern, um sicherzustellen, dass der korrekte Zeitstempel der Token-Erstellung ermittelt wird.
form_id generiert.$RECORDED_UNIX_TIME mit der aufgezeichneten Zeit und führen Sie das folgende PHP-Skript aus. Beachten Sie, dass der generierte Wert mit der form_id übereinstimmt, die der Server beim erstmaligen Besuch der Webseite zurückgegeben hat.<?php
mt_srand ((int)((double)$RECORDED_UNIX_TIME* 1000000));
echo md5 (mt_rand (0, 1000000));
?>
Aktualisieren Sie auf Savane Version 3.13 oder höher. Der Patch ist hier zu finden.