피드로 돌아가기
Dev.toSecurity
원문 읽기
HTTP Parsing 모호성 제거를 통한 Request Smuggling 및 Splitting 원천 차단
Request Smuggling vs Request Splitting in Spring Boot
AI 요약
Context
Reverse Proxy와 Backend Server 간의 HTTP Request 해석 방식 차이로 인한 Connection 상태 불일치 발생. User-controlled input이 Response Header에 그대로 반영될 때 CRLF 주입을 통해 HTTP 응답 구조를 임의로 조작하는 취약점 노출.
Technical Solution
- Content-Length와 Transfer-Encoding 헤더 동시 존재 시 요청을 즉시 거부하는 Tomcat 9.0.31+ 설정 적용으로 Framing 모호성 제거
- HTTP/2 End-to-End 적용을 통한 프로토콜 레벨의 Request Framing 구조 변경 및 Smuggling 벡터 제거
- Header Value 주입 전
\r,\n,\x00문자를 제거하는 Sanitization 유틸리티 강제 적용으로 CRLF Injection 차단 - 단순 필터링을 넘어 Allowlist 기반의 Redirect Target 검증 로직을 구현하여 비정상적인 외부 도메인 전송 원천 방지
- RestTemplate 및 WebClient의 Header Forwarding 시 명시적 Allowlist를 적용하여 불필요한 헤더 전파 억제
실천 포인트
- Tomcat 버전
9.
0.31 및
1
0.
0.0-M5 이상 유지 및 `server.tomcat.reject-illegal-header=true` 설정 확인 - 모든 Redirect URL 및 Header 값 할당 전 CRLF 문자 제거 로직 포함 여부 검토 - Semgrep 등 정적 분석 도구를 CI 단계에 도입하여 Header Sanitization 미적용 코드 탐지 - Reverse Proxy(Nginx, ALB 등)의 Header Normalization 설정 및 HTTP/2 지원 여부 감사 - Redirect 대상 도메인의 Allowlist 기반 검증 로직 구현 여부 확인