HTTP 응답 분할 공격
HTTP Response Splitting
HTTP 응답 헤더는 응답 분할 공격에 취약하지 않아야 합니다
설명
HTTP 응답 분할(HTTP Response Splitting) 공격은 공격자가 HTTP 응답 헤더에 개행 문자를 주입하여, 원래의 응답과 추가적인 임의의 HTTP 응답을 분리하는 공격 기법입니다. 이로 인해 추가적인 응답이 클라이언트에게 전송되어 XSS(Cross-Site Scripting), 캐시 오염(Cache Poisoning) 등의 공격이 발생할 수 있습니다.
잠재적 영향
XSS (Cross-Site Scripting): 악의적인 스크립트가 삽입되어 클라이언트 측에서 실행될 수 있습니다.
캐시 오염(Cache Poisoning): 공격자가 악의적인 데이터를 캐시에 저장하여, 이후의 사용자들이 잘못된 데이터를 받을 수 있습니다.
중요 데이터 노출: 악의적인 응답으로 인해 중요한 데이터가 노출될 수 있습니다.
해결 방법
입력값 검증: 응답 헤더에 삽입되는 모든 입력값에 대해 개행 문자(, )를 필터링합니다.
프레임워크의 보안 기능 사용: Django, Flask, FastAPI 등과 같은 프레임워크에서 제공하는 보안 기능을 사용하여 응답 헤더를 설정합니다.
취약한 코드 및 안전한 코드 예시
Unsafe Django code & Safe Django code
설명:
취약한 코드: 사용자 입력값을 검증하지 않고 그대로 HTTP 응답 헤더에 삽입하여, 공격자가 개행 문자를 포함한 입력값을 통해 응답 분할 공격을 수행할 수 있습니다.
안전한 코드: 정규식을 사용하여 개행 문자(, )를 제거하여, 사용자 입력값이 응답 헤더에 안전하게 삽입되도록 합니다.
Unsafe Flask code & Safe Flask code
설명:
취약한 코드: 사용자 입력값을 검증하지 않고 그대로 HTTP 응답 헤더에 삽입하여, 공격자가 개행 문자를 포함한 입력값을 통해 응답 분할 공격을 수행할 수 있습니다.
안전한 코드: 정규식을 사용하여 개행 문자(, )를 제거하여, 사용자 입력값이 응답 헤더에 안전하게 삽입되도록 합니다.
Unsafe FastAPI code & Safe FastAPI code
설명:
취약한 코드: 사용자 입력값을 검증하지 않고 그대로 HTTP 응답 헤더에 삽입하여, 공격자가 개행 문자를 포함한 입력값을 통해 응답 분할 공격을 수행할 수 있습니다.
안전한 코드: 정규식을 사용하여 개행 문자(, )를 제거하여, 사용자 입력값이 응답 헤더에 안전하게 삽입되도록 합니다.
참조
OWASP: HTTP Response Splitting
Last updated