๐ Introduction
JSON Hijacking์ SOP์ ์์ธ๋ฅผ ์ํ CORS ์ค์ ์ด ๋ฏธํกํ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์์ ๋ฐ์ดํฐ ๋ฑ์ ์์๋ก ํ์ทจํ ์ ์๋ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ ๋๋ค.
๐ก Offensive techniques
Detect
๊ณต๊ฒฉ์๊ฐ ์๋ํ ๋๋ฉ์ธ์ Origin ํค๋๋ก ์ ์กํ์ฌ ACAO ํค๋(Access-Control-Allow-Origin
)์ ๋ฐ์๋๋ค๋ฉด ์ทจ์ฝ ํ๋ค๊ณ ํ๋จํ ์ ์์ต๋๋ค. ์ผ๋ถ Wildcard(*
)๋ก ACAO ํค๋๊ฐ ์ค๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ด๋ฌํ ๊ฒฝ์ฐ ๋ชจ๋ ๋๋ฉ์ธ์์ ํธ์ถํ ์ ์์ง๋ง, Access-Control-Allow-Credentials
์ ๋ณ๊ฐ๋ก ์ฌ์ฉ์์ ์ฟ ํค๋ฅผ ๋ถ์ฌ์ ์ ์กํ ์ ์๊ฒ ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ด์ ํฌ์คํธ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
|
|
|
|
Exploitation
ACAO์ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ๋๋ฉ์ธ์ ๋ฐ์ํ ์ ์๋ค๋ฉด ํด๋น ๋๋ฉ์ธ์์ ์ฌ์ฉ์์ ์ธ์ ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
|
|
Bypass protection
Bypass Origin
Origin ํค๋์ ๋ํด ๊ฒ์ฆํ๋ ์ ์ฐจ๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ค ํํ๋ก ๊ฒ์ฆ ํ๋์ง ํ์ ํด์ผํฉ๋๋ค. ์ ํํ๊ฒ ๋๋ฉ์ธ์ ์๋ณํ๋ค๋ฉด ์ฐํ๊ฐ ์ด๋ ต๊ฒ ์ง๋ง, ๋ฌธ์์ด ๋๋ ์ ๊ท์ ๊ธฐ๋ฐ์ผ๋ก ์๋ณํ๋ ๊ฒฝ์ฐ ์ฐํํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
|
|
Origin์ ๊ฒฝ์ฐ Referer ํค๋์ ๋ค๋ฅด๊ฒ Path๊ฐ ๋ถ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ฉ์ธ์ ์ด์ฉํ ์ฐํ ๋ฐฉ๋ฒ์ด ์ต์ ์ ๋๋ค.
Bypass with Caching
ACAO๊ฐ Wildcard(*
)์ธ ์ํ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ ์ธ์
์ ์ฌ์ฉํ ์ ์์ด JSON Hijacking์ด ๋ถ๊ฐ๋ฅํ์ง๋ง, ๋ง์ฝ JSON Response ํ์ด์ง์ Cache-Control๋ก ์ธํด ๋ก์ปฌ ์บ์ฑ๋๋ ๊ฒฝ์ฐ SOP๋ฅผ ์ฐํํ์ฌ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
|
|
Cached ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ณผ์ ์ ์ค์ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ์ง ์๊ณ ๋ธ๋ผ์ฐ์ ๋ด์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ฝ์ด ์ฌ์ฉ์์๊ฒ ์ ๊ณตํฉ๋๋ค. ์ด๊ฑธ ์ด์ฉํ์ฌ ๊ณต๊ฒฉ์๊ฐ ์ค์ ์ ๋ณด๊ฐ ์๋ ํ์ด์ง๋ฅผ ์ฌ์ฉ์์ ์ธ์ ์ผ๋ก ์บ์ฑ์ํจ ํ ACAO๊ฐ Wildcard์ธ ์ํ์์ ์ด๋ฏธ ์บ์๋ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์ด์ค๋ ํํ๋ก SOP๋ฅผ ํต๊ณผํ ์ ์์ต๋๋ค. (์๋๋ฉด Origin ์ ์ฑ ์ด wildcard ์ผ ๋ ์ธ์ฆ์ ํฌํจํ์ง ์๋ ์์ฒญ์ response๋ฅผ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ด์ฃ ๐)
์๋ฅผ๋ค์ด ์ธ์ฆ ์ํ์์๋ง ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ด๋ ค์ฃผ๋ ํ์ด์ง๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ์๋ค.
With Auth
|
|
Without Auth
|
|
์ด ๋ ACAO๊ฐ *
์ธ ์ํ์์ CSRF์ ๊ฐ์ด SOP์ ์ํฅ์ ๋ฐ์ง ์๋ ์์ฒญ(img, form, etc…)์ ํตํด HTTP Request๋ฅผ ์ ์กํฉ๋๋ค.
|
|
๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํฌํจํ ์์ฒญ์ด Response๋ก ์ ๋ฌ๋ฉ๋๋ค. ๋น์ฐํ ๊ณต๊ฒฉ์ฝ๋๋ ์ด๋ฅผ ์ฝ์ ์ ์์ต๋๋ค. ๋จ response ๋ด cache-control๋ก ์ธํด ํด๋น ๋ฐ์ดํฐ๋ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ ์บ์๋ฉ๋๋ค.
|
|
์ด์ withCredentials
๋ฅผ false
๋ก ์ฃผ๊ณ $.ajax
๋ฅผ ํตํด HTTP Request๋ฅผ ์ ์กํด๋ด
์๋ค. ACAO๊ฐ *
์ด๊ธฐ ๋๋ฌธ์ ์ด ์ฝ๋๋ Response์ ๋ฐ์ดํฐ๋ฅผ ํธ๋ค๋งํ ์ ์์ต๋๋ค. ๋ค๋ง ์ฌ์ฉ์์ ์ฟ ํค์ ๋ณด๋ ์น ์์ฒญ์ ํฌํจ๋์ง ์์ต๋๋ค.
|
|
์ด ๋ ์น ๋ธ๋ผ์ฐ์ ๋ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๊ธฐ ๋๋ฌธ์ body์ ์๋ ์ ๋ณด๊ฐ ํฌํจ๋์ด response๋ก ์ ๋ฌ๋ฉ๋๋ค.
|
|
๊ทธ๋ฌ๋ฉด ๊ณต๊ฒฉ์๋ SOP๋ฅผ ๋ฌด์ํ๊ณ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ํ์ทจํ ์ ์์ต๋๋ค. ์ ์ฒด ๊ณต๊ฒฉ ํ๋ก์ฐ๋ฅผ ๋ด์ ์ฝ๋๋ ์๋์ ๊ฐ๊ณ , ์์ธํ ๋ด์ฉ์ ์์ ์ ์์ฑํ ๊ธ์ ์ฐธ๊ณ ํด์ฃผ์ธ์ :D
|
|
๐ก Defensive techniques
CORS ์ฌ์ฉ์ด ํ์ํ ํ์ด์ง์์ ACAO ํค๋์ ๋ํด ๋๋ฉ์ธ์ ์ ํํ๊ฒ ๋ด๋ ค์ฃผ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ง์ฝ ๋ก์ปฌ์์๋ง ํธ์ถ๋๋ ํ์ด์ง๋ผ๋ฉด ACAO ํค๋ ์์ฒด๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
๋ํ ๋ฏผ๊ฐ์ ๋ณด์ ๊ฒฝ์ฐ Response ๋ด cache-control์ ์ ์ ํ ์ค์ ํ์ฌ (no-cache ๋ฑ) ๋ฐ์ดํฐ๊ฐ ๋ก์ปฌ ๋ธ๋ผ์ฐ์ ์ ํ์ผ๋ก ์บ์๋์ง ์๋๋ก ์ฒ๋ฆฌํด์ฃผ๋ ๊ฒ์ด ์ข์ต๋๋ค. (ํนํ ACAO *
์ ํ์ฉํ๋ ๊ฒฝ์ฐ)