⚠️ 훈련용 취약 웹사이트 — 실제 거래소가 아닙니다
취약점 목록 A01
A01

Broken Access Control

CVSS Score
9.8
critical

사용자가 허가되지 않은 기능이나 데이터에 접근할 수 있는 취약점입니다. 인가(Authorization) 로직이 없거나 잘못 구현된 경우 발생합니다.

💥 공격 시 영향

  • 다른 유저의 개인정보·잔액·거래내역 열람
  • 관리자 페이지 무단 접근
  • 타인의 데이터 수정·삭제

🎯 이 사이트에서 실습하기

IDOR - 계좌 조회
URL의 ID만 바꿔 타인 계좌 열람
실습 페이지 →
관리자 페이지 우회
쿼리 파라미터로 권한 체크 우회
실습 페이지 →
지갑 IDOR
타인의 지갑 주소 삭제 가능
실습 페이지 →

💻 취약 코드 vs 안전한 코드

❌ 취약한 코드
// ❌ 취약: user_id 검증 없음
router.get('/account/:id', requireLogin, (req, res) => {
  const user = get('SELECT * FROM users WHERE id = ?',
    [req.params.id]); // 누구 ID든 조회
  res.render('account', { user });
});
✅ 안전한 코드
// ✅ 안전: 본인 데이터만 접근
router.get('/account/:id', requireLogin, (req, res) => {
  if (req.params.id != req.session.user.id) {
    return res.status(403).render('error',
      { message: '접근 권한이 없습니다.' });
  }
  const user = get('SELECT * FROM users WHERE id = ?',
    [req.session.user.id]);
  res.render('account', { user });
});

🛡️ 대응 방안

📚 참고 자료

OWASP A01:2021 CWE-284: Improper Access Control