저는 호스트 헤더 주입에 대한 보안 및 읽기의 초보자입니다. 이 취약점에 대한 응용 프로그램을 테스트했는데 일부 요청에서는 가능하지만 개발자는 캐시가없고 플래그가 저장되지 않았으며이 취약점은 암호 재설정 요청에 포함되어 있지 않습니다.
우선 캐시 중독은 없을 것입니다. 두 번째는 암호 재설정 요청에서 발생하지 않습니다.
이 취약점을 악용 한 이유는 해당 호스트 헤더를 변경했기 때문입니다. 그래서 나는 그것이 취약점이 될 이유를 알고 싶습니다. 왜 사용자가 응용 프로그램의 호스트를 변경합니까? 어떻게 공격자가 그것을 이용할 수 있습니까?호스트 헤더 삽입
답변
모든 경우와 마찬가지로 응용 프로그램의 클라이언트 입력은 절대로 (보안 상) 신뢰해서는 안됩니다. host
헤더 속성은 클라이언트가 변경할 수있는 것도 있습니다.
전형적인 공격 시나리오 예를 들면 다음과 같습니다
당신이 맹목적으로 HOST 헤더 값을 신뢰하고 유효성을 검사하지 않고 응용 프로그램에서 사용하는 응용 프로그램이 있다고 가정 할 수 있습니다.
<script src="http://<?php echo _SERVER['HOST'] ?>/script.js">
을 HOST 헤더로 설정 한 공격자가이 JS에 반영한다 무엇 이건이 시나리오에서는 : 그래서 당신은 당신이 (호스트 이름) 동적으로 JS 파일을로드 응용 프로그램에서 다음 코드를 가질 수있다 스크립트로드. 따라서 침입자는 JS 스크립트를 다른 호스트 (잠재적으로 악의적 인 사용자)로부터로드하기위한 응답을 조작하여이를 무단으로 변경할 수 있습니다. 응용 프로그램이 임의의 캐싱 메커니즘 또는 CDN을 사용 중이고이 요청이 여러 x 반복되는 경우, Caching Proxy에 의해 캐시 될 수 있습니다. 그런 다음 다른 사용자에게도 제공 될 수 있습니다 (캐시에 저장 됨).
이를 악용하는 또 다른 방법은 다음과 같습니다
응용 프로그램이 사용자 암호 재설정 기능을 가지고 있다고 가정하자.
Hi user,
Here is your reset link
http://<?php echo _SERVER['HOST'] ?>/reset-password?token=<?php echo $token ?>
지금 공격자가이 조작에 의해 알려진 피해자의 이메일 암호 재설정을 트리거 할 수 그리고 고유 토큰 암호 재설정을 요청 누구든지 이메일을 보낼 것입니다 응용 프로그램은 아래의 이메일과 같이 재설정하기 그의 욕망 중 하나에 대한 호스트 헤더 값. 그런 다음 피해자는 암호 재설정을 위해 합법적 인 전자 메일을 받게되지만 URL은 공격자가 설정 한 도메인으로 변경됩니다. 피해자가 해당 링크를 열면 암호 재설정 토큰이 공격자에게 유출되어 계정 인수로 이어질 수 있습니다.