티스토리 뷰

반응형

 

 

 

가. 원인

  - 개행문자(CR/LF)가 포함된 외부입력값을 응답헤더에 사용할 경우

 

 

나. 영향

  - 두 번째 응답에 악성코드를 주입하여, XSS 공격 및 캐시훼손 공격

 

 

다. 보안대책

  - HTTP 응답헤더에 사용하는 외부입력값에 개행문자를 제거 후 사용

 

라. 안전한 코드

1. 개행문자 삭제

 

  // Set-Cookie에 입력값 저장

  String lastLogin = request.getParaeter("last_login");

  lastLogin = lastLogin.replaceAll("[\\r\\n]", "");

  Cookie c = new Cookie("LASTLOGIN", lastLogin);

  response.addCookie( c );

 

 

  // Location에 입력값 저장

  String nextURL = request.getParameter("url").replaceAll( "[\\r\\n]", "");

  response.sendRedirect( nextURL );

 

 

  // 헤더값에 입력값 저장

  String userToken = request.getParameter("token").replaceAll( "\\r\\n]", "");

  response.setHeader( userToken );

 

 

마. 진단방법

<개행문자 필터링>

  1. Response 헤더에 변수가 사용되는지 확인

  2. 외부입력값을 변수로 사용하는지 확인

  3. 개행문자를 필터링 후 사용하는지 확인

 

 

 

바. 정/오탐 케이스

<정탐 케이스>

  1. 검증없이 입력값을 헤더에 값을 설정할 경우

  2. 검증없이 입력값을 쿠키에 설정할 경우

 

<오탐 케이스>

  1. 외부 입력값에 개행문자를 필터링 후 헤더/쿠키에 사용 시

  2. getContextPath() 함수는 내장함수로 context path를 리턴하므로 양호

  3. 문자열 타입이 아닌 입력값이 헤더에 사용될 경우

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday