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

Insecure Design

CVSS Score
8.1
high

보안을 설계 단계에서 고려하지 않아 발생하는 근본적인 로직 결함입니다. 코드 수정만으로는 해결되지 않고 재설계가 필요합니다.

💥 공격 시 영향

  • 음수 송금으로 잔액 무한 증가
  • Mass Assignment로 role=admin 권한 상승
  • 바우처 레이스 컨디션으로 무제한 사용

🎯 이 사이트에서 실습하기

음수 금액 송금
amount=-1000000 입력 → 잔액 증가
실습 페이지 →
Mass Assignment
role=admin 파라미터 추가 후 제출
실습 페이지 →

💻 취약 코드 vs 안전한 코드

❌ 취약한 코드
// ❌ 취약: 금액 검증 없음
const amt = parseFloat(amount); // 음수 가능
run('UPDATE users SET balance_krw = balance_krw - ? WHERE id=?',
  [amt, user.id]); // -(-1000000) = +1000000

// ❌ 취약: Mass Assignment
const role = req.body.role || user.role; // 클라이언트 입력 신뢰
run('UPDATE users SET role=? WHERE id=?', [role, user.id]);
✅ 안전한 코드
// ✅ 안전: 양수 검증 + 잔액 확인
if (amt <= 0) return res.status(400).json({ error: '금액은 0보다 커야 합니다' });
if (user.balance_krw < amt) return res.status(400).json({ error: '잔액 부족' });

// ✅ 안전: 허용 필드만 업데이트
const { email, username } = req.body; // role 제외
run('UPDATE users SET email=?, username=? WHERE id=?',
  [email, username, user.id]);

🛡️ 대응 방안

📚 참고 자료

OWASP A04:2021 CWE-20: Improper Input Validation CWE-915: Improperly Controlled Modification