GitLab์ ์ทจ์ฝ์ฑ ์ดํด: SAML ๋ณด์ ๋ฐ ์ ๋ฐ์ดํธ์ ๋ํ ๊ตํ
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 ๊ตฌํ์ ์ ์ฌ์ ์ธ ์ฝ์ ์ ๋ ์ ํ์ ํ๋ ๋ฐ ๋์์ด ๋ ๊ฑฐ๋๊น!)
๋ค์ํ ์ธ์ฆ ์ทจ์ฝ์ ์ ๋ฐฐ์ฐ๋ฉด์ ๋ณด์ ์กฐ์น๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ดํดํ๊ณ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ค์์ฑ์ ๋ํด ๋ฐฐ์๊ฐ ์ ์๋ ๊ฒ ๊ฐ๋ค.