기록하는 공부

CRLF 인젝션 / HTTP 응답 스플리팅 (HTTP response splitting) 본문

정보보안/보안 공부

CRLF 인젝션 / HTTP 응답 스플리팅 (HTTP response splitting)

bbakbbak 2024. 2. 1. 23:18
728x90
반응형

 

 

CSLF Injection

 

 

HTTP 메시지에서는 줄 바꿈을 나타내기 위해서 CR(Carriage Return ,\r)LF(Line Feed, \n)라는 특수문자를 사용한다.

이 특수문자를 묶어 CRLF와 같이 함께 사용하는데 CRLF는 메시지의 각 라인이 끝임을 알려주는 중요한 구분자가 된다.

특히, HTTP 메시지에서 헤더와 바디가 구분될 때 빈 줄에는 CRLFCRLF처럼 CRLF가 두 번 사용된다.

 

이름 아스키 코드 URL 인코딩 문자
CR( Carriage Return) ASCII 13 %0D \r
LF(Line Feed) ASCII 10 %0A \n

 

 

CSLF 인젝션 정의

 

  • CRLF 인젝션 : 악의적인 사용자가 웹 애플리케이션에 특수한 개행 문자를 삽입하여 웹 서버와 클라이언트 간의 통신 흐름을 조작하거나 공격
  • HTTP 매개변수 혹은 URL을 수정하여 코드가 실행되거나 데이터 노출, 로그 파일 조작 등을 발생시킬 수 있다.

 

 

CSLF 인젝션 원리

 

  • HTTP 헤더는 보통 CRLF로 끝나며, 공격자는 이를 이용하여 새로운 헤더를 삽입하거나 기존 헤더를 조작하여 악용
  • 주로 Carriage Return (CR)과 Line Feed (LF) 문자가 사용

 

 

CSLF 인젝션 공격 방식

 

  • 헤더 삽입 (Header Injection) : 입력 데이터에 CRLF 문자를 삽입하여 새로운 헤더를 생성하거나 이미 존재하는 헤더를 변경
User-Agent: maliciousUser\r\nInjected-Header: attackPayload\r\n

 

  • 응답 조작 (Response Manipulation) : CRLF Injection을 통해 공격자는 응답 내용을 변경하거나 조작
HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE html><html><body>\r\nHacked Content\r\n</body></html>

 

 

CSLF 인젝션 종류

 

  • 헤더 CRLF 인젝션 (Header CRLF Injection) : HTTP 헤더에 CRLF 문자를 삽입하여 헤더를 조작하는 공격
User-Agent: maliciousUser\r\nInjected-Header: attackPayload\r\n

 

  • 쿠키 CRLF 인젝션 (Cookie CRLF Injection) : HTTP 쿠키 값에 CRLF 문자를 삽입하여 쿠키를 조작하는 공격
Cookie: sessionid=123\r\nSet-Cookie: isAdmin=true\r\n

 

  • 리다이렉션 CRLF 인젝션 (Redirection CRLF Injection) : 리다이렉션 헤더를 조작하여 사용자를 악성 사이트로 리다이렉트 시키는 공격
Location: https://malicious-site.com\r\n

 

  • 메일 헤더 CRLF 인젝션 (Mail Header CRLF Injection) : 이메일의 헤더를 조작하여 스푸핑된 이메일을 전송하는 공격
To: victim@example.com\r\nSubject: Spoofed Subject\r\n

 

  • 로그 기록 CRLF 인젝션 (Log Injection) : 그 기록에 CRLF 문자를 삽입하여 로그를 변조하거나 조작하는 공격
Malicious input detected\r\nAttacker's payload\r\n

 

 

대응방안

 

  • 입력 검증 : 사용자 입력을 받을 때, 적절한 입력 검증 및 이스케이프를 수행하여 CRLF 문자를 필터링
  • 헤더 값 인코딩 : 헤더 값에 대한 인코딩을 수행하여 제어 문자를 방지

 

 

 

 


 

 

 

HTTP 응답 스플리팅 (HTTP response splitting)

 

 

HTTP 응답 스플리팅 정의

 

  • 공격자가 응답 헤더를 조작하여 여러 응답을 하나로 결합하거나 악성 컨텐츠를 삽입하는 공격
  • 주로 CRLF (Carriage Return Line Feed) 문자를 이용하여 수행

 

HTTP 응답 스플리팅 원리

 

  • CRLF 문자 삽입 : 공격자는 입력 데이터에 CRLF 문자 (\r\n)를 삽입하여 응답 헤더를 조작
  • 응답 분할 : 삽입된 CRLF 문자를 기반으로 여러 개의 응답이 하나의 응답으로 인식되어 클라이언트에 전송
  • 악성 응답 헤더 삽입 : 공격자는 삽입된 CRLF을 이용하여 악성 헤더를 추가하거나 원하는 내용을 삽입

 

 

HTTP 응답 스플리팅 공격 방식

 

  • 헤더 분리 (Header Splitting) : 공격자는 응답 헤더를 두 개 이상의 부분으로 나누어 클라이언트로 전송함으로써 클라이언트는 공격자가 추가한 헤더를 갖는 새로운 응답을 해석
HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nMaliciousHeader: attackPayload\r\n\r\nInjected Content

 

  • 리다이렉션 : 공격자는 리다이렉션 헤더를 삽입하여 클라이언트를 악성 사이트로 리다이렉트
HTTP/1.1 302 Found\r\nLocation: https://malicious-site.com\r\n\r\n

 

 

 

대응 방안

 

  • 입력 유효성 검사 : 입력값에 대한 검증 및 이스케이프를 통해 CRLF 문자를 필터링하거나 대체
  • 헤더 값 검증 : 서버에서 생성되는 응답 헤더 값에 대해 검증을 수행하여 이상한 문자열이나 CRLF 문자를 제거

 

 

 

 


 

 

CRLF 인젝션과 HTTP 응답 스플리팅 차이

 

  목적 공격 방식 예시
CRLF 인젝션 - 주로 HTTP 헤더에 삽입된 제어 문자를 통해 공격자가 응용 프로그램의 동작을 변경하거나 악용
- CRLF 문자를 삽입하여 헤더를 조작
주로 입력 값에 CRLF 문자를 삽입하여 새로운 헤더를 생성하거나 기존 헤더를 조작
User-Agent: maliciousUser\r\nInjected-Header: attackPayload\r\n
HTTP 응답 스플리팅 응답 헤더를 조작하여 여러 응답을 하나로 결합하거나 악성 컨텐츠를 삽입하는 것이 목적 주로 CRLF 문자를 이용하여 응답 헤더를 분할하고, 그 사이에 악성 헤더나 컨텐츠를 삽입 HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nMaliciousHeader: attackPayload\r\n\r\nInjected Content

 

 

■ 차이점

  • 대상
    • CRLF 인젝션은 주로 서버에서 사용자 입력을 받는 부분에서 발생
    • HTTP 응답 스플리팅은 주로 서버에서 생성된 응답 헤더를 조작하는 부분에서 발생
  • 목적
    • CRLF 인젝션은 주로 헤더 조작을 통한 다양한 공격을 목적
    • HTTP 응답 스플리팅은 주로 응답의 왜곡이나 여러 응답을 하나로 합치는 것이 목적

 

 

 

 


 

 

참고자료

 

 

OWASP Top 10에 포함되지 않은 10가지 일반적인 웹 취약점 | monitorapp

OWASP Top 10을 벗어난 위협들은 비교적 덜 강조되는 경향이 있습니다. 따라서, 신규 OWASP Top 10이 공개될 것으로 예상되는 이 시점에, OWASP Top 2017에 포함되지 않은 기타 위협들을 알아봅니다.

www.monitorapp.com

 

 

728x90
반응형