GH Actions - Cache Poisoning

Support HackTricks

For further details check the original post https://scribesecurity.com/blog/github-cache-poisoning/

Cache Poisoning

Git action action/cache๋Š” ์ง€์†์  ํ†ตํ•ฉ(CI) ํ”„๋กœ์„ธ์Šค์—์„œ ์บ์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋„์ž…ํ•˜๋ฉฐ, ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

  1. Run Action: ์ด ๋‹จ๊ณ„์—์„œ๋Š” CI ์‹คํ–‰ ์ค‘์— ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰์€ ๊ณ ์œ ํ•œ ์บ์‹œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐ€์ง€ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

  • Cache-hit: ์š”์ฒญ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์—์„œ ๋ฐœ๊ฒฌ๋˜์–ด ์ฆ‰์‹œ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

  • Cache-miss: ์บ์‹œ์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์–ด ํ•„์š”ํ•œ ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒˆ๋กœ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ฒ˜์Œ ์š”์ฒญํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  1. Post Workflow Action: ์ด ๋‹จ๊ณ„๋Š” CI ์›Œํฌํ”Œ๋กœ ํ›„์— ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œํ•˜๋Š” ๋ฐ ์ „๋…ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, ์‹คํ–‰ ์ž‘์—… ์ค‘์— ์บ์‹œ ๋ฏธ์Šค๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ง€์ •๋œ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํ˜„์žฌ ์ƒํƒœ๊ฐ€ ์ œ๊ณต๋œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ์ž๋™ํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ช…์‹œ์ ์ธ ํ˜ธ์ถœ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Security Measures: Cache Isolation and Access Restrictions

๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๊ณ  ์บ์‹œ ๊ฒฉ๋ฆฌ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ ‘๊ทผ ์ œํ•œ์ด ์‹œํ–‰๋˜์–ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜ ๊ฐ„์˜ ๋…ผ๋ฆฌ์  ๋ถ„๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Feature-A ๋ธŒ๋žœ์น˜(๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜์—์„œ ํŒŒ์ƒ๋œ)์˜ ์บ์‹œ๋Š” Feature-B ๋ธŒ๋žœ์น˜(๋˜ํ•œ ๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜์—์„œ ํŒŒ์ƒ๋œ)์˜ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์บ์‹œ ์ž‘์—…์€ ํŠน์ • ๊ฒ€์ƒ‰ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค:

  • ๋จผ์ € ์›Œํฌํ”Œ๋กœ ์‹คํ–‰๊ณผ ๋™์ผํ•œ ๋ธŒ๋žœ์น˜ ๋‚ด์—์„œ ์บ์‹œ ํžˆํŠธ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

  • ์‹คํŒจํ•  ๊ฒฝ์šฐ, ๋ถ€๋ชจ ๋ธŒ๋žœ์น˜ ๋ฐ ๊ธฐํƒ€ ์—…์ŠคํŠธ๋ฆผ ๋ธŒ๋žœ์น˜๋กœ ๊ฒ€์ƒ‰์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”ํ•˜๊ฒŒ๋„, ์บ์‹œ ์ ‘๊ทผ์€ ๋ธŒ๋žœ์น˜ ๋ฒ”์œ„๋กœ ์ œํ•œ๋˜๋ฉฐ ํŠน์ • ๋ธŒ๋žœ์น˜์˜ ๋ชจ๋“  ์›Œํฌํ”Œ๋กœ ๋ฐ ์‹คํ–‰์— ๊ฑธ์ณ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, GitHub๋Š” ์บ์‹œ ํ•ญ๋ชฉ์ด ์ƒ์„ฑ๋œ ํ›„ ์ฝ๊ธฐ ์ „์šฉ ์ •์ฑ…์„ ์‹œํ–‰ํ•˜์—ฌ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

Real-World Implication: From Low to High-Permission Workflow Attack

์ผ๋ฐ˜์ ์ธ CI ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์บ์‹œ ์˜ค์—ผ์„ ์ด์šฉํ•˜์—ฌ ๋‚ฎ์€ ๊ถŒํ•œ์˜ ์›Œํฌํ”Œ๋กœ์—์„œ ๋†’์€ ๊ถŒํ•œ์˜ ์›Œํฌํ”Œ๋กœ๋กœ ๊ถŒํ•œ์„ ์ƒ์Šน์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค:

  • Unit-test ์›Œํฌํ”Œ๋กœ๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ฑ…์ž„์ด ์žˆ์œผ๋ฉฐ, ์†์ƒ๋˜์—ˆ๊ฑฐ๋‚˜ ์ทจ์•ฝํ•œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์›Œํฌํ”Œ๋กœ๋Š” action/cache Git ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ๋ฅผ ๋ชจ๋“  ์›Œํฌํ”Œ๋กœ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

  • Release ์›Œํฌํ”Œ๋กœ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ์ฑ…์ž„์ด ์žˆ์œผ๋ฉฐ, Golang ์ข…์†์„ฑ์„ ์บ์‹ฑํ•˜์—ฌ ์ž‘์—…์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์›Œํฌํ”Œ๋กœ๋Š” ํ•ฉ๋ฒ•์ ์ธ Golang ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(`go

Last updated