HTTP Request Smuggling
🎭 HTTP Request Smuggling이란?
정의
HTTP Request Smuggling은 프론트엔드 프록시와 백엔드 서버가 HTTP 요청 경계를 다르게 해석할 때 발생하는 보안 취약점이다. 공격자는 이 차이를 이용해 요청을 끼워 넣거나, 의도하지 않은 요청 분리를 유도할 수 있다.
🧩 발생 원인
Content-Length와Transfer-Encoding해석 차이- 프록시와 백엔드의 HTTP 파서 동작 차이
- 잘못된 요청 분리 처리
- HTTP/1.1 연결 유지 방식에서의 해석 불일치
포인트
핵심은 같은 요청을 두 서버가 다르게 본다는 점이다. 이 차이가 생기면 공격자는 요청 경계를 흐릴 수 있다.
🔍 대표적인 형태
CL.TE
- 프론트엔드는
Content-Length를 기준으로 해석 - 백엔드는
Transfer-Encoding을 기준으로 해석
TE.CL
- 프론트엔드는
Transfer-Encoding을 기준으로 해석 - 백엔드는
Content-Length를 기준으로 해석
⚠️ 영향
- 요청 위조
- 세션 탈취
- 캐시 오염
- 인증 우회 시도
- 후속 요청 변조
[!important] 주의 단순한 입력값 검증만으로는 해결되지 않는다. 프록시와 백엔드의 요청 파싱 정책을 일관되게 맞추는 것이 중요하다.
🛠️ 방어 방법
Content-Length와Transfer-Encoding을 동시에 허용하지 않기- 프론트엔드와 백엔드의 HTTP 파서 정책 통일
- 최신 버전의 웹 서버와 프록시 사용
- 의심스러운 요청 헤더 차단
- 프록시 계층과 애플리케이션 계층의 로그를 함께 확인
- 가능하면 HTTP/2 같은 구조적 차이가 적은 프로토콜을 검토
🧪 점검 포인트
Content-Length와Transfer-Encoding이 함께 들어오는 요청이 있는가- 프록시와 백엔드가 같은 파서 규칙을 쓰는가
- 요청 경계가 애매한 입력이 허용되는가
- 캐시 계층이 요청 분리를 잘못 처리하는가
📌 함께 보면 좋은 문서
- HTTP
- HTTP Request
- HTTP Response
- Proxy 서버
- Nginx
댓글남기기