피드로 돌아가기
PicoCTF Web Challenge Writeup: NO FA
Dev.toDev.to
Security

Client-side Session 노출 및 Weak OTP 설계 결함 분석

PicoCTF Web Challenge Writeup: NO FA

Yogeshwar Peela2026년 5월 27일3intermediate

Context

Flask 기반 웹 애플리케이션에서 2FA(Two-Factor Authentication) 시스템을 구현했으나, 세션 관리 및 OTP 생성 로직의 설계 결함으로 인해 보안 체계가 무력화된 사례임. 특히 인증 상태와 비밀 정보를 Client-side Cookie에 의존하여 저장한 구조적 한계가 존재함.

Technical Solution

  • SHA-256 기반의 단순 해싱 구조를 통한 Password 취약점 분석 및 Dictionary Attack을 통한 계정 탈취
  • Flask Session Cookie의 Signed-but-not-Encrypted 특성을 이용한 otp_secret 값의 Plaintext 추출
  • random.randint를 사용한 9,000개 규모의 협소한 OTP Keyspace 식별 및 Brute-force 가능성 분석
  • 서버 측 검증 로직 내 Rate Limiting 부재를 통한 자동화된 OTP 추측 공격 경로 확보
  • Client-side 세션 저장 방식에서 Server-side Session(Redis, DB) 방식으로의 아키텍처 전환 필요성 도출

- Flask Session 사용 시 민감 정보 저장 금지 및 Server-side Session 도입 검토 - `random` 모듈 대신 `secrets` 모듈을 사용한 Cryptographically Secure한 난수 생성 적용 - Raw SHA-256 대신 bcrypt 또는 argon2와 같은 Key Stretching 알고리즘 도입 - RFC 6238 표준 기반의 TOTP 라이브러리(pyotp 등) 적용으로 자체 구현 리스크 제거 - 모든 인증 엔드포인트에 Rate Limiting 및 Account Lockout 정책 설정

원문 읽기