피드로 돌아가기
Request Smuggling vs Request Splitting in Spring Boot
Dev.toDev.to
Security

HTTP Parsing 모호성 제거를 통한 Request Smuggling 및 Splitting 원천 차단

Request Smuggling vs Request Splitting in Spring Boot

Stefan2026년 6월 4일11intermediate

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 기반 검증 로직 구현 여부 확인

원문 읽기