티스토리 뷰

Security/보안 취약점

HTTP응답 분할

0bliviat3 2025. 3. 23. 22:45

공격자가 잘못된 입력검증을 악용해 서버의 HTTP 응답을 조작하는 취약점이다.

 

공격유형

 

1. 클라이언트측 스크립트 실행: Content-Typehtml로 설정하고 javascript 코드 주입

위험성: 사용자 브라우저에서 악성 스크립트 실행가능하다.

 

2. 웹 캐시 오염: 캐시 제어 헤더를 조작하여 악성 콘텐츠를 캐시에 저장

위험성: 다수의 사용자에게 악성 컨텐츠가 전달될수 있다.

 

3. 보안헤더 무력화: 브라우저 보안 메커니즘을 비활성화 하는 헤더들을 주입

위험성: XSS 방어, CORS 정책 등 보안 메커니즘을 우회 가능하다.

 

응답분할이 발생할 수 있는 함수

 

1. HttpServletResponse.setHeader(String name, String value)

응답헤더에 사용자 입력을 삽입할 때 개행문자가 포함될 경우 새로운 헤더가 추가되거나 분할이 발생할수 있다.

 

2. HttpServletResponse.addHeader(String name, String value)

setHeader와 동일하게 동작하며, 헤더에 값을 추가하기 위해 사용되지만 동일한 취약점이 발생할수 있다.

 

3. HttpServletResponse.sendReadirect(String location)

리디렉션 URL에 사용자 입력값이 포함될 경우 개행문자로 인해 헤더가 분리될수 있다.

 

4. HttpServletResponse.addCookie(Cookie cookie)

쿠키의 이름이나 값에 사용자 입력을 포함할 경우 취약점 발생 가능하다.

 

5. HttpServletResponse.setContentType(String type)

content-type 헤더에 사용자 입력값을 그대로 삽입할 경우 취약점 발생 가능하다.

 

6. PrintWriter.println()/PrintWriter.write()

응답 본문에 사용자 입력값을 처리할 때, 악성 헤더 또는 데이터가 포함 될 경우 문제가 발생할수 있다.

 

7. HttpServletResponse.setStatus(int sc, String sm)

Http 응답 상태 메시지에 사용자 입력값을 포함할 경우 취약점 발생 가능하다.

 

대책

개행문자 검증 후 헤더를 자동생성하는 방식으로 방어할수 있다.

 

public static String sanitizeUrl(String inputUrl) {
    try {
        // URL 디코딩 처리
        String decodedUrl = URLDecoder.decode(inputUrl, StandardCharsets.UTF_8);

        // CRLF 문자 포함 여부 확인 (있으면 차단)
        if (decodedUrl.contains("\r") || decodedUrl.contains("\n")) {
            throw new IllegalArgumentException("Invalid URL: CRLF characters are not allowed");
        }

        return decodedUrl; // 검증된 URL 반환
    } catch (IllegalArgumentException ex) {
        System.err.println("Error occurred: " + ex.getMessage());
        return "/index.html"; // 예외 발생 시 안전한 페이지로 이동
    }
}

 

또는 Spring sendRedirect() 사용하면된다. (자동으로 안전한 헤더 생성)

response.sendRedirect(sanitizedUrl);

'Security > 보안 취약점' 카테고리의 다른 글

CSRF  (0) 2025.03.20
경로 조작  (0) 2025.03.19
Template Injection (feat. XSS)  (0) 2025.03.18
SQL Injection  (0) 2025.03.17
보안 아키텍처  (0) 2025.03.17
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함