CLRF

JungChihoon·2020년 5월 18일
0

WEB

목록 보기
7/10

아래 그림과 같이 HTTP를 알아보면서 request와 response의 header와 body 사이의 공백을 CRLF라고 적혀있어 공백을 뭐 이렇게 어렵게 적어놨지라고 생각하고 넘어갔다.

하지만 모르면 알고 넘어가는 것이 올바른 주니어의 자세이므로 알아보자.

정의

우선 CLRF란 무엇인가? 생각보다 간단하다.
CR(Carrige Return: \r): 커서의 위치를 현재 줄의 맨 처음으로 보내는 기능
LF(Line Feed: \n): 커서를 다음 줄로 옮기는 기능
을 하는 개행 문자열의 줄임말을 합친 것이다.


CLRF의 취약점

: HTTP Response Splitting (HTTP 응답분할, CRLF)
CLRF를 알아보다 보니 CLRF의 취약점에 대해 알게 되었다.
개행문자를 통해 응답 내 다른 응답 header를 넣어 공격을 할 수 있다는 점이다.

  • HTTP 응답 분할 Injection
    - CRLF를 이용해 생기는 취약점을 통해 HTTP Response에 악의적인 코드나 스크립트를 삽입해 XSS를 생성하거나 캐시를 조작할 수 있음
    - CRLF를 이용하여 Response를 두개 이상으로 분리하면서 원래의 HTTP Response와 별개로 새로운 HTTP Response를 만들어 조작할 수 있음
    - %0D%0A%20+New Header+%0D%0A와 같은 공격 구문을 사용할 수 있다.
    - 서버 측에서 재전송하는 파라미터에서 새로운 라인을 만들어 헤더를 조작할 수 있게 된다.

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

    • ex) String test = test.replaceAll("\r", "").replaceAll("\n", "")
  • 참조
    https://dongdd.tistory.com/52
    https://m.blog.naver.com/skinfosec2000/220694143144

profile
주니어 개발자

0개의 댓글