W-06
IDOR (수평적 권한 상승)
위험도: 상⚠️ 위험도 근거: 전체 회원 개인정보 열람 가능, 개인정보보호법 위반
📌 아래 내용이 표준 보고서에 포함되어야 합니다. 자신이 작성한 보고서와 대조하세요.
취약점 개요
📄 표준 내용
IDOR(Insecure Direct Object Reference, 불안전한 직접 객체 참조)는 사용자가 접근 권한을 가진 리소스를 식별하는 데 사용되는 ID 값을 조작하여, 다른 사용자의 데이터에 무단으로 접근할 수 있는 취약점이다.
발견 내용
📄 표준 내용
[점검 대상] URL: GET /mypage.php?user_id=[숫자] [점검 내용] 로그인한 사용자(user_id=2)의 마이페이지에서 URL의 user_id 파라미터를 1로 변경 시, 관리자(admin) 계정의 개인정보(이메일, 비밀번호 평문, 권한) 전체가 노출됨. [점검 절차] 1. user1(id=2) 계정으로 로그인 2. /mypage.php 접속 → 정상 본인 정보 확인 3. URL 변조: /mypage.php?user_id=1 (관리자 ID) 4. 결과: admin 계정 정보 노출 [순회 가능 범위] /mypage.php?user_id=1 → admin (관리자) /mypage.php?user_id=2 → user1 /mypage.php?user_id=3 → user2 /mypage.php?user_id=4 → guest [노출 정보] - 아이디, 이메일, 권한, 비밀번호(평문), 가입일
조치 방안
📄 표준 내용
[즉시 조치]
1. 접근 시 세션의 user_id와 요청 user_id 일치 여부 검증:
조치 코드:
if (!isset($_SESSION['user_id'])) { header('Location: login.php'); exit; }
$target_id = (int)$_GET['user_id'];
if ($target_id !== (int)$_SESSION['user_id'] && $_SESSION['role'] !== 'admin') {
die('권한이 없습니다.');
}
2. 관리자 외 타인 정보 접근 차단
[추가 조치]
3. 순차 ID 대신 UUID 사용 (추측 어렵게)
4. 비밀번호 평문 저장 즉시 해시 변경 (bcrypt)