본문 바로가기

와사비크래커 IT Tip/Infra

[JEUS] 페이지 리다리렉트가 안될 때 확인사항 (언어에 따른 리다이렉트)

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를 제공한다.


반응형