
CVE-2020-28874
이 저장소는 ProjectSend r1270 릴리스에서 발견된 취약점(CVE-2020-28874)에 대한 설명을 포함합니다.
저를 발전시키도록 독려해 준 Entelgy Innotec Security 동료들에게 감사드립니다!
취약점은 비밀번호 재설정 구성 요소에 있습니다. 공격자는 유효한 토큰 없이도 admin과 같은 알려진 사용자의 사용자 이름만으로 해당 사용자의 비밀번호를 변경할 수 있습니다.
이는 백엔드가 제공된 사용자 이름에서 로드된 사용자 데이터로 $user_data를 정리하지 않기 때문에 가능합니다.
if (!empty($_GET['token']) && !empty($_GET['user'])) {
$got_token = $_GET['token'];
$got_user = $_GET['user'];
/**
* Get the user's id
*/
$user_data = get_user_by_username($got_user);
....
}
그리고 해당 변수의 상태를 사용하여 비밀번호 재설정 프로세스를 계속 진행합니다.
if ($_POST) {
/**
* Clean the posted form values.
*/
$form_type = encode_html($_POST['form_type']);
switch ($form_type) {
----
case 'new_password':
if (!empty($user_data['id'])) {
$reset_password_new = $_POST['password'];
...
}
...
}
이를 위해 공격자는 잘못된 "token" 매개변수와 쿼리 문자열에 대상 사용자 이름을 담은 "user" 매개변수를 포함하는 POST 요청을 구성해야 합니다. 또한 본문에는 "form_type"을 "new_password"로, "password"에는 원하는 새 비밀번호를, csrf_token에는 유효한 토큰(로그인 폼에서 가져온 값, 비밀번호 재설정 폼은 이를 제공하지 않음)을 추가해야 합니다.
이 저장소에는 취약점을 악용하는 파이썬 스크립트와 이를 테스트하기 위한 도커 컨테이너가 포함되어 있습니다.
git clone https://github.com/varandinawer/CVE-2020-28874_CVE-2020-28875.git
cd ./CVE-2020-28874_CVE-2020-28875/docker-r1270
docker-compose up
#To finish the process of ProjectSend installation, go to http://localhost in the browser and follow the indication to setup an admin account
cd ..
python CVE-2020-28874.py --url http://localhost --user admin --pwd newAdminP4ssword*
버전 r1295 이상으로 업그레이드하세요.