Angular SecurityContext ๊ธฐ๋ฐ ์๋ Sanitization ์ฒด๊ณ์ Bypass ๋ฆฌ์คํฌ ๊ด๋ฆฌ ์ ๋ต
๐ Angular Security in Production: How XSS Protection, DomSanitizer, and CSRF Defenses Actually Fit Together
AI ์์ฝ
Context
์ํฐํ๋ผ์ด์ฆ Angular ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ํ๋ XSS ์ทจ์ฝ์ ๋๋ถ๋ถ์ด ํ๋ ์์ํฌ ๊ฒฐํจ์ด ์๋ ๊ธฐ๋ณธ ๋ณด์ ๋ชจ๋ธ ์ฐํ ์ค์ ์ผ๋ก ์ธํด ๋ฐ์ํจ. ๊ฐ๋ฐ ํธ์๋ฅผ ์ํด DomSanitizer์ Bypass ๋ฉ์๋๋ฅผ ๋ฌด๋ถ๋ณํ๊ฒ ์ฌ์ฉํ๋ฉฐ ๋ณด์ ํ์ดํ๋ผ์ธ์ ๋ฌด๋ ฅํํ๋ ๊ตฌ์กฐ์ ํ๊ณ์ ์ด ์กด์ฌํจ.
Technical Solution
- Interpolation ๋ฐ Property Binding ์ SecurityContext๋ฅผ ํตํ ์๋ Escaping ๋ฐ Sanitization ์ํ ๊ตฌ์กฐ
- HTML, STYLE, URL, RESOURCE_URL ๋ฑ ๋ฐ์ดํฐ๊ฐ ๋ ๋๋ง๋๋ ์ง์ ์ ๋ฐ๋ฅธ 4๊ฐ์ง ์ปจํ ์คํธ๋ณ ์ฐจ๋ฑ ๋ณด์ ์ ์ฑ ์ ์ฉ
- DomSanitizer์ sanitize() ๋ฉ์๋๋ฅผ ํตํ ๋ฐํ์ ๊ฐ ๊ฒ์ฆ ๋ฐ ๋ ์ฒ๋ฆฌ ๊ธฐ๋ฐ์ Graceful Fallback ๊ตฌํ
- bypassSecurityTrust* ๊ณ์ด ๋ฉ์๋ ์ฌ์ฉ ์ Safe* ํ์ ์ผ๋ก ๊ฐ์ ๋ณํํ์ฌ ๋ช ์์ ์ธ Trust ๋ถ์ฌ ๋ฐ ๊ฐ์ฌ ์ถ์ ๊ฐ๋ฅ ๊ตฌ์กฐ ์ค๊ณ
- RESOURCE_URL ์ปจํ ์คํธ์ ๋ํด ๊ฐ์ฅ ์๊ฒฉํ ์ ๋ขฐ ์์ค์ ์ ์ฉํ์ฌ ์์ ์ฝ๋ ์คํ(RCE) ๊ฐ๋ฅ์ฑ์ ์์ฒ ์ฐจ๋จํ๋ ์ ๋ต
์ค์ฒ ํฌ์ธํธ
1. codebase ๋ด bypassSecurityTrustHtml, bypassSecurityTrustScript ๋ฑ Bypass ๋ฉ์๋ ์ฌ์ฉ์ฒ ์ ์ ์กฐ์ฌ
2. [innerHTML] ๋ฐ์ธ๋ฉ ๋์ ๋ฐ์ดํฐ๊ฐ ์์ ์คํธ๋ฆผ์์ ์ด๋ฏธ Trusted ์ํ๋ก ๋งํน๋์๋์ง ๊ฒ์ฆ
3. ๋จ์ ํ ์คํธ ์ถ๋ ฅ ์ [innerHTML] ๋์ {{ }} Interpolation ์ฌ์ฉ ์ฌ๋ถ ํ์ธ
4. ์ธ๋ถ ๋ฆฌ์์ค ๋ก๋ ์ RESOURCE_URL ์ปจํ ์คํธ ์ค์ ์ฌ๋ถ ๋ฐ CSP(Content Security Policy) ์ค์ ๊ฒํ