
CVE-2024–27632 Ссылка
В Savane v3.12 и более ранних версиях временная метка Unix используется в качестве начального значения в генераторе псевдослучайных чисел (PRNG) для генерации токенов защиты от межсайтовой подделки запросов (CSRF) (form_id). В результате злоумышленник может самостоятельно сгенерировать тот же действительный CSRF-токен, который был назначен жертве, обойдя проверки CSRF и проведя успешную CSRF-атаку. Последствия CSRF-атаки включают повышение привилегий и захват учетной записи.
Классификация CWE: CWE-335: Некорректное использование начальных значений в генераторе псевдослучайных чисел (PRNG)
Сообщил: Ally Petitt
Затронутый продукт: Savane
Затронутые версии: 3.12 и более ранние
Перед генерацией form_id вызывается utils_srand(). Затем сгенерированный form_id создается как MD5-хэш значения, генерируемого PRNG PHP.
frontend/php/include/form.php:61
if (!$form_id)
{
utils_srand ();
$form_id = md5 (mt_rand (0, 1000000));
}
Как показано в блоке кода ниже, utils_srand() определяется как функция, которая инициализирует microtime() — функцию, возвращающую временную метку Unix, умноженную на 1 000 000.
frontend/php/include/utils.php:969
function utils_srand ()
{
mt_srand ((int)((double)microtime () * 1000000));
}
В результате временная метка Unix, предсказуемое значение, используется для генерации критически важного для безопасности псевдослучайного числа. Время создания токена пользователя может быть угадано или спровоцировано злоумышленником для получения корректной временной метки, которую можно использовать для создания действительного CSRF-токена.
Эти шаги демонстрируют, что знания временной метки достаточно для самостоятельной генерации действительного токена. Реальные стратегии атак могут включать дополнительные творческие подходы, чтобы гарантировать правильное определение временной метки создания токена.
form_id.$RECORDED_UNIX_TIME на записанное время и выполните следующий PHP-скрипт. Обратите внимание, что сгенерированное значение совпадает с form_id, которое сервер вернул при первоначальном посещении веб-страницы.<?php
mt_srand ((int)((double)$RECORDED_UNIX_TIME* 1000000));
echo md5 (mt_rand (0, 1000000));
?>
Обновитесь до Savane версии 3.13 или выше. Патч можно найти здесь.