728x90
반응형
# 확인된 JEUS 버전 : 7.0
# 요약 :
- JEUS에서 CRLF Injection 방지를 위해 sendRedirect에 대한 보안처리가 되어 있음
- jeus-web-dd.xml에 <redirect-strategy-ref> 엘리먼트가 있는지 확인하고 제외시킨다.
-------------------------------------------------------------
Redirect Location 보안 설정
애플리케이션은 javax.servlet.http.HttpServletResponse.sendRedirect(String location) 표준 API를 통해서 "302 Found" 응답을 보낼 수 있다. 이때 기본적으로 Location으로 넘겨주는 문자열에 대해서 아무런 확인을 하지 않고 그대로 URL로 전환해서 Location 헤더로 설정한다. 그렇기 때문에 악의적인 사용자가 CRLF injection과 같은 공격을 할 수 있다. 이를 방지하기 위해 애플리케이션은 jeus.servlet.security.RedirectStrategy 인터페이스를 구현해서 jeus-web-dd.xml에 설정할 수 있다.
다음은 jeus.servlet.security.RedirectStrategy 인터페이스를 설정한 예이다.
[예] Redirect Location 보안 설정 인터페이스: <<RedirectStrategy>>
package jeus.servlet.security;
import javax.servlet.http.HttpServletRequest;
public interface RedirectStrategy {
/**
* Makes the redirect URL.
*
* @param location the target URL to redirect to, for example "/login"
*/
String makeRedirectURL(HttpServletRequest request, String location)
throws IllegalArgumentException;
}
설정한 인터페이스를 다음과 같이 구현할 수 있다.
[예] Redirect Location 보안 설정 구현 예: <<RejectCrlfRedirectStrategy>>
package jeus.servlet.security;
import javax.servlet.http.HttpServletRequest;
public class RejectCrlfRedirectStrategy implements RedirectStrategy {
private Pattern CR_OR_LF = Pattern.compile("\\r|\\n");
@Override
String String makeRedirectURL(HttpServletRequest request, String location)
throws IllegalArgumentException {
if (CR_OR_LF.matcher(location).find()) {
throw new IllegalArgumentException("invalid characters (CR/LF) in redirect location");
}
return makeAbsolute(location);
}
private String makeAbsolute(String location) {
// make code for make absolute path
}
}
jeus-web-dd.xml의 설정 방법은 다음과 같다.
[예] Redirect Location 보안 설정 : <<jeus-web-dd.xml>>
...
<web-security>
<redirect-strategy-ref>
jeus.servlet.security.RejectCrlfRedirectStrategy
</redirect-strategy-ref>
</web-security>
..
<redirect-strategy-ref>는 jeus.servlet.security.RedirectStrategy 인터페이스를 구현한 클래스 이름이다. 이 클래스는 웹 애플리케이션의 클래스 패스에 포함시키면 된다.
위에서 제시한 jeus.servlet.security.RejectCrlfRedirectStrategy의 경우 기본적으로 제공하는 RedirectStrategy이며 CR, LF 또는 CRLF가 있는 Location이 sendRedirect API로 넘어올 경우 500 에러가 발생한다.
그 외에도 CR, LF 또는 CRLF 문자열을 빈 문자열로 치환해주는 jeus.servlet.security.RemoveCrlfRedirectStrategy를 제공한다.
반응형
'와사비크래커 IT Tip > Infra' 카테고리의 다른 글
Windows FTP 서버 설치 (0) | 2018.01.04 |
---|---|
[참고]리눅스에서 IP, 이더넷 카드별로 실시간 트래픽 모니터가 가능한 명령어(iptraf) (0) | 2017.11.30 |
Active Directory (액티브 디렉토리) (0) | 2017.11.24 |
[리눅스(Linux)]SVN 서버 설치 (0) | 2017.11.22 |
[Tomcat] 서버에서 쉽게 삭제되는 Diffie-Hellman 공개 키가 있습니다. (0) | 2017.11.22 |