Reverse Tabnabbing

πŸ” Introduction

Reverse tabnabbing은 νŠΉμ • μ‘°κ±΄μ—μ„œ a, iframe 및 window.open() λ“±μœΌλ‘œ μƒμ„±λœ child pageκ°€ parents pageλ₯Ό 일뢀 μ œμ–΄ν•  수 μžˆλŠ” νŠΉμ„±μ„ μ΄μš©ν•΄ ν”Όμ‹± μ‚¬μ΄νŠΈλ‘œ parents pageλ₯Ό λ³€κ²½ν•˜λŠ” 취약점을 μ˜λ―Έν•©λ‹ˆλ‹€.

target blank

보톡 κ°€μž₯ ν”ν•œ κ²½μš°κ°€ a λ“±μ˜ νƒœκ·Έμ—μ„œ target="_blank" λ₯Ό μ‚¬μš©ν•œ κ²½μš°μž…λ‹ˆλ‹€. 특히 μ‚¬μš©μžκ°€ html νƒœκ·Έλ₯Ό 직접 μ‚¬μš©ν•  수 μžˆλŠ” μ„œλΉ„μŠ€(메일, λ§ˆν¬μ—…μ„ ν¬ν•¨ν•œ κ²Œμ‹œνŒ λ“±)에선 μ‰½κ²Œ 곡격에 성곡할 수 있기 떄문에 μ€‘μš”λ„μ— 따라 XSS와 μœ μ‚¬ν•˜κ²Œ _blank에 λŒ€ν•œ μ œν•œλ„ ν•„μš”ν•©λ‹ˆλ‹€.

<a href="https://bad.example.com" target="_blank">Click</a>

window.open

window.open() κ³Ό 같이 javascript λ‹¨μ—μ„œ child pageλ₯Ό μ—¬λŠ” 경우 _blank 와 λ™μΌν•˜κ²Œ λΆ€λͺ¨μ°½μ— λŒ€ν•œ 일뢀 μ œμ–΄κΆŒμ„ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

<html>
 <body>
  <button onclick="window.open('https://bad.example.com')">Click</button>
 </body>
</html>

πŸ—‘ Offensive techniques

Phishing

parents pageλ₯Ό μ œμ–΄ν•  수 있기 λ•Œλ¬Έμ— parents page의 document.locaion 등을 λ³€κ²½ν•˜μ—¬ κ³΅κ²©μžκ°€ μ˜λ„ν•œ ν”Όμ‹± μ‚¬μ΄νŠΈλ‘œ μ΄λ™μ‹œμΌœ μ‚¬μš©μžμ˜ μ€‘μš” 정보λ₯Ό νƒˆμ·¨ν•˜λŠ”λ° μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ œκ°€ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν•˜λŠ” νŽ˜μ΄μ§€λ₯Ό μ˜ˆμ‹œλ‘œ 듀어보면 μ•„λž˜ μ½”λ“œμ™€ 같이 _blank 인 경우 child μ—μ„œ parents의 일뢀λ₯Ό μ œμ–΄ν•  수 μžˆλŠ” μƒνƒœκ°€ 되며 클릭 μ‹œ reverse-tabnabbing-1 νŽ˜μ΄μ§€λŠ” λΆ€λͺ¨ νŽ˜μ΄μ§€λ₯Ό μ œμ–΄ν•  수 μžˆμ–΄μ§‘λ‹ˆλ‹€.

<a href="https://www.hahwul.com/phoenix/reverse-tabnabbing-1" target="_blank">Click me</a>

https://www.hahwul.com/phoenix/reverse-tabnabbing

child page인 reverse-tabnabbing-1 둜 접근해보면 μ†ŒμŠ€μ½”λ“œλ‹¨μ— μ•„λž˜μ™€ 같이 opener 의 location을 λ³€κ²½ν•˜λŠ” μ½”λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

1414

μ΄λ‘œμΈν•΄ ν•΄λ‹Ή μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” μˆœκ°„ parent page의 document.location이 //www.hahwul.com/phoenix/reverse-tabnabbing-2 둜 λ³€κ²½λ˜λ©° ν”Όμ‹± νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜κ²Œ λ©λ‹ˆλ‹€.

1415

MITM

보톡은 피싱에 많이 μ‚¬μš©λ˜μ§€λ§Œ λ§Œμ•½ child pageκ°€ httpλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 κ³΅κ²©μžκ°€ μ‰½κ²Œ response λ‚΄μš©μ„ μˆ˜μ •ν•˜μ—¬ parents pageλ₯Ό 일뢀 μ œμ–΄ν•  수 있게 λ©λ‹ˆλ‹€. 곡격 μ‹œλ‚˜λ¦¬μ˜€ 쀑 ν•˜λ‚˜ μ •λ„λ‘œ 생각해두면 μ’‹μŠ΅λ‹ˆλ‹€.

πŸ›‘ Defensive techniques

λŒ€μ‘μ€ κ°„λ‹¨ν•©λ‹ˆλ‹€. a νƒœκ·Έμ™€ 같은 λ§ν¬λ“±μ—μ„œ target=_blank λ₯Ό μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λ„둝 μ œν•œν•˜κ±°λ‚˜ rel μ†μ„±μœΌλ‘œ λ”°λ‘œ μ œν•œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • rel=noopener
  • rel=noreferrer
  • rel=noopener noreferrer

window.open의 경우 javascript λ‹¨μ—μ„œ μ΄λ£¨μ–΄μ§€λŠ” ν˜•νƒœμ΄κΈ° 떄문에 μ‚¬μš©μžκ°€ 슀크립트λ₯Ό μ‚¬μš©ν•  수 μ—†λŠ” ν™˜κ²½μ΄λΌλ©΄ 취약점이 λ°œμƒν•œ window.open의 링크 뢀뢄이 μ‹ λ’°λ°›λŠ” 도메인인지 체크가 ν•„μš”ν•˜λ©°, μ‚¬μš©μžκ°€ 슀크립트λ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” 경우 window.open λ“± 일뢀 λ¦¬μŠ€ν¬κ°€ μžˆλŠ” λ©”μ†Œλ“œλŠ” μ œν•œν•˜λŠ” ν˜•νƒœλ‘œ λŒ€μ‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ Referrer-Policy: no-referrer 헀더 등을 ν†΅ν•΄μ„œ HTTP ν”„λ‘œν† μ½œλ‹¨μ—μ„œλ„ μ œν•œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ•Ή Tools

πŸ“Œ References