ํผ๋๋ก ๋์๊ฐ๊ธฐ
Dev.toSecurity
์๋ฌธ ์ฝ๊ธฐ
protobufjs Prototype Pollution ํด๊ฒฐ์ ํตํ CVE-2023-36665 ๋ณด์ ์ทจ์ฝ์ ์ ๊ฑฐ
๐ก๏ธ ุญู ุงุญุชุฑุงูู ูุซุบุฑุฉ Prototype Pollution ูู protobufjs
AI ์์ฝ
Context
protobufjs ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ parse() ๋ฐ load() ํจ์ ๋ด ์ ๋ ฅ ๊ฐ ๊ฒ์ฆ ๋ฏธํก์ผ๋ก ์ธํ Object.prototype ์ค์ผ ๊ฐ๋ฅ์ฑ ์๋ณ. ์ ์์ ์ธ protobuf ๋ฉ์์ง๋ฅผ ํตํ RCE ๋ฐ ๋ณด์ ์ปจํธ๋กค ์ฐํ ์ํ์ด ์กด์ฌํ๋ ๊ตฌ์กฐ์ ํ๊ณ ๋ ธ์ถ.
Technical Solution
- protobufjs ๋ฒ์ ์ 7.2.5 ์ด์์ผ๋ก ์ ๋ฐ์ดํธํ์ฌ Prototype Pollution ๋ฐฉ์ง ๋ก์ง ์ ์ฉ
- pnpm overrides ์ค์ ์ ํตํ Transitive Dependency ๋ด ์ทจ์ฝ ๋ฒ์ ๊ฐ์ ๊ต์ฒด
- package.json์ resolutions ํ๋ ์ ์๋ฅผ ํตํ ์์กด์ฑ ํธ๋ฆฌ ์ ์ฒด์ ๋ฒ์ ์ผ๊ด์ฑ ํ๋ณด
- firebase ๋ฑ ํ์ ์์กด์ฑ ํจํค์ง์ ์ต์ ๋ฒ์ ์ ๋ฐ์ดํธ๋ฅผ ํตํ ์ฐ์์ ๋ณด์ ๊ฐํ
- CI/CD ํ์ดํ๋ผ์ธ ๋ด pnpm audit ๋ฐ Snyk Scan ๋จ๊ณ ํตํฉ์ผ๋ก ๋ฐํ์ ์ ์ทจ์ฝ์ ์ฌ์ ํ์ง
์ค์ฒ ํฌ์ธํธ
- pnpm overrides/resolutions๋ฅผ ํ์ฉํ์ฌ ๊ฐ์ ์์กด์ฑ(Transitive Dependency)์ ๋ณด์ ๋ฒ์ ๊ฐ์ ์ง์ - .github/dependabot.yml ์ค์ ์ ํตํ ์ผ์ผ ๋จ์ ์์กด์ฑ ์ทจ์ฝ์ ๋ชจ๋ํฐ๋ง ์ฒด๊ณ ๊ตฌ์ถ - postinstall ์คํฌ๋ฆฝํธ์ audit-level moderate ์ค์ ์ ์ถ๊ฐํ์ฌ ๋ฐฐํฌ ์ ๋ณด์ ๊ฒ์ฆ ์๋ํ