Fail open vulnerability

Tags:

Fail Open 취약점이라는 좋은 내용이 WebGoat에 잘 소개되어 있어서 올립니다.

아래와 같은 코드로 로그인 창이 작성되어 있다고 할 때, (클래스명 같은건 좀 틀려도 이해해주시길)

void processLogin(Request r)
{
   try {
       String username = r.getParameter("Username");
       String password = r.getParameter("Password");
	
       if (username.equals("ADMIN") == false || 
           password.equals("ADMINPW") == false)
       {
	  // redirect to login form
       }
    }
    catch(Throwable t) { }
    
    showWelcomeScreen();
}

어떤 문제가 발생할 수 있는지 알아보실 수 있겠습니까? 맞춰보세요….

위와 같은 로그인 체크는 http://…/action?Username=user 에 의해 바로 뚫려버립니다. 왜냐하면 password는 주어지지 않았으므로 NULL이 될테고, 따라서 passworld.equals 호출시 NullPointerException이 뜨는데 이것이 catch에 의해 소리소문없이 사라져버린 뒤 welcome화면으로 넘어가게 되기 떄문입니다.

이것이 바로 Fail Open 취약점입니다. 이 취약점은 잘못된 조건검사로 인해 사실은 거부당해야 하는 조건임에도 화면이 열려버리는 상황을 의미합니다. 섬뜩하죠? 자.. 자기 코드를 뒤돌아 봅시다.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *