🎭 HTTP Request Smuggling이란?

정의

HTTP Request Smuggling은 프론트엔드 프록시와 백엔드 서버가 HTTP 요청 경계를 다르게 해석할 때 발생하는 보안 취약점이다. 공격자는 이 차이를 이용해 요청을 끼워 넣거나, 의도하지 않은 요청 분리를 유도할 수 있다.

🧩 발생 원인

  • Content-LengthTransfer-Encoding 해석 차이
  • 프록시와 백엔드의 HTTP 파서 동작 차이
  • 잘못된 요청 분리 처리
  • HTTP/1.1 연결 유지 방식에서의 해석 불일치

포인트

핵심은 같은 요청을 두 서버가 다르게 본다는 점이다. 이 차이가 생기면 공격자는 요청 경계를 흐릴 수 있다.

🔍 대표적인 형태

CL.TE

  • 프론트엔드는 Content-Length를 기준으로 해석
  • 백엔드는 Transfer-Encoding을 기준으로 해석

TE.CL

  • 프론트엔드는 Transfer-Encoding을 기준으로 해석
  • 백엔드는 Content-Length를 기준으로 해석

⚠️ 영향

  • 요청 위조
  • 세션 탈취
  • 캐시 오염
  • 인증 우회 시도
  • 후속 요청 변조

[!important] 주의 단순한 입력값 검증만으로는 해결되지 않는다. 프록시와 백엔드의 요청 파싱 정책을 일관되게 맞추는 것이 중요하다.

🛠️ 방어 방법

  • Content-LengthTransfer-Encoding을 동시에 허용하지 않기
  • 프론트엔드와 백엔드의 HTTP 파서 정책 통일
  • 최신 버전의 웹 서버와 프록시 사용
  • 의심스러운 요청 헤더 차단
  • 프록시 계층과 애플리케이션 계층의 로그를 함께 확인
  • 가능하면 HTTP/2 같은 구조적 차이가 적은 프로토콜을 검토

🧪 점검 포인트

  • Content-LengthTransfer-Encoding이 함께 들어오는 요청이 있는가
  • 프록시와 백엔드가 같은 파서 규칙을 쓰는가
  • 요청 경계가 애매한 입력이 허용되는가
  • 캐시 계층이 요청 분리를 잘못 처리하는가

📌 함께 보면 좋은 문서

  • HTTP
  • HTTP Request
  • HTTP Response
  • Proxy 서버
  • Nginx

연결문서

댓글남기기