DongDD's IT

HTTP Response Splitting (HTTP 응답분할, CRLF) 본문

IT 보안/Web

HTTP Response Splitting (HTTP 응답분할, CRLF)

DongDD 2017. 9. 26. 16:13

HTTP Response Splitting (HTTP 응답분할)


HTTP Response Splitting

- HTTP Request에 있는 파라미터가 HTTP Response 헤더로 다시 전달되는 경우 파라미터내에 CR, LF가 있는 경우 HTTP 응답 분할이 일어날 수 있음

- CRLF를 통해 응답을 2개 이상으로 분리

 ref) CRLF - 보통 HTTP 헤더의 끝 라인에 들어가 각 라인을 구분하는 구분자로 사용

- CR : Carriage Return (%0D)

-> 커서의 위치를 맨 앞으로 옮김

- LF : Line Feed (%0A)

-> 새로운 라인을 만듬




HTTP 응답 분할 Injection

- CRLF를 이용해 생기는 취약점을 통해 HTTP Response에 악의적인 코드나 스크립트를 삽입해 XSS를 생성하거나 캐시를 조작할 수 있음

- CRLF를 이용하여 Response를 두개 이상으로 분리하면서 원래의 HTTP Response와 별개로 새로운 HTTP Response를 만들어 조작할 수 있음


%0D%0A%20+New Header+%0D%0A와 같은 공격 구문을 사용할 수 있다.


서버 측에서 재전송하는 파라미터에서 새로운 라인을 만들어 헤더를 조작할 수 있게 된다.



만약 위와 같이 client가 보낸 data가 그대로 Response header에 담겨 돌아올 경우 CRLF를 이용해 Header조작이 가능하게 된다.


user_id를 그대로 넘겨준후 CRLF를 이용해 새로운 라인을 만들어 Header를 조작할 수 있다.

New Header부분에 새로운 Header를 추가하게 된다면 HTTP Response에서는 헤더 조작이 된 Response가 오게 될 것이다.


HTTP 응답 분할 대응 방안


- 일반적인 방법으로 HTTP Response Header에 입력되는 값을 필터링하는 방법이 있다. CR(%0D), LF(%0A)를 제거하거나 치환하는 입력 값 검증을 실시하여 헤더가 분할되는 것을 방지할 수 있다.

Comments