
CVE-2024–27632 참조
Savane v3.12 및 이전 버전에서는 교차 사이트 요청 위조(CSRF) 보호 토큰(form_id)을 생성하는 데 사용되는 의사 난수 생성기(PRNG)의 시드로 Unix 타임스탬프가 사용됩니다. 그 결과, 공격자는 피해자 사용자에게 할당된 것과 동일한 유효한 CSRF 토큰을 독립적으로 생성할 수 있게 되어 CSRF 검사를 통과하고 CSRF 공격을 성공시킬 수 있습니다. CSRF 공격의 영향에는 권한 상승과 계정 탈취가 포함됩니다.
CWE 분류: CWE-335: 의사 난수 생성기(PRNG)에서 시드의 잘못된 사용
보고자: Ally Petitt
영향받는 제품: Savane
영향받는 버전: 3.12 및 이전 버전
form_id가 생성되기 전에 utils_srand()이 호출됩니다. 그런 다음 생성된 form_id는 PHP의 PRNG에 의해 생성된 값의 MD5 해시로 만들어집니다.
frontend/php/include/form.php:61
if (!$form_id)
{
utils_srand ();
$form_id = md5 (mt_rand (0, 1000000));
}
아래 코드 블록에서 볼 수 있듯이 utils_srand()은 Unix 타임스탬프를 반환하는 microtime()에 1,000,000을 곱한 값을 시드로 사용하는 함수로 정의됩니다.
frontend/php/include/utils.php:969
function utils_srand ()
{
mt_srand ((int)((double)microtime () * 1000000));
}
그 결과, 예측 가능한 값인 Unix 타임스탬프가 보안에 중요한 의사 난수를 생성하는 데 사용됩니다. 사용자의 토큰이 생성된 시간은 공격자가 추측하거나 유발할 수 있으므로, 공격자는 유효한 타임스탬프를 얻어 유효한 CSRF 토큰을 제작하는 데 사용할 수 있습니다.
이 단계들은 타임스탬프를 아는 것만으로도 유효한 토큰을 독립적으로 생성하기에 충분하다는 것을 입증하는 것을 목표로 합니다. 실제 공격 전략에서는 올바른 토큰 생성 타임스탬프를 추론하기 위해 추가적인 창의성이 필요할 수 있습니다.
form_id를 생성하는 Savane 웹페이지를 방문하십시오.$RECORDED_UNIX_TIME을 기록된 시간으로 바꾸고 다음 PHP 스크립트를 실행하십시오. 생성된 값이 서버가 웹페이지를 처음 방문했을 때 반환한 form_id와 일치하는지 확인하십시오.<?php
mt_srand ((int)((double)$RECORDED_UNIX_TIME* 1000000));
echo md5 (mt_rand (0, 1000000));
?>
Savane 버전 3.13 이상으로 업그레이드하십시오. 패치는 여기에서 확인할 수 있습니다.