티스토리 뷰
가. 원인
- 개행문자(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. 문자열 타입이 아닌 입력값이 헤더에 사용될 경우
'Web Analytics > SW 보안약점 진단원' 카테고리의 다른 글
[구현보안] 입력 데이터 검증 및 표현 13 - 보안기능 결정에 사용되는 부적절한 입력값 (0) | 2019.10.04 |
---|---|
[구현보안] 입력 데이터 검증 및 표현 12 - 정수형 오버플로우 (0) | 2019.10.04 |
[구현보안] 입력 데이터 검증 및 표현 10 - 크로스사이트 요청위조 (0) | 2019.10.02 |
[구현보안] 입력 데이터 검증 및 표현 09 - LDAP 삽입 (0) | 2019.10.02 |
[구현보안] 입력 데이터 검증 및 표현 08 - XPath 삽입 (0) | 2019.10.02 |
- Total
- Today
- Yesterday