피드로 돌아가기
Dev.toSecurity
원문 읽기
Production 코드 추출 기반 QR 로그인 보안 취약점 11종 제거 및 아키텍처 고도화
Extracting a QR login from a production app and closing 11 security holes before merge
AI 요약
Context
기존 Production 환경의 QR 로그인 모듈을 핵심 코어로 추출하는 과정에서 단순 기능 작동과 보안 안전성 간의 괴리 발생. 특히 Token 노출, Session Fixation, SSRF 취약점 등 11가지의 Critical한 보안 홀이 발견된 레거시 구조를 분석함.
Technical Solution
- Token 유출 방지를 위해 DB 내 Plaintext 저장 방식을 SHA-256 Hashing 방식으로 변경하여 데이터베이스 유출 시에도 Secret 보호
- QR 코드 스캔 시 임의의 URL로 요청을 보내는 구조를 제거하고 Same-origin 및 특정 Path 검증 로직을 도입하여 SSRF 및 Open-redirect 차단
- Session Fixation 방지를 위해 Auth::login() 이전 단계에서 session()->regenerate()를 선행 수행하는 순서 제어 설계
- 무분별한 TTL 연장으로 인한 영구 세션 가능성을 차단하기 위해 생성 시점 기준의 Absolute cap 도입
- 에러 발생 시 500 Internal Server Error 대신 404 Not Found를 반환하도록 Decryption 로직을 제거하고 단순 String Comparison으로 대체
- Activity Log에 Token이 Plaintext로 기록되는 문제를 해결하기 위해 Route Parameter 기반의 Secret Redaction 시스템 구축
실천 포인트
- DB 저장 시 Bearer Token은 패스워드와 동일하게 Hashing 처리했는가? - 사용자 입력 기반의 URL 요청 시 Origin 및 Path-regex 검증 프로세스가 존재하는가? - 로그인 처리 시 세션 재생성(Regenerate)이 인증 완료 전에 이루어지는가? - 감사 로그(Audit Log) 기록 시 민감한 경로 파라미터가 마스킹 처리되는가? - 만료 시간 체크 시 단순 갱신이 아닌 절대적 만료 시점(Absolute Expiry)이 설정되었는가?