๐Ÿ—ž๏ธ IT ๋™ํ–ฅ ํŒŒ์•… ๋ฐ ๋‚˜์˜ ์ƒ๊ฐ ์ •๋ฆฌ

GitLab์˜ ์ทจ์•ฝ์„ฑ ์ดํ•ด: SAML ๋ณด์•ˆ ๋ฐ ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•œ ๊ตํ›ˆ

JanginTech 2024. 9. 21. 16:27

1. GitLab Patches Critical Authentication Bypass Vulnerability

https://www.securityweek.com/gitlab-patches-critical-authentication-bypass-vulnerability/

 

 

[ ์š”์•ฝ์ •๋ฆฌ ]

GitLab Community Edition(CE) ๋ฐ Enterprise Edition(EE)์— ๋Œ€ํ•œ ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ, ์ธ์ฆ ์šฐํšŒ๋กœ ์ด์–ด์ง€๋Š” ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์ ์ด ํ•ด๊ฒฐ๋๋‹ค.

 

๋ฌธ์ œ๋Š” CVE-2024-45409(CVSS ์ ์ˆ˜ 10/10) ์œผ๋กœ, SAML ๊ธฐ๋ฐ˜ ์ธ์ฆ GitLab CE/EE ์ธ์Šคํ„ด์Šค์— ์˜ํ–ฅ์„ ์ค€๋‹ค.

XML ๊ธฐ๋ฐ˜ ๋งˆํฌ์—… ์–ธ์–ด์ธ SAML์€ Ruby SAML ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SAML ๊ถŒํ•œ ๋ถ€์—ฌ์˜ ํด๋ผ์ด์–ธํŠธ ์ธก์„ ๊ตฌํ˜„ํ•˜๋ฉฐ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” signature wrapping์— ์ทจ์•ฝํ•˜๋‹ค.

 

GitLab์€ ์œ„ ๋ฌธ์ œ์˜ ์•…์šฉ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์šฉ์ž๋Š” ์ž์ฒด ๊ด€๋ฆฌ ์ธ์Šคํ„ด์Šค์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž ๊ณ„์ •์— ๋Œ€ํ•ด 2FA๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋ฉฐ, ์ฝ”๋“œํ˜‘์—… ํ”Œ๋žซํผ์—์„œ SAML 2๋‹จ๊ณ„ ์šฐํšŒ ์˜ต์…˜ ํ—ˆ์šฉ์„ ๊ธˆ์ง€ํ•ด์•ผ ํ•จ์„ ๊ถŒ๊ณ ํ–ˆ๋‹ค. 

 

 

1. SAML(Security Assertion Markup Language)?

  • ํ•œ ๋ฒˆ๋งŒ ๋กœ๊ทธ์ธํ•˜์—ฌ ์—ฌ๋Ÿฌ ์•ฑ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์ธ์ฆ ํ”„๋กœ์„ธ์Šค
  •  SSO(Single Sign-On)์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์•”ํ˜ธ๋กœ ์—ฌ๋Ÿฌ ์‚ฌ์ดํŠธ, ์„œ๋น„์Šค, ์•ฑ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š” ์•”ํ˜ธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ค„์ด๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๋”์šฑ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ํŒจ์Šค์›Œ๋“œ ๋ถ„์‹ค ์œ„ํ—˜์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•˜๋ฉด ID ๊ณต๊ธ‰์ž๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ํ™•์ธํ•œ ํ›„, ์‚ฌ์šฉ์ž๊ฐ€ ์•ก์„ธ์Šค ํ•˜๋ ค๋Š” ์‚ฌ์ดํŠธ, ์„œ๋น„์Šค ๋˜๋Š” ์•ฑ์˜ ์„œ๋น„์Šค ๊ณต๊ธ‰์ž ์ธก์œผ๋กœ ์ธ์ฆ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ

 

SAML ์ธ์ฆ ํ”„๋กœ์„ธ์Šค

3๊ฐœ์˜ ์—ญํ• (?)์ด ์‚ฌ์šฉ๋œ๋‹ค.

์—ญํ•  ๋‚ด์šฉ
๋ณด์•ˆ ์ฃผ์ฒด(์‚ฌ์šฉ์ž) ์•ก์„ธ์Šคํ•˜๊ณ ์ž ํ•˜๋Š” ์ธ๊ฐ„ ์‚ฌ์šฉ์ž
ID ๊ณต๊ธ‰์ž(IdP) Google ๊ฐ™์€ ์„œ๋น„์Šค์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž ์‹ ์›์„ ํ™•์ธํ•˜๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ
SSO๋Š” ๋ณธ์งˆ์ ์œผ๋กœ *IdP ๋Œ€ํ‘œ์ž ์—ญํ• ์„ ์ˆ˜ํ–‰
*IdP: ์ผ๋ฐ˜์ ์œผ๋กœ ๋กœ๊ทธ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ID๋ฅผ ์ €์žฅํ•˜๊ณ  ํ™•์ธํ•˜๋Š” SW ์„œ๋น„์Šค
์„œ๋น„์Šค ๊ณต๊ธ‰์ž(SP) ์‚ฌ์šฉ์ž๊ฐ€ ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ์„œ๋น„์Šค
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  IdP๋ฅผ ์‹ ๋ขฐํ•˜์—ฌ ์‚ฌ์šฉ์ž ์‹ ์›์„ ํ™•์ธ

 

1. ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋น„์Šค ๊ณต๊ธ‰์ž์— ์•ก์„ธ์Šค๋ฅผ ์‹œ๋„

๋ณด์•ˆ ์ฃผ์ฒด๊ฐ€ ์„œ๋น„์Šค(Service Provider)์— ์•ก์„ธ์Šค๋ฅผ ์‹œ๋„ํ•œ๋‹ค.

SP๋Š” ์•„์ง ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฐ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋ฅผ IdP๋กœ ๋ฆฌ๋””๋ ‰์…˜ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

2. ID ๊ณต๊ธ‰์ž๋กœ ๋ฆฌ๋””๋ ‰์…˜

IdP๋กœ ๋ฆฌ๋””๋ ‰์…˜๋œ๋‹ค.

์ด ๋ถ€๋ถ„์—์„œ ๋กœ๊ทธ์ธ์„ ์•ˆ ํ–ˆ์„ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋กœ๊ทธ์ธํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค.

 

3. ์‚ฌ์šฉ์ž๊ฐ€ IdP์— ๋กœ๊ทธ์ธ

์‚ฌ์šฉ์ž๊ฐ€ ์ž๊ฒฉ ์ฆ๋ช…(ID, PW)์„ ์ž…๋ ฅํ•˜๋ฉด IdP๊ฐ€ ํ•ด๋‹น ID๋ฅผ ํ™•์ธํ•œ๋‹ค.

 

4. IdP๊ฐ€ SAML Assertion์„ ์ƒ์„ฑ

์ธ์ฆ๋˜๋ฉด IdP๋Š” SAML Assertion(์‚ฌ์šฉ์ž ID ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ํ† ํฐ)์„ ์ƒ์„ฑํ•˜์—ฌ SP์— ์ „๋‹ฌํ•œ๋‹ค.

 

5. SP๊ฐ€ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌ

SAML Assertion์„ ์ˆ˜์‹ ํ•œ SP๋Š” ์ด๋ฅผ ํ™•์ธ ํ›„, ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋น„์Šค์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•œ๋‹ค.

 

2. SSO(Single Sign-On)?

  • ์‚ฌ์šฉ์ž๊ฐ€ ํ•œ ๋ฒˆ์˜ ๋กœ๊ทธ์ธ์œผ๋กœ ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ธ์ฆ ๋ฐฉ์‹
  • ํ•˜๋‚˜์˜ ์ธ์ฆ ์ •๋ณด(์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ)๋กœ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค์—์„œ ๋กœ๊ทธ์ธํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ˜๋ณต์ ์ธ ์ธ์ฆ ์ ˆ์ฐจ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ค‘์•™ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ, ๊ทธ ๊ณผ์ •์—์„œ ํ† ํฐ์ด๋‚˜ ์ฟ ํ‚ค ๊ฐ™์€ ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์‹ ์›์„ ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  • OAuth, SAML, OpenID Connect ๋“ฑ์ด ์žˆ๋‹ค.

 

 

 

๊ฒฐ๋ก 

GitLab์—์„œ ๊ณต๊ฒฉ์ž๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์ด ์‹œ์Šคํ…œ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” CVE-2024-45409 ๊ณต๊ฒฉ์ด ๋ฐœ๊ฒฌ๋๋‹ค. 

์ด ์ทจ์•ฝ์  ๋•Œ๋ฌธ์— ์ธ์ฆ(๋กœ๊ทธ์ธ) ์ ˆ์ฐจ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

GitLab์€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ธด๊ธ‰ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐฐํฌํ–ˆ๊ณ , ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ์—…๋ฐ์ดํŠธ๋ฅผ ์ ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋‹ค.

 

 


 

๐Ÿค” ์ด์— ๋Œ€ํ•œ ๋‚˜์˜ ์ƒ๊ฐ

GitLab์˜ ์ทจ์•ฝ์ ์— ๋Œ€ํ•ด ์šฐ๋ ค์™€ ์ธ์‹์ด ๊ต์ฐจํ•˜๋Š” ๋А๋‚Œ์„ ๋ฐ›์€ ๋‚ ์ด๋‹ค. ์ทจ์•ฝ์ ์ด ์–ด๋–ป๊ฒŒ ๋ฌด๋‹จ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ์•Œ์ˆ˜๋ก  GitLab์„ ๋น„๋กฏํ•œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์—์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ถŒ์žฅํ•˜๋Š” ์ด์œ ๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

๋”ฐ๋ผ์„œ, ์‹œ์Šคํ…œ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ ค๋ฉด ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. 

 

์œ„ ์•„ํ‹ฐํด์„ ์ฝ๊ณ  Ruby SAML ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ์ˆ ์  ์ธก๋ฉด๊ณผ signature wrapping์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ๋” ๊นŠ์ด ์ดํ•ดํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ๋งˆ์Œ์ด ์ƒ๊ฒผ๋‹ค. (SAML ๊ตฌํ˜„์˜ ์ž ์žฌ์ ์ธ ์•ฝ์ ์„ ๋” ์ž˜ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฑฐ๋‹ˆ๊นŒ!)

 

๋‹ค์–‘ํ•œ ์ธ์ฆ ์ทจ์•ฝ์ ์„ ๋ฐฐ์šฐ๋ฉด์„œ ๋ณด์•ˆ ์กฐ์น˜๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์ดํ•ดํ•˜๊ณ  ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํšจ๊ณผ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ๋ฐฐ์›Œ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.