얼마전에 자산관리 솔루션 SNIPE-IT에 관한 간략한 글을 올린적이 있는데 최근에 SNIPE-IT와 관련한 취약점이 공개된 바 있어 간략하게 정리해본다.
공개된 보안 권고문을 보면 취약점과 관련된 아래와 같은 중요한 내용이 언급되어 있다.
- Snipe-IT의 v3.0-alpha 에서 v5.3.7은 Host Header Injection 취약점이 존재
- 공격자가 암호 재설정 요청(reset password request)에서 조작된 호스트 헤더(Host Header)를 보내면 사용자에게 암호 재설정 링크를 보낼 수 있습니다.
- 이 링크에는 공격자가 조작한 호스트가 포함될 거라 예상 가능하다.
- 링크를 클릭하면 공격자가 (조작한)호스트로 패스워드 재설정 토큰이 노출된다.
WhiteSource 보안권고문을 보면 조금 더 상세하게 설명되어 있지만 위의 정리 내용과 큰 차이는 없다.
Host Header Injection이라는 기법의 이름으로 어떠한 공격인지 유추가 가능하지만 OWASP의 Testing for Host Header Injection 글을 통해서도 쉽게 확인이 가능했다.
정리하자면 웹 서버의 요청 과정에서 사용되는 Host
헤더 값의 조작으로 서버에서 헤더의 값을 참조하는 기능에서 오류를 발생시키는 공격 기법이라 할 수 있다.
OWASP의 아래 예시 코드를 보면 조금 더 명확하게 이해가 가능하다.
$reset_url = "https://" . $_SERVER['HTTP_HOST'] . "/reset.php?token=" .$token; send_reset_email($email,$rset_url);
공격자가 HOST를 조작하여 전달하는 경우 패스워드 재설정을 위하여 생성되는 주소에 공격자의 호스트가 사용된다. 피해자(Victim)가 생성된 패스워드 재설정 링크를 클릭하면 공격자의 조작된 서버로 패스워드 재설정을 위한 토큰이 유출된다.
Google에서 Host Header Injection으로 검색 결과 중 hackerone에 보고된 다른 취약점 리포트에서 공격 과정을 보다 상세히 확인할 수도 있다.
사용자의 개입이 필요한 CSRF 공격 기법 중 하나로 생각되는데 취약점을 찾기가 아주 쉽고 공격 또한 매우 간단하기 때문에 충분히 검증해볼 만한 취약 유형으로 생각된다. 물론 사용자의 개입이 필요하기 때문에 공격의 성공율이 높다고 할 순 없겠지만 불특정 다수를 향한 공격에는 충분히 사용될법한 방식이라고도 할 수 있다.
SNIPE-IT에 대한 취약점 검증을 직접 수행해보지 않았기 때문에 정리된 내용과 동일한지는 확신할 수 없다. 그러나 공개된 내용으로 추정해보면 비슷하리라 생각된다.