Security Test App - 블랙박스 모의해킹 결과
| URL | http://localhost:3000 |
| 기술 스택 | Ruby on Rails 7.1 / PostgreSQL 15 |
| 테스트 일시 | 2026-01-18 |
| 테스트 유형 | 블랙박스 모의해킹 (Black-box Penetration Testing) |
| # | 취약점 | 심각도 | CVSS | 행정안전부 가이드 |
|---|---|---|---|---|
| 1 | SQL Injection | Critical | 9.8 | 입력데이터 검증 및 표현 |
| 2 | Stored XSS | High | 8.1 | 입력데이터 검증 및 표현 |
| 3 | Mass Assignment | High | 8.8 | 보안기능 - 부적절한 인가 |
| 4 | CSRF 보호 비활성화 | Medium | 6.5 | 보안기능 - CSRF |
| 5 | 인증 우회 (쿠키 조작) | Critical | 9.1 | 보안기능 - 적절한 인증 없는 중요기능 허용 |
설명: 로그인 폼의 email 필드에서 SQL 구문이 그대로 실행되어 인증을 우회할 수 있습니다.
✅ 결과: 비밀번호 검증 없이 로그인 성공 (302 → /users)
설명: 회원가입 시 이름 필드에 스크립트를 삽입하면 회원 목록 페이지에서 스크립트가 실행됩니다.
✅ 결과: 스크립트가 필터링 없이 HTML에 렌더링됨
raw 또는 html_safe 대신 기본 출력을 사용하세요.
설명: 회원가입 시 숨겨진 파라미터 is_admin=true를 추가하면 관리자 권한을 획득할 수 있습니다.
✅ 결과: 일반 사용자가 관리자 권한 획득
is_admin 같은 민감한 필드를 명시적으로 제외하세요.
설명: CSRF(Cross-Site Request Forgery) 토큰 검증이 비활성화되어 있어 외부 사이트에서 요청을 위조할 수 있습니다.
✅ 결과: CSRF 토큰 없이 요청 처리됨
protect_from_forgery with: :exception을 활성화하세요.
설명: 세션 토큰이 단순 사용자 ID로 설정되어 있어 쿠키 값만 변경하면 다른 사용자로 로그인할 수 있습니다.
✅ 결과: 해당 ID의 사용자로 인증됨
httponly와 secure 플래그를 설정하세요.
| 취약점 | 권고 조치 |
|---|---|
| SQL Injection | Prepared Statement / Parameterized Query 사용 |
| Stored XSS | 출력 시 HTML 이스케이프 (raw 대신 기본 출력) |
| Mass Assignment | Strong Parameters에서 민감 필드 제외 |
| CSRF | protect_from_forgery 활성화 |
| 인증 우회 | 암호화된 세션 토큰 + httponly/secure 플래그 |