ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
๐Ÿ›ก๏ธ ุญู„ ุงุญุชุฑุงููŠ ู„ุซุบุฑุฉ Prototype Pollution ููŠ protobufjs
Dev.toDev.to
Security

protobufjs Prototype Pollution ํ•ด๊ฒฐ์„ ํ†ตํ•œ CVE-2023-36665 ๋ณด์•ˆ ์ทจ์•ฝ์  ์ œ๊ฑฐ

๐Ÿ›ก๏ธ ุญู„ ุงุญุชุฑุงููŠ ู„ุซุบุฑุฉ Prototype Pollution ููŠ protobufjs

warrior Bug finder (warrior)2026๋…„ 4์›” 28์ผ6๋ถ„intermediate

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 ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐฐํฌ ์ „ ๋ณด์•ˆ ๊ฒ€์ฆ ์ž๋™ํ™”

์›๋ฌธ ์ฝ๊ธฐ