검증되지 않는 Redirect 와 Foward
검증되지 않는 Redirect와 forward
Redirect와 forward 취약점은 외부로부터 받은 문자열을 URL 주소로 사용하여 자동으로 연결할 때 유효성 검증을 하지 않는 경우에 발생한다. 유효성 검증이 되지 않은 페이지에 자동으로 이동될 시 Redirect의 경우에는 공격자가 미리 설정한 악의적인 서버로 접속되어 피싱이나 악성 코드 실행 등의 피해가 발생한다.
대응방안
단순한 리다이렉트와 포워드의 사용은 피해야 하며 사용해야 한다면 목적지 URL을 포함한 매개변수를 포함하지 않도록 해야 한다. 주요 대응방안으로는 화이트 리스트를 이용한 검증이 있다.
영향도
악성 서버로 유도되어 개인pc 에 Malware 감염
피싱 사이트로 유도하여 사용자 중요 계정 정보 노출
인증이 우회되어 중요 페이지에 접근가능
화이트 리스트 검증
타 사이트로의 자동전환에 사용할 URL과 도메인들의 화이트 리스트를 작성한 다음 그중에서 선택함으로써 악의적인 사이트 접근을 차단하고 매개변수에 포함된 값이 유효한지, 그 사용자 권한에 맞는 허용된 페이지인지 검증한다.
protected void doGet(HttpServleRequest request, Http.... response)
throws ServletException , IOException {
String query = request.getQueryString();
//허용하는 URL 화이트 리스트를 만든다.
String allowURL [] ={"url1", "url2", "url3"};
ArrayList arr = new ArrayList();
for(int i =0; i < allowURL.length; i++){
arr.add(allowURL [i]);
if(query.contains("url)){
string url = request.getParameter("url");
//url에 대한 유효성 점검을 한다.
if(url!=null && url.indexOf("http://")!=-1 {
url = url.replaceAll("\r", ""). replaceAll("\n", "");
//RUL 목록에 있지 않으면 요청을 거부한다.
if(! arr.contains(url)) throw new Myexception("에러");
response.sendRedirect(url);
}
}
....