비밀번호 재설정 링크 오염

C# 비밀번호 재설정 링크 오염

설명

공격자가 제어할 수 있는 Request.Host나 Host 헤더에서 비밀번호 재설정 링크의 도메인을 구성하면, 공격자 도메인이 포함된 링크가 발송될 수 있습니다. 사용자가 그 링크를 열면 재설정 토큰이 공격자에게 전달될 수 있습니다.

잠재적 영향

  • 계정 복구 링크 탈취, 비밀번호 재설정 토큰 노출, 계정 탈취가 발생할 수 있습니다.

해결 방법

재설정 링크는 신뢰된 설정의 공개 기본 URL로 만들고, 요청 Host 헤더를 링크 생성에 사용하지 않습니다.

예시

scheme과 host는 요청에서 가져온 값이며, configuredBaseUrl은 관리자가 설정한 HTTPS 기본 URL이라고 가정합니다. resetToken은 쿼리 매개변수에 맞게 인코딩된 값입니다.

변경 전

csharp
var resetLink = $"{scheme}://{host}/reset-password?token={resetToken}";

변경 후

csharp
var resetLink = $"{configuredBaseUrl}/reset-password?token={resetToken}";

설명:

  • 변경 전: 요청 호스트 데이터로 비밀번호 재설정 링크를 만들면 공격자가 악성 도메인으로 계정 복구 링크를 오염시킬 수 있습니다.
  • 변경 후: 계정 복구 링크는 Request.Host나 원시 Host 헤더가 아니라 신뢰할 수 있게 설정된 기본 URL에서 구성하세요.

참조