Recent Posts
Recent Comments
Link
06-30 12:53
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

JAVA 보안 HTTP Response Splitting 본문

DEV&OPS/Java

JAVA 보안 HTTP Response Splitting

ALEPH.GEM 2022. 8. 16. 15:34

HTTP Response Splitting(HTTP 응답 분할)

HTTP request에 들어있는 인자값이 HTTP response header에 포함되어 사용자에게 다시 전달 될 때, 입력값에 CR(캐리지리턴), LF(라인피드)같은 줄바꿈 문자가 존재하면 response가 2개 이상으로 분리될 수 있는데, 공격자가 첫번째 응답을 종료시키고 두 번째 응답에 악의적인 코드를 주입해서 XSS 및 캐시를 훼손하는 공격 등을 할 수 있습니다.

외부 입력값을 HTTP response의 응답 헤더(Set Cookie 등)에 포함시킬 경우 CR, LF를 제거하거하거나 오작동을 일으킬만한 소지가 있는 문자들을 제거하여 방어합니다. 

 

안전하지 않은 예

//생략
response.setContentType("text/html");
String author = request.getParameter("authorName");
Cookie cookie = new Cookie("replidedAuthor", author);
cookie.setMaxAge(1000);
reponse.addCookie(cookie);
RequestDispatcher frd = request.getRequestDispatcher("cookieTest.jsp");
frd.forward(request, response);
//생략

예제에서 외부 입력값을 사용해서 반환되는 쿠키의 값을 설정하는데 공격자가 Wiley Hacker\r\nHTTP/1.1 200 OK\r\n을 authorName 으로 설정하면 의도하지 않은 두개의 페이지가 전달되어 두번째 응답 페이지는 공격자가 마음대로 수정이 가능하게 됩니다.

 

안전한 코드의 예

//생략
response.setContentType("text/html");
String author = request.getParameter("authorName");
if(author == null || "".equals(author)) return;
String filtered_author = author.replaceAll("\r", "").replaceAll("\n","");
Cookie cookie = new Cookie("replidedAuthor", filtered_author);
cookie.setMaxAge(1000);
cookie.setSecure(true);
response.addCookie(cookie);
RequestDispatcher frd = request.getRequestDispatcher("cookieTest.jsp");
frd.forward(request, response);
//생략

 

 

 

참고

http://cwe.mitre.org/data/definitions/113.html

 

CWE - CWE-113: Improper Neutralization of CRLF Sequences in HTTP Headers ('HTTP Request/Response Splitting') (4.8)

div.collapseblock { display:inline} CWE-113: Improper Neutralization of CRLF Sequences in HTTP Headers ('HTTP Request/Response Splitting')Weakness ID: 113Abstraction: VariantStructure: Simple The software receives data from an HTTP agent/component (e.g., w

cwe.mitre.org

 

 

 

 

 

 

 

 

 

 

 

 

728x90