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

Cryptographic Failures

CVSS Score
7.5
high

민감한 데이터가 암호화 없이 저장·전송되거나, 약한 알고리즘(MD5, SHA1)을 사용하는 취약점입니다.

💥 공격 시 영향

  • 비밀번호 평문 저장 → DB 유출 시 즉시 노출
  • MD5 해시 → 레인보우 테이블로 수 초 만에 크래킹
  • 현재 비밀번호 확인 없이 변경 가능

🎯 이 사이트에서 실습하기

평문 비밀번호
SELECT * FROM users 실행 후 password 열 확인
실습 페이지 →
비밀번호 변경
현재 비밀번호 없이 새 비밀번호 설정 가능
실습 페이지 →

💻 취약 코드 vs 안전한 코드

❌ 취약한 코드
// ❌ 취약: 평문 저장
run('INSERT INTO users (username, password) VALUES (?, ?)',
  [username, password]); // password = "test1234"

// ❌ 취약: MD5 사용 (alice의 password)
// 5f4dcc3b5aa765d61d8327deb882cf99 → "password"
✅ 안전한 코드
// ✅ 안전: bcrypt 해싱
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash(password, 12);
run('INSERT INTO users (username, password) VALUES (?, ?)',
  [username, hash]);

// ✅ 비밀번호 변경 시 현재 비밀번호 확인
const valid = await bcrypt.compare(currentPw, user.password);
if (!valid) return res.status(400).json({ error: '현재 비밀번호 불일치' });

🛡️ 대응 방안

📚 참고 자료

OWASP A02:2021 CWE-256: Plaintext Storage of Password NIST SP 800-63B