๐ Introduction
Reverse tabnabbing์ ํน์ ์กฐ๊ฑด์์ a, iframe ๋ฐ window.open() ๋ฑ์ผ๋ก ์์ฑ๋ child page๊ฐ parents page๋ฅผ ์ผ๋ถ ์ ์ดํ ์ ์๋ ํน์ฑ์ ์ด์ฉํด ํผ์ฑ ์ฌ์ดํธ๋ก parents page๋ฅผ ๋ณ๊ฒฝํ๋ ์ทจ์ฝ์ ์ ์๋ฏธํฉ๋๋ค.
target blank
๋ณดํต ๊ฐ์ฅ ํํ ๊ฒฝ์ฐ๊ฐ a ๋ฑ์ ํ๊ทธ์์ target="_blank"
๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์
๋๋ค. ํนํ ์ฌ์ฉ์๊ฐ html ํ๊ทธ๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์๋ ์๋น์ค(๋ฉ์ผ, ๋งํฌ์
์ ํฌํจํ ๊ฒ์ํ ๋ฑ)์์ ์ฝ๊ฒ ๊ณต๊ฒฉ์ ์ฑ๊ณตํ ์ ์๊ธฐ ๋๋ฌธ์ ์ค์๋์ ๋ฐ๋ผ XSS์ ์ ์ฌํ๊ฒ _blank
์ ๋ํ ์ ํ๋ ํ์ํฉ๋๋ค.
|
|
๋จ ์ต๊ทผ์ ๋ธ๋ผ์ฐ์ (ํฌ๋กฌ/ํํญ/์ฌํ๋ฆฌ)์ฌ์์ rel=noopener
๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ํจ์น๋ฅผ ์ ์ฉํ์ต๋๋ค. ๊ทธ๋์ ์๋์ ๊ฐ์ ์ฝ๋๋ ์ทจ์ฝํ์ง ์์ต๋๋ค.
|
|
๋ณ๋๋ก rel=opener
์ฒ๋ผ ๋ช
์ํด์ฃผ์ง ์๋ ํ opener๋ฅผ ์ฌ์ฉํ ์ ์์ด์ก์ต๋๋ค.
window.open
window.open()
๊ณผ ๊ฐ์ด javascript ๋จ์์ child page๋ฅผ ์ฌ๋ ๊ฒฝ์ฐ _blank
์ ๋์ผํ๊ฒ ๋ถ๋ชจ์ฐฝ์ ๋ํ ์ผ๋ถ ์ ์ด๊ถ์ ์ป์ ์ ์์ต๋๋ค.
|
|
๐ก Offensive techniques
Detect
reverse tabnabbing์ ํ์ธํ๊ธฐ ์ํด์ ์๋น์ค์์ ์ด๋ฏธ ์กด์ฌํ๋ rel="opener"
๊ฐ ๋ช
์๋ ์ต์ปคํ๊ทธ(a tag)๋ฅผ ์ฐพ๊ฑฐ๋ HTML ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ ์์ญ์ด ์๋ค๋ฉด XSS์ ๋น์ทํ๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
Exploitation
parents page๋ฅผ ์ ์ดํ ์ ์๊ธฐ ๋๋ฌธ์ parents page์ document.locaion
๋ฑ์ ๋ณ๊ฒฝํ์ฌ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ํผ์ฑ ์ฌ์ดํธ๋ก ์ด๋์์ผ ์ฌ์ฉ์์ ์ค์ ์ ๋ณด๋ฅผ ํ์ทจํ๋๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ๊ฐ ํ
์คํธ๋ฅผ ์ํด ๋ง๋ค์ด์ ์ฌ์ฉํ๋ ํ์ด์ง๋ฅผ ์์๋ก ๋ค์ด๋ณด๋ฉด ์๋ ์ฝ๋์ ๊ฐ์ด _blank
์ธ ๊ฒฝ์ฐ child ์์ parents์ ์ผ๋ถ๋ฅผ ์ ์ดํ ์ ์๋ ์ํ๊ฐ ๋๋ฉฐ ํด๋ฆญ ์ reverse-tabnabbing-1 ํ์ด์ง๋ ๋ถ๋ชจ ํ์ด์ง๋ฅผ ์ ์ดํ ์ ์์ด์ง๋๋ค.
|
|
https://www.hahwul.com/phoenix/reverse-tabnabbing
child page์ธ reverse-tabnabbing-1 ๋ก ์ ๊ทผํด๋ณด๋ฉด ์์ค์ฝ๋๋จ์ ์๋์ ๊ฐ์ด opener
์ location์ ๋ณ๊ฒฝํ๋ ์ฝ๋๊ฐ ์์ต๋๋ค.
์ด๋ก์ธํด ํด๋น ์ฝ๋๊ฐ ์คํ๋๋ ์๊ฐ parent page์ document.location
์ด //www.hahwul.com/phoenix/reverse-tabnabbing-2
๋ก ๋ณ๊ฒฝ๋๋ฉฐ ํผ์ฑ ํ์ด์ง๋ก ์ด๋ํ๊ฒ ๋ฉ๋๋ค.
MITM
๋ณดํต์ ํผ์ฑ์ ๋ง์ด ์ฌ์ฉ๋์ง๋ง ๋ง์ฝ child page๊ฐ http๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์๊ฐ ์ฝ๊ฒ response ๋ด์ฉ์ ์์ ํ์ฌ parents page๋ฅผ ์ผ๋ถ ์ ์ดํ ์ ์๊ฒ ๋ฉ๋๋ค. ๊ณต๊ฒฉ ์๋๋ฆฌ์ค ์ค ํ๋ ์ ๋๋ก ์๊ฐํด๋๋ฉด ์ข์ต๋๋ค.
๐ก Defensive techniques
๋์์ ๊ฐ๋จํฉ๋๋ค. a ํ๊ทธ์ ๊ฐ์ ๋งํฌ๋ฑ์์ target=_blank
๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ์ ํํ๊ฑฐ๋ rel ์์ฑ์ผ๋ก ๋ฐ๋ก ์ ํํ ์ ์์ต๋๋ค.
rel=noopener
rel=noreferrer
rel=noopener noreferrer
๋ค๋ง noopener๊ฐ ๊ฐ ๋ธ๋ผ์ฐ์ ์ฌ์์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋๋ฉด์ rel์ ์ง์ ํ์ง ์์๋ noopener๋ฅผ ์ฌ์ฉํ ๊ฒ๊ณผ ๋์ผํ๊ธฐ ๋๋ฌธ์ rel=opener ๋ก ๋ช ์ํ์ง ๋ชปํ๋๋ก ์ ํํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ ์ ์์ต๋๋ค.
https://chromium-review.googlesource.com/c/chromium/src/+/1630010
window.open์ ๊ฒฝ์ฐ javascript ๋จ์์ ์ด๋ฃจ์ด์ง๋ ํํ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์ด๋ผ๋ฉด ์ทจ์ฝ์ ์ด ๋ฐ์ํ window.open์ ๋งํฌ ๋ถ๋ถ์ด ์ ๋ขฐ๋ฐ๋ ๋๋ฉ์ธ์ธ์ง ์ฒดํฌ๊ฐ ํ์ํ๋ฉฐ, ์ฌ์ฉ์๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ window.open ๋ฑ ์ผ๋ถ ๋ฆฌ์คํฌ๊ฐ ์๋ ๋ฉ์๋๋ ์ ํํ๋ ํํ๋ก ๋์ํ ์ ์์ต๋๋ค.
๋ํ Referrer-Policy: no-referrer
ํค๋ ๋ฑ์ ํตํด์ HTTP ํ๋กํ ์ฝ๋จ์์๋ ์ ํํ ์ ์์ต๋๋ค.