Blocking main page to steal postmessage

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

Winning RCs with Iframes

์ด Terjanq writeup์— ๋”ฐ๋ฅด๋ฉด, null origin์—์„œ ์ƒ์„ฑ๋œ blob ๋ฌธ์„œ๋Š” ๋ณด์•ˆ์ƒ์˜ ์ด์ ์œผ๋กœ ๊ฒฉ๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๋ฉ”์ธ ํŽ˜์ด์ง€๋ฅผ ๋ฐ”์˜๊ฒŒ ์œ ์ง€ํ•˜๋ฉด iframe ํŽ˜์ด์ง€๊ฐ€ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๋„์ „์—์„œ ๊ฒฉ๋ฆฌ๋œ iframe์ด ์‹คํ–‰๋˜๊ณ , ๋กœ๋“œ๋œ ์งํ›„ ๋ถ€๋ชจ ํŽ˜์ด์ง€๊ฐ€ ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ post ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๊ทธ postmessage ํ†ต์‹ ์€ XSS์— ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค( iframe์ด JS ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

๋”ฐ๋ผ์„œ ๊ณต๊ฒฉ์ž์˜ ๋ชฉํ‘œ๋Š” ๋ถ€๋ชจ๊ฐ€ iframe์„ ์ƒ์„ฑํ•˜๊ฒŒ ํ•˜๋˜, ๋ถ€๋ชจ ํŽ˜์ด์ง€๊ฐ€ **๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ(ํ”Œ๋ž˜๊ทธ)**๋ฅผ ์ „์†กํ•˜๊ธฐ ์ „์— ๋ฐ”์˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  payload๋ฅผ iframe์œผ๋กœ ์ „์†กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ถ€๋ชจ๊ฐ€ ๋ฐ”์  ๋•Œ iframe์€ payload๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ, ์ด๋Š” ๋ถ€๋ชจ postmessage ๋ฉ”์‹œ์ง€๋ฅผ ๋“ฃ๊ณ  ํ”Œ๋ž˜๊ทธ๋ฅผ ์œ ์ถœํ•˜๋Š” JS๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ, iframe์€ payload๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ถ€๋ชจ ํŽ˜์ด์ง€๋Š” ๋ฐ”์˜์ง€ ์•Š๊ฒŒ ๋˜๋ฏ€๋กœ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†กํ•˜๊ณ  payload๊ฐ€ ์ด๋ฅผ ์œ ์ถœํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ถ€๋ชจ๊ฐ€ iframe์„ ์ƒ์„ฑํ•œ ์งํ›„์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด iframe์ด ์ค€๋น„๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ์–ด๋–ป๊ฒŒ ๋ฐ”์˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ์š”? ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถ€๋ชจ๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด ๋„์ „์—์„œ ๋ถ€๋ชจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด postmessages๋ฅผ ๋“ฃ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค:

window.addEventListener("message", (e) => {
if (e.data == "blob loaded") {
$("#previewModal").modal()
}
})

๊ทธ๋ž˜์„œ postmessage์—์„œ ํฐ ์ •์ˆ˜๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ–ˆ์œผ๋ฉฐ, ์ด๋Š” ๊ทธ ๋น„๊ต์—์„œ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋  ๊ฒƒ์ด๊ณ , ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค:

const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);

์ •ํ™•ํ•˜๊ฒŒ ์ „์†กํ•˜๊ณ  postmessage๋ฅผ iframe์ด ์ƒ์„ฑ๋œ ํ›„์—, ๊ทธ๋Ÿฌ๋‚˜ ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ค€๋น„๊ฐ€ ๋˜๊ธฐ ์ „์— ํ•˜๋ ค๋ฉด, setTimeout์˜ ๋ฐ€๋ฆฌ์ดˆ๋ฅผ ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ