CRLF Injection, 또는 HTTP 응답 분할이라고도 불리는 이 취약성은 공격자가 입력 필드에 캐리지 리턴(CR)과 라인 피드(LF) 문자를 삽입할 때 발생하는 웹 애플리케이션 보안 취약성을 의미합니다. 이 특정 문자는 HTTP 헤더에서 줄의 끝을 표시하는 데 사용됩니다. 악의적으로 삽입될 경우, 서버가 보낸 응답을 조작하고 무단 동작을 수행할 수 있는 잠재력을 갖습니다.
CRLF Injection 공격은 서버가 HTTP 헤더를 처리하는 방식을 악용합니다. 서버가 클라이언트에게 HTTP 응답을 보낼 때, 응답은 여러 줄의 텍스트로 구성되며 각 줄은 캐리지 리턴(CR)과 라인 피드(LF) 문자로 끝납니다. 이 문자는 헤더와 응답의 본문을 구분하는 역할을 합니다.
CRLF Injection을 목표로 한 공격은 URL 매개 변수나 폼 입력 같은 웹 애플리케이션 입력 필드를 악용하는 것을 포함합니다. 공격자는 이러한 필드에 CR과 LF 문자를 의도적으로 삽입하여 서버의 응답에 추가 헤더를 삽입하거나 기존 헤더를 수정합니다. 이러한 조작은 크로스 사이트 스크립팅(XSS), 세션 고정, 그리고 캐시 중독을 포함하되 이에 국한되지 않는 다양한 유형의 공격의 발판이 됩니다.
CRLF Injection 공격의 메커니즘을 더 잘 이해하려면 다음 단계를 고려하십시오:
입력 필드 식별: 공격자는 자신의 악성 데이터를 주입할 수 있는 URL 매개 변수 또는 폼 입력과 같은 웹 애플리케이션 입력 필드를 찾습니다.
CR 및 LF 문자 삽입: 공격자는 전략적으로 입력 필드에 캐리지 리턴(CR)과 라인 피드(LF) 문자를 삽입합니다. 이 문자는 HTTP 헤더의 줄 끝을 표시하는 데 사용됩니다.
응답 헤더 조작: 서버가 악성 입력을 처리하면서, CR과 LF 문자를 줄 바꿈으로 해석하여 입력을 별도의 줄로 분할합니다. 이를 통해 공격자는 서버의 응답에 추가 헤더를 주입하거나 기존 헤더를 수정할 수 있습니다.
조작된 헤더의 속성: 공격자는 주입된 헤더와 관련된 다양한 속성을 조작할 수 있습니다. 예를 들어, Location
헤더를 설정하여 사용자들이 악성 웹사이트로 리디렉션하도록 만들 수 있습니다. 또한 Content-Type
헤더를 변경하여 응답의 진정한 성격을 숨길 수 있습니다. 임의의 헤더를 주입함으로써 무단 동작을 수행할 수도 있습니다.
CRLF Injection 공격은 악성 행위를 수행할 수 있게 합니다. 이러한 공격의 몇 가지 예시는 다음과 같습니다:
크로스 사이트 스크립팅 (XSS): 공격자는 Content-Type
또는 Location
헤더를 변경하는 악성 헤더를 주입함으로써 사용자의 브라우저가 임의의 스크립트를 실행하도록 속입니다. 이는 민감한 정보의 도난이나 사용자의 가장으로 이어질 수 있습니다.
세션 고정: 공격자는 세션 ID를 특정 값으로 설정하는 헤더를 주입하여 사용자가 로그인한 후 그 세션을 하이재킹할 수 있습니다. 결과적으로 공격자는 사용자의 계정과 모든 관련 권한에 무단으로 접근합니다.
캐시 중독: CRLF Injection은 캐시 헤더를 조작하여 캐시 중독 공격을 가능하게 합니다. 악성 헤더를 주입함으로써 공격자는 캐시에 유해한 콘텐츠를 삽입할 수 있으며, 이는 아무것도 모르는 사용자들에게 제공됩니다. 이러한 공격은 악성 소프트웨어의 배포나 의도하지 않은 수신자에게 민감한 정보가 노출되는 결과를 초래할 수 있습니다.
CRLF Injection 공격의 위험을 완화하기 위해 다음과 같은 예방 팁을 고려해야 합니다:
입력 검증 및 정화: 웹 애플리케이션은 CRLF 시퀀스를 식별하고 차단하기 위해 입력 검증 및 정화 메커니즘을 구현해야 합니다. 특히 URL 매개 변수와 폼 입력에서의 모든 사용자 입력은 철저히 검증되어야 합니다. 알파벳 및 허용 목록에 포함된 문자만 허용하는 엄격한 검증 조치를 구현하면 위험을 상당히 줄일 수 있습니다.
웹 애플리케이션 방화벽 (WAF): 웹 애플리케이션 인프라의 일부로 웹 애플리케이션 방화벽(WAF)를 도입하십시오. WAF는 들어오고 나가는 HTTP 트래픽을 모니터링하며, CRLF Injection 공격을 효과적으로 탐지하고 방지할 수 있습니다. 요청 및 응답 헤더를 분석하여, WAF는 의심스러운 또는 악성 패턴을 플래그하고 필요에 따라 트래픽을 차단하거나 수정합니다.
정기적인 업데이트: 웹 서버 및 애플리케이션 프레임워크를 최신 상태로 유지하십시오. CRLF Injection 공격과 관련된 알려진 취약점을 패치하기 위해 웹 애플리케이션의 모든 구성 요소, 포함 서버를 정기적으로 업데이트하십시오. 소프트웨어 공급업체에서 배포한 최신 보안 패치 및 업데이트에 대한 정보를 유지하고, 시스템의 보안을 보장하기 위해 신속히 이를 적용하십시오.
이러한 예방 조치를 구현하면 CRLF Injection 공격의 위험을 상당히 줄이고 웹 애플리케이션 및 사용자 데이터의 보안을 지킬 수 있습니다.
관련 용어