Reverse Tabnabbing

새 창 링크에 opener 보호 속성 누락

설명

새 페이지가 window.opener에 접근할 수 있으면 원래 탭을 피싱 페이지로 이동시킬 수 있습니다. 현재 HTML 표준과 이를 지원하는 브라우저는 target="_blank"에 기본적으로 noopener 동작을 적용합니다. 따라서 보호 속성 생략만으로 취약하다고 단정할 수는 없지만, 오래된 환경과 명시적인 opener 허용 여부를 확인해야 합니다.

잠재적 영향

  • 피싱 페이지로 원래 탭을 바꿔 사용자의 로그인 정보나 민감 정보를 탈취할 수 있습니다.
  • 사용자는 신뢰하던 사이트 탭에서 화면이 바뀌었기 때문에 공격 페이지를 정상 페이지로 오인할 수 있습니다.

해결 방법

  • 외부 링크를 새 탭으로 열 때 rel="noopener"를 명시하세요. rel="noreferrer"는 같은 opener 보호와 함께 Referer 전송도 막으므로 필요한 경우 추가하세요.
  • 가능한 경우 프레임워크나 컴포넌트 레벨에서 외부 링크 정책을 공통으로 적용하세요.

예시

변경 전

html
<a href="https://example.org" target="_blank">외부 링크</a>

변경 후

html
<a href="https://example.org" target="_blank" rel="noopener noreferrer">외부 링크</a>

설명:

  • 변경 전: 명시적인 보호 속성이 없습니다. 현재 브라우저의 기본 보호가 적용되지 않아 window.opener가 유지되는 환경에서는 원래 탭을 이동시킬 수 있습니다.
  • 변경 후: target="_blank" 링크에 rel="noopener noreferrer"를 명시해 opener 연결과 Referer 전송을 차단합니다.

참조