01. TeamCity ์ธ์ฆ ์ฐํ ์ทจ์ฝ์ ๊ฐ์
์ธ์ฆ ์ฐํ ์ทจ์ฝ์ ์ ์ ์์ ์ธ ๊ณต๊ฒฉ์๊ฐ ๋ณด์ ๋ฉ์ปค๋์ฆ์ ์ฐํํ๊ณ ์์คํ ์ ์ธ์ฆ ์ ์ฐจ๋ฅผ ํํผํ์ฌ ๊ถํ์ ํ๋ํ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ๋ ์ทจ์ฝ์ ์ด๋ค. ์ด๋ฌํ ์ทจ์ฝ์ ์ API ์ค์ฉ, ์ธ์ฆ ๋ฐ ์ ๊ทผ ์ ์ด ๊ฒฐํจ, ์ ๋ ฅ ๊ฐ ๊ฒ์ฆ ๋ฏธํก, ๋ณด์ ์ค์ ๋ฏธํก ๋ฑ์ ๊ฒฐํจ์ผ๋ก ์ธํด ๋ฐ์ํ๋ค. ๊ณต๊ฒฉ์๋ ์ด๋ฅผ ์ ์ฉํด ์ด๊ธฐ ์ก์ธ์ค ๊ถํ์ ์ป๊ฑฐ๋ ๋ฏผ๊ฐ ์ ๋ณด ํ์ทจ ๋ฑ์ ๊ณต๊ฒฉ์ ์ํํ ์ ์๋ค.
API ์ค์ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ๊ณต๋๋ ๊ธฐ๋ฅ์ด๋ ์ธ๋ถ ์ธํฐํ์ด์ค๋ฅผ ๋ถ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค. ์ธ์ฆ ๋ฐ ์ ๊ทผ ์ ์ด ๋ฉ์ปค๋์ฆ ๊ฒฐํจ์ ๊ถํ์ด ๋ถ์ฌ๋์ง ์์ ์ฌ์ฉ์๊ฐ ์์คํ ์ ์ ๊ทผํ ์ ์๋ ๊ฒฐํจ์ ์๋ฏธํ๋ฉฐ, ์ ๋ ฅ ๊ฐ ๊ฒ์ฆ ๋ฏธํก์ ์ธ๋ถ ์์ฒญ์ด๋ ์ ๋ ฅ ๊ฐ์ ๋ํ ๊ฒ์ฆ ์ ์ฐจ ๋ฏธํก์ผ๋ก ์ ์์ ์ธ ๋ฐ์ดํฐ ์ฝ์ ์ด ๊ฐ๋ฅํ ๊ฒฐํจ์ ์๋ฏธํ๋ค. ์ด๋ฌํ ์ ํ์ ๊ฒฐํจ๋ค์ด ์ทจ์ฝ์ ์ผ๋ก ์ด์ด์ง๋ฉด ์์คํ ์ ์ฌ๊ฐํ ์ํ์ด ์ผ๊ธฐ๋๊ฒ ๋๋ค.
JetBrains๊ฐ ๊ฐ๋ฐํ CI/CD(์ง์์ ํตํฉ ๋ฐ ์ง์์ ๋ฐฐํฌ) ์๋ฒ ์๋ฃจ์ ์ธ TeamCity๋ 2023๋ ์ ์ด์ด ์ต๊ทผ๊น์ง๋ ์ธ์ฆ ์ฐํ ์ทจ์ฝ์ ์ด ๋ฐ๊ฒฌ๋์ด ๋ค์์ ๊ณต๊ฒฉ ๊ทธ๋ฃน์์ ๊ณต๊ฒฉ๋ฒกํฐ๋ก ์ ์ฉํ์๋ค. ๊ณต๊ฒฉ์๋ค์ ์ทจ์ฝ์ ์ ์ ์ฉํด ๊ด๋ฆฌ์ ๊ถํ ํ๋์ด๋ ์๊ฒฉ ์ฝ๋ ์คํ(RCE)์ ํตํด ์์คํ ์ ์ ์ดํ๋ ๊ณต๊ฒฉ์ ์ํํ๋ค. ์ด์ ๋ฐ๋ผ ์ด๋ฒ ํธ์์๋ 2023๋ ์ ๋ฐ๊ฒฌ๋ CVE-2023-42793 ๊ณต๊ฒฉ ์ฌ๋ก์ 2024๋ ๋ฐ๊ฒฌ๋ TeamCity ์ทจ์ฝ์ (CVE-2024-27198)์ ๋น๊ต ๋ถ์ํ์ฌ ์ธ์ฆ ์ฐํ ์ทจ์ฝ์ ์ ๋ฐ์ ์๋ฆฌ ๋ฐ ๋์๋ฐฉ์์ ๋ํด์ ์ดํด๋ณด๊ณ ์ ํ๋ค.
02. CVE-2023-42793 ๊ณต๊ฒฉ ์ฌ๋ก
CVE-2024-27198์ ์ดํด๋ณด๊ธฐ์ ์์ 2023๋ TeamCity ์ทจ์ฝ์ ์ผ๋ก ๋ฐ๊ฒฌ๋ CVE-2023-42793์ ๊ณต๊ฒฉ์ฌ๋ก์ ๋ํด์ ์ดํด๋ณด๊ณ ์ ํ๋ค. 2023๋ ์ ๋ฐ๊ฒฌ๋ CVE-2023-42793์ HTTP POST ์์ฒญ์ ํตํด ์ ํจํ ์ก์ธ์ค ํ ํฐ์ ํ๋ํ ์ ์๋ ์ทจ์ฝ์ ์ผ๋ก ์ด๋ฅผ ์ ์ฉํด ์ด๊ธฐ ์ก์ธ์ค ๊ถํ์ ์ป๊ณ ๋ฐฑ๋์ด๋ฅผ ์ค์นํ๊ฑฐ๋ ๋ฏผ๊ฐ ์ ๋ณด๋ฅผ ํ์ทจํ ์ ์๋ค. ํด๋น ์ทจ์ฝ์ ์ ๋ถํ๋ฐ ๊ณต๊ฒฉ๊ทธ๋ฃน์ธ ํ๋ ์ฝ๋ธ๋ผ(Hidden Cobra)์ ์๋ค๋ฆฌ์(Andariel)์์ ์ ์ฉํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
1) Lazarus ๊ณ์ด APT ๊ทธ๋ฃน : Hidden Cobra
๋ถํ๋ฐ APT ๊ณต๊ฒฉ๊ทธ๋ฃน Hidden Cobra(aka. Diamond Sleet)๋ 2023๋ 10์ ์ด CVE-2023-42793 ์ทจ์ฝ์ ์ผ๋ก TeamCity ์๋ฒ์ ์ ๊ทผํ ํ Powershell์ ํตํด Forest64.exe์ 4800-84DC-063A6A41C5C ํ์ด๋ก๋๋ฅผ ๋ค์ด๋ก๋ ํ๊ณ ๋ผ์๋ฃจ์ค(Lazarus)์์ ์ํํ๋ DeathNote campaign์ ForestTiger ๋ฐฑ๋์ด๋ฅผ ์ฌ์ฉํด LSASS ํ๋ก์ธ์ค์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ์๊ฒฉ ์ฆ๋ช ์ ๋คํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ์๋ค. ์ด์ธ์๋ ๋์ผ ์ทจ์ฝ์ ์ ์ด์ฉํด DLL Hijacking ๊ณต๊ฒฉ์ ํตํด์ RAT ์ ์ฑ์ฝ๋๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๋คํ๋ฅผ ์ํํ๊ธฐ๋ ํ์๋ค.
2) Lazarus ๊ณ์ด APT ๊ทธ๋ฃน : Andariel
๋ถํ๋ฐ APT ๊ณต๊ฒฉ๊ทธ๋ฃน Andariel(aka. Onyx Sleet)์ ์ผ๋ฐ ๊ธฐ์ ๋ฐ ๊ธ์ต๊ธฐ๊ด์ด๋ ๊ตญ๋ด ์ ๋ถ๊ธฐ๊ด์ ํ์ ์ผ๋ก ๊ณต๊ฒฉํ๋ค. ์ด๋ค์ CVE-2023-42793์ ์ด์ฉํด ์๋ฒ์ ์ ๊ทผํ ํ Kerberos ํฐ์ผ์ ๋ถ์ฌํ๋ Windows ๊ณ์ ์ด๋ฆ์ธ KRBTGT์ ์ด์ฉํ์ฌ krtbgt๋ผ๋ ์๋ก์ด ์ฌ์ฉ์ ๊ณ์ ์ ์์ฑํ๊ณ tasklist, whoami, netstat, systeminfo ๋ฑ ๋ค์์ ์์คํ ๊ฒ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ์์คํ ์ ๋ณด๋ฅผ ํ์ธํ๋ค. ์ดํ Powershell์ ํตํด temp.exe์ inetmgr.exe๋ฅผ ๋ค์ด๋ก๋ ํ์์ผ๋ฉฐ, ๋ค์ด๋ก๋ ๋ ์ ์ฑ์ฝ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋๋ ํํ๋ก HazyLoad ์ ์ฑ์ฝ๋๋ผ ๋ช ๋ช ๋๋ค.
์ดํ ๊ณต๊ฒฉ์๋ ์๊ฒฉ ๋ฐ์คํฌํฑ ํ๋กํ ์ฝ(RDP)์ ํตํด ํ ์์คํ ์ ์ ๊ทผํ๊ฑฐ๋ ๋ค๋ฅธ ๊ณต๊ฒฉ ๊ทธ๋ฃน์ ์ถ๊ฐ ๊ณต๊ฒฉ์ ์ ์งํ๊ธฐ ์ํด์ TeamCity ์๋น์ค ์ค๋จ, LSASS ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํ ์๊ฒฉ ์ฆ๋ช ๋คํ, ๋ธ๋ผ์ฐ์ ๋ด ์ ์ฅ๋ ์๊ฒฉ์ฆ๋ช ์ ๋ณด ๋ฐ ๋ฐ์ดํฐ ๊ฒ์ ๋๊ตฌ ๋ฐฐํฌ ๋ฑ์ ํตํด ์ถ๊ฐ ์ ๋ณด๋ฅผ ํ๋ณดํ๊ธฐ ์ํ ๊ณต๊ฒฉ์ ์ํํ์๋ค.
03. CVE-2024-27198 ์ทจ์ฝ์ ๋ถ์
’02. CVE-2023-42793 ๊ณต๊ฒฉ ์ฌ๋ก’์์ ํ์ธํ ๋ฐ์ ๊ฐ์ด TeamCity ํ๊ฒฝ์์ ๋ฐ์ํ๋ ์ธ์ฆ ์ฐํ ์ทจ์ฝ์ ์ TeamCity์ ์์คํ ์ธ์ฆ์ ์ฐํํ๊ณ ๊ณ์ ์์ฑ ๋ฐ TeamCity์ ํ๋ก์ ํธ, ๋น๋, ์์ด์ ํธ, ์ํฐํฉํธ ๋ฑ์ ๊ตฌ์ฑ์์๋ฅผ ์ ์ดํ ์ ์์ด์ ๊ณต๊ธ๋ง ๊ณต๊ฒฉ์ผ๋ก ์ด์ด์ง ์ ์๋ค. TeamCity ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ์ ๋ชจ๋ ๋ฒ์ ์์ ๋ฐํ๋๊ณ ์์คํ ๋ฆฌ์์ค์ ์ ํ์์ด ์ ๊ทผ์ด ๊ฐ๋ฅํ RCE ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ณ ์ํ ์ทจ์ฝ์ ์ ์ํ๋ค.
2023๋ ์ ๋ฐ๊ฒฌ๋ CVE-2023-42793 ์ดํ 2024๋ ์ ๋ฐ๊ฒฌ๋ CVE-2024-27198์ ํดํน๊ทธ๋ฃน์์ ์ ์ฉ๋ ์ฌ๋ก๋ ํ์ธ๋์ง ์์์ผ๋, ์์ค๋ฏผ(Jasmin) ๋์ฌ์จ์ด ๋ณ์ข , XMRig, SparkRAT ๋ฐฑ๋์ด ๋ฑ์์ ์ ์ฉํ ์ฌ๋ก๊ฐ ํ์ธ๋จ์ ๋ฐ๋ผ ํฅํ ๋ค์์ ํดํน๊ทธ๋ฃน์์ ์ ์ฉํ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค.
CVE-2024-27198์ CVSS 3.0 ๊ธฐ์ค 9.8์ ํด๋นํ๋ฉฐ, CVE์ ๋ค๋ฅด๊ฒ ์ทจ์ฝ์ ์ ์ฉ ๊ฐ๋ฅ์ฑ์ ์์ธกํ๋ ์งํ์ธ EPSS ์์น๋ฅผ ํ์ธํด ๋ณด๋ฉด [ํ 1]๊ณผ ๊ฐ์ด ์ทจ์ฝ์ ์ ์ ์ฉ ๊ฐ๋ฅ์ฑ์ด ์๋นํ ๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
CVE-2024-27198์ ๋์ฒด ๊ฒฝ๋ก ๋ฌธ์ ๋ก ์ธํด ๋ฐ์ํ๋ ์น ๊ตฌ์ฑ์์ ์ธ์ฆ์ ์ฐํํ๋ ์ทจ์ฝ์ ์ด๋ค. ์ฝ๋ ๊ฒฐํจ์ผ๋ก ์ธํด ๋ฐ์ํ๋ฉฐ ํน์ ์์ฒญ ์ ์ก ํ updateViewIfRequestHasJspParameter ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ชจ๋ ์ธ์ฆ์ ๋ํ ์ฐํ๊ฐ ๊ฐ๋ฅํ๊ฒ ๋๋ค. CVE-2024-27198 ์ทจ์ฝ์ ์์ธ์ ๋ํด์๋ PoC์ ์ฝ๋ ๋๋ฒ๊น ์ ํตํด ์ธ์ฆ ์ฐํ ๊ณผ์ ์ ๋ํด์ ์ค๋ช ํ๊ณ ์ ํ๋ค.
1) CVE-2024-27198 : PoC ์์ฐ
PoC ์์ฐ์ ๋ค์๊ณผ ๊ฐ์ ํ๊ฒฝ์์ ์งํ๋๋ฉฐ ๊ตฌ์ฑ๋๋ [๊ทธ๋ฆผ 4]๊ณผ ๊ฐ๋ค.
์๋ [๊ทธ๋ฆผ 5]์ PoC ์คํ ๊ฒฐ๊ณผ ํ๋ฉด์์ ์์์ ๊ฐ์ผ๋ก ์ง์ ํ ๊ด๋ฆฌ์ ๊ณ์ ์ด ์์ฑ๋๊ณ ์น ์์ด ํฌํจ๋ ์ ์ฑ ํ๋ฌ๊ทธ์ธ์ด ์ ๋ก๋ ๋์ด RCE ๊ณต๊ฒฉ๊น์ง ๊ฐ๋ฅํ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ด๋ป๊ฒ ๋ฐ์ํ ์ ์๋์ง PoC ์ฝ๋ ๋ถ์๊ณผ ๋๋ฒ๊น ์ ํตํด ๋ ์์ธํ ์์๋ณด๋๋ก ํ์.
2) CVE-2024-27198 : PoC ๋ถ์
[๊ทธ๋ฆผ 4]์ PoC ๊ตฌ์ฑ๋์ ๋ฐ๋ผ ๊ด๋ฆฌ์ ๊ณ์ ์์ฑ, ์ ์ฑ ํ๋ฌ๊ทธ์ธ ์ ์, ์ ์ฑ ํ๋ฌ๊ทธ์ธ ์ ๋ก๋, RCE ๋ฐํ ๊ณผ์ ์ ๋ํด ๋๋์ด ์ดํด๋ณด๊ณ ์ ํ๋ค.
๋จผ์ , ์ธ์ฆ ์ฐํ ์ทจ์ฝ์ ๋ฐํ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ธ์ฆ์ ํ์๋ก ํ๋ ์์์ ๊ฒฝ๋ก์ ์ ๊ทผ์ ์๋ํ๋ค.
๋ก๊ทธ์ธํ์ง ์์ ์ํ์์ ์๋ฒ ๋ฒ์ ์ ๋ณด๊ฐ ๋ ธ์ถ๋๋ ํ์ด์ง์ธ /app/rest/server ๋ก ์ ๊ทผ ์์ฒญ์ ํ์ ๋๋ฅผ ์น ํ๋ก์ ๋๊ตฌ(Burp Suite)๋ก ํ์ธํด๋ณด๋ฉด ์๋ต ์ฝ๋ 302(Found)๋ฅผ ๋ฐํํ๊ณ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ ๋๋ ๊ฒ์ ์ ์ ์๋ค.
PoC ์ฝ๋๋ฅผ ํ์ธํด๋ณด๋ฉด GetTeamCityVersion() ํจ์์์ ์์ฒญ url์ ์กด์ฌํ์ง ์๋ ์์์ ๊ฒฝ๋ก(/hax)๋ฅผ ์ฌ์ฉํ์ฌ /app/rest/server ๋ก ์ ๊ทผ์ ์๋ํ๊ณ ์๋ค.
์์ฒญ ๋ผ์ธ์ URL์ PoC ์ฝ๋์ ๊ฐ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ๋ก(/hax)๋ก ๋ณ๊ฒฝํ๊ฒ ๋๋ฉด [๊ทธ๋ฆผ 8]์ Response ๊ฒฐ๊ณผ์์ ํ์ธํ ์ ์๋ฏ์ด /app/rest/server ํ์ด์ง์ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ฌ ์๋ฒ์ ๋ฒ์ ์ ๋ณด๊ฐ ๋ ธ์ถ๋๋ค.
์์ ๊ณผ์ ์ ํ๋ฆ๋๋ก ํํํ๋ฉด [๊ทธ๋ฆผ 9]๊ณผ ๊ฐ์ผ๋ฉฐ, ์ธ์ฆ์ด ํ์ํ ํ์ด์ง์ ์กด์ฌํ์ง ์๋ ์์์ ๊ฒฝ๋ก๋ฅผ ์์ฒญํ ๊ฒฝ์ฐ ์ธ์ฆ ์ฐํ๊ฐ ๊ฐ๋ฅํ๊ฒ ๋๋ค.
PoC ์ฝ๋์์ /hax?jsp=/app/rest/server;.jsp ๋ก ์์ฒญ URL์ ๋ณ๊ฒฝํ์ฌ ์๋ฒ ๋ฒ์ ์ ๋ณด๊ฐ ๋ ธ์ถ๋๋ ํ์ด์ง์ ์ ๊ทผ ์ ๋ฌด๋ก ์ธ์ฆ ์ฐํ ์ทจ์ฝ์ ์ ๋ฐํ ์ฌ๋ถ๋ฅผ ํ์ ํ๊ณ ์๋ค. ์ด์ ๊ฐ์ ๊ตฌ๋ฌธ์ด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ธ์ฆ์ ์ฐํํ ์ ์๋์ง ๋๋ฒ๊น ์ ํตํด ์์๋ณด๊ณ ์ ํ๋ค.
[๊ทธ๋ฆผ 10]์ ๋๋ฒ๊น ์ ํธ์ถ๋๋ ํด๋์ค์ ๋ฉ์๋๋ฅผ ๊ฐ๋จํ ์์ฝํ ํ๋ฆ๋์ด๋ค. ์ ์์ ์ธ ์์ฒญ์ผ ๊ฒฝ์ฐ๋ ์๋ตํ๋ฉฐ ๋จ๊ณ๋ณ ๋๋ฒ๊น ๊ณผ์ ์ ๋ฐ๋ผ ์์ธํ๊ฒ ์์๋ณด๋๋ก ํ์.
๋จผ์ , ์ดํด๋ณผ PageNotFoundController ํด๋์ค๋ ์กด์ฌํ์ง ์๋ ๊ฒฝ๋ก๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ ํ์ฉ๋๋ฉฐ doHandle ๋ฉ์๋์์ ModelAndView์ “404.jsp” ๊ฐ ๋ฐํ๋๊ณ servletPath(์๋ธ๋ฆฟ ๊ฒฝ๋ก)๋ “/404.html”์ด ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
[๊ทธ๋ฆผ 11]์์ PageNotFoundController๋ BaseController๋ฅผ ์์ํ๊ณ ์์ผ๋ฉฐ, BaseController ํด๋์ค๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์์ ํด๋น ์ทจ์ฝ์ ์ด ๋ฐ์๋๋ค.
์๋์ [๊ทธ๋ฆผ 12]์์ BaseController ํด๋์ค์ handleRequestInternal ๋ฉ์๋๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ๋, ์์ฒญ์ด ๋ฆฌ๋ค์ด๋ ์ ๋์ง ์๋๋ค๋ฉด (์ฆ, ํธ๋ค๋ฌ๊ฐ ์๋ต ์ฝ๋ 302(Found) ๋ฆฌ๋ค์ด๋ ์ ์ ์คํํ์ง ์๋ ๊ฒฝ์ฐ) updateViewIfRequestHasJspParameter ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋๋ค.
[๊ทธ๋ฆผ 13]์์ updateViewIfRequestHasJspParameter ๋ฉ์๋๋ฅผ ํ์ธํ๋ฉด modelAndView๊ฐ null์ด ์๋๊ณ ํ์ฌ ์์ฒญ์ servletPath(์๋ธ๋ฆฟ ๊ฒฝ๋ก)๊ฐ .jsp๋ก ๋๋์ง ์์ ๊ฒฝ์ฐ isControllerRequestWithViewName ๋ณ์๊ฐ true๋ก ์ค์ ๋๋ค.
์ด๋ฅผ ๋ง์กฑํ๊ธฐ ์ํด์ HTTP 404(not found) ์๋ต์ ์์ฑํ๋๋ก ์์ฒญํ๋ฉด [๊ทธ๋ฆผ 11]์์ ํ์ธํ๋ฏ์ด modelAndView๊ฐ 404.jsp๊ฐ ๋๊ณ ์๋ธ๋ฆฟ ๊ฒฝ๋ก๋ /404.html์ด ์์ฑ๋๋ค. ์ด ๋ ๊ฒฝ๋ก๊ฐ .html๋ก ๋๋๊ธฐ ๋๋ฌธ์ True๋ก ์ค์ ๋๋ค.
๊ทธ ๋ค์ getJspFromRequest ๋ฉ์๋๊ฐ ํธ์ถ๋๊ณ , ๊ทธ ๊ฒฐ๊ณผ๊ฐ Spring Framework์ modelAndView.setViewName ๋ฉ์๋๋ก ์ ๋ฌ๋๋ค. ์ด ๋ jspFromRequest ๋ณ์์ ๋ด์ฉ์ ๊ณต๊ฒฉ์๊ฐ ๋ณ์กฐํ์ฌ ์ ์ดํ ์ ์๊ฒ ๋๋ค๋ฉด DispatcherServlet์์ ์ฒ๋ฆฌ๋๋ URL์ ๋ณ๊ฒฝํ์ฌ ์์์ ์๋ ํฌ์ธํธ๋ฅผ ํธ์ถํ ์ ์๊ฒ ๋๋ค.
[๊ทธ๋ฆผ 14]์์ getJspFromRequest ๋ฉ์๋๋ฅผ ์ดํด๋ณด๋ฉด ๋ฐ์ค ์น ๋ถ๋ถ์์ ์ฌ๋ฌ ํ๋จ์ ์งํํ๋ฉฐ ๊ทธ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
1) jsp ํ๋ผ๋ฏธํฐ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ
2) jsp ํ๋ผ๋ฏธํฐ ๊ฐ์ด null ๋๋ .jsp ์ข
๋จ ๋ฌธ์์ผ ๊ฒฝ์ฐ
3) jsp ํ๋ผ๋ฏธํฐ ๊ฐ์ “admin/” ๋ฌธ์์ด์ด ํฌํจ๋์ง ์์ ๊ฒฝ์ฐ
[๊ทธ๋ฆผ 15] PoC ์ฝ๋์์ ํ์ธํ ์์ฒญ URL์ ๋ณด๋ฉด ์์ ์กฐ๊ฑด๋ค์ ๋ง์กฑํ๊ณ ์๋ค. ๊ทธ ๊ฒฐ๊ณผ jspFromRequest๊ฐ True๋ฅผ ๋ฐํํ๋ฏ๋ก updateViewIfRequestHasJspParameter ๋ฉ์๋์ jspFromRequest ๊ฐ์ด ์ ๋ฌ๋๋ค.
๋ค์, updateViewIfRequestHasJspParameter ๋ฉ์๋์ ๋์์์ ํ์ธํด๋ณด๋ฉด jspFromRequest ๋ณ์์ ์ธ์ฆ๋ ์๋ ํฌ์ธํธ์ธ “/app/rest/server;.jsp”๊ฐ์ด ์ ๋ฌ๋๊ณ modelAndView.setViewName ํธ์ถ์ด ๋ฐ์ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ดํ Java Servlet API์์ ์ฌ์ฉ๋๋ getRequestDispatcher ๋ฉ์๋๋ฅผ ์ด์ฉํด ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ๋ด๋ถ ๋์์ ์ถ์ํํ๊ณ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
[๊ทธ๋ฆผ 17]์์๋ URI๋ฅผ ๋งคํํ๊ณ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์๋ธ๋ฆฟ ์์ฒญ์ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ฉ์๋์ธ getRequestDispatcher๋ ๋ทฐ ๊ฒฝ๋ก๋ฅผ ์ป๋ ๊ณผ์ ์ ๋ํ๋ด๊ณ , ํ๋ผ๋ฏธํฐ ๊ฒฝ๋ก๋ฅผ ํ์ฑํ๋ stripPathParams ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
stripPathParams ๋ฉ์๋๋ฅผ ํ์ธํด๋ณด๋ฉด ์ธ๋ฏธ์ฝ๋ก (;) ๋ฌธ์ ์ ๊น์ง์ ๋ด์ฉ๋ง ์ถ๊ฐํ๊ณ ๋๋จธ์ง ๋ถ๋ถ์ ์ ๊ฑฐํ๊ณ ์๋ค. “/app/rest/server;.jsp” ๊ฐ์ด ์ ๋ฌ๋ ๋ ์ธ๋ฏธ์ฝ๋ก (;) ์ ๊น์ง์ ๋ฌธ์์ด์ ์ถ๊ฐํ๋ฏ๋ก [๊ทธ๋ฆผ 18]์์ uriNoParams ๊ฐ์ด /app/rest/server๋ง ๋จ๊ฒ ๋๋ค.
org.apache.Catalina.core.ApplicationContext#getRequestDispatcher์์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ๋ก์๋ /app/rest/server;.jsp๊ฐ /app/rest/server๋ก ๋ณ๊ฒฝ๋์ด ๊ฐ์ ์ ๋ฌํ์ฌ ํด๋น ๊ฒฝ๋ก์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ฉด์ ์๋ฒ์ ๋ฒ์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๊ฒ ๋๋ค.
๊ณต๊ฒฉ์๋ ํด๋น ๊ณผ์ ์ผ๋ก ๋ฐํ๋๋ ์ธ์ฆ ์ฐํ ์ทจ์ฝ์ ์ ์ ์ฉํ์ฌ ์์คํ ์ ์ ๊ทผํ๊ธฐ ์ํ 2์ฐจ ๊ณต๊ฒฉ์ ์ํํ ์ํ์ฑ์ด ์กด์ฌํ๋ค. PoC ์ฝ๋์์๋ 2์ฐจ ๊ณต๊ฒฉ์ผ๋ก ๊ด๋ฆฌ์ ๊ณ์ ์์ฑ, ํ ํฐ ์์ฑ ๋ฐ ๋ถ์ฌ, ์ ์ฑ ํ๋ฌ๊ทธ์ธ ์ ๋ก๋ ๋ฐ RCE ๊ณต๊ฒฉ์ ์ํํ๊ณ ์์ด ์๋์ STEP1,2,3,4 ๊ณผ์ ์ ํตํด ์ดํด๋ณด๊ณ ์ ํ๋ค.
STEP1 : ๊ด๋ฆฌ์ ๊ณ์ ์์ฑ
์ธ์ฆ ์ฐํ ์ทจ์ฝ์ ๋ฐํ ์ ๋๋ฒ๊น
๊ณผ์ ์์ ํ์ธํ ๋ฐ์ ๊ฐ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ๋ก๋ก ์ ๊ทผํ์ ๋ ์ธ์ฆ์ด ์ฐํ๋๋ค๋ ์ ์ ์
์ฉํ์ฌ REST API ์๋ ํฌ์ธํธ๋ฅผ ๋์์ผ๋ก ๊ณต๊ฒฉ์์ ์ ์ด๊ฐ ๊ฐ๋ฅํ ๊ด๋ฆฌ์ ๊ณ์ ์ ์์ฑํ ์ ์๊ฒ ๋๋ค.
TeamCity์์ ์ฌ์ฉ์๋ฅผ ์์ฑํ ๋ /app/rest/users ๊ฒฝ๋ก๋ฅผ ํตํด ์ ๊ทผํ๋ ๊ฒ์ ํ์ธํ๋ค.
PoC ์ฝ๋์์ AddUser() ํจ์์ add_user_url ๋ณ์์ ์กด์ฌํ์ง ์๋ ๊ฒฝ๋ก(/hax)๋ฅผ ํตํ ์์ฒญ URL์ ์ฌ์ฉํ์์ผ๋ฉฐ add_user_data ๋ณ์์ ๊ณ์ ๋ช , ํจ์ค์๋, ๊ณ์ ์ ๊ถํ์ ๋ํ๋ด๋ ํ๋ผ๋ฏธํฐ roleId๋ฅผ “SYSTEM_ADMIN”๊ฐ์ผ๋ก ์ง์ ํ์ฌ ๊ด๋ฆฌ์ ๊ณ์ ์์ฑ์ ์์ฒญํ๋ค.
/app/rest/users ๊ฒฝ๋ก์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ฉฐ ๊ด๋ฆฌ์ ๊ถํ์ ๊ฐ์ง ๊ณ์ ์์ฑ์ด ์ด๋ฃจ์ด์ง๋ค. ๋ค์์, ์น ํ๋ก์ ๋๊ตฌ๋ฅผ ํ์ฉํด ์ค์ ๋ก ๊ณ์ ์ด ์์ฑ๋๋ ๊ณผ์ ์ ํ์ธํด๋ณด์.
ํด๋น ์์ฒญ์ผ๋ก ๊ด๋ฆฌ์ ๊ถํ์ ๊ฐ์ง ๊ณ์ ์ด ์์ฑ๋๊ณ , ๋ก๊ทธ์ธ๊น์ง ๊ฐ๋ฅํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ณ์ ์์ฑ ํ GetToken() ํจ์๋ฅผ ์ด์ฉํด ์ฌ์ฉ์์ ํ ํฐ์ ์์ฑํ๊ณ ๊ถํ์ด ์กด์ฌํ๋ ํ์ด์ง์ ์์ฒญ ์ ์ฌ์ฉ๋๋ค. [๊ทธ๋ฆผ 21]์์ ๊ด๋ฆฌ์ ๊ณ์ ์์ฑ ํจ์์ธ AddUser()๋ก ์์ฑ๋ ๊ด๋ฆฌ์ ๊ณ์ ์ ๋ํ ํ ํฐ ๊ฐ์ ์์ฑํ์ฌ ๊ด๋ฆฌ์ ๊ถํ์ ํ์๋ก ํ๋ ํ์ด์ง์ ์ ๊ทผ ์ ํด๋น ํ ํฐ์ ์ฌ์ฉํ์ฌ 2์ฐจ ๊ณต๊ฒฉ์ ํ๊ธฐ ์ํจ์ด๋ค.
PoC ์ฝ๋๋ฅผ ํ์ธํด๋ณด๋ฉด /app/rest/users/id:{user_id}/tokens/{token_name} ๊ฒฝ๋ก๋ก ์ ๊ทผํ์ฌ ์๋ต๊ฐ์ name, value, creationTime์ ํฌํจํ๋ ํ ํฐ(value)๊ฐ์ ์์ฑํ๊ฒ ๋๋ ๊ฒ์ ์ ์ ์๋ค.
ํ ํฐ์ ์์ฑํ๋ ํ๋ฆ์ ๊ฐ๋จํ ํํํ๋ฉด [๊ทธ๋ฆผ 25]์ ๊ฐ์ด ๋ํ๋ผ ์ ์๋ค. ํ ํฐ์ ์์ฑํ๋ ํ์ด์ง์ ์ ๊ทผํ๊ฒ ๋๋ฉด ์์์ ํ ํฐ ๊ฐ์ ๋ฐํ ๋ฐ๊ฒ ๋๋ฉฐ ๊ด๋ฆฌ์ ๊ถํ์ ์๊ตฌํ๋ ํ์ด์ง์ ์ ๊ทผํ ๋ ํด๋น ํ ํฐ์ ์ฌ์ฉํ๊ฒ ๋๋ค.
STEP2 : ์
์ฑ ํ๋ฌ๊ทธ์ธ ์ ์
๊ณต๊ฒฉ์๋ ๊ด๋ฆฌ์ ๊ณ์ ์์ฑ, ํ ํฐ ์์ฑ์ผ๋ก ๊ด๋ฆฌ์ ๊ถํ์ ํ์๋ก ํ๋ ํ์ด์ง์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ์ ์ ์
์ฉํ์ฌ ์๋ฒ๋ฅผ ์ ์ดํ๊ธฐ ์ํด ํ์ผ์ด๋ ํ๋ฌ๊ทธ์ธ์ ์
๋ก๋ํ๋ ์๋๋ฅผ ์งํํ ์ ์์ผ๋ฉฐ, PoC ์ฝ๋์์๋ ์น ์์ ํฌํจํ .jar ํ์ผ์ ์์ฑํ๊ณ ์๋ค. GetEvilPluginZipFile() ํจ์๋ Faker ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ง ์ ๋ณด๋ฅผ ์์ฑํ๊ธฐ ์ํ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๊ณ cmd ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ๋ jsp ์น ์ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์์์ .jar ํ์ผ์ ์ ์ํ๋ค.
[๊ทธ๋ฆผ 27]์์๋ ํ๋ฌ๊ทธ์ธ์ ๋ฉํ ์ ๋ณด๊ฐ ๋ด๊ธด XML ํ์ผ์ ์์ฑํ๋ค. ์ดํ [๊ทธ๋ฆผ 26]์์ ์์ฑํ jsp๋ฅผ buildServerResources/ ๋๋ ํฐ๋ฆฌ๋ก ์ง์ ํ jar ํ์ผ๊ณผ xml ํ์ผ์ zip ํ์ผ์ ์ถ๊ฐํ๋ค.
STEP3 : ์ ์ฑ ํ๋ฌ๊ทธ์ธ ์ ๋ก๋
๊ด๋ฆฌ์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ํ๋ฌ๊ทธ์ธ ์ ๋ก๋ ํ์ด์ง์ ๊ด๋ฆฌ์ ๊ณ์ ์ ํ ํฐ ๊ฐ์ ์ด์ฉํ์ฌ ์ ๊ทผํจ์ผ๋ก์จ ์น ์์ด ํฌํจ๋ ์ ์ฑ ํ๋ฌ๊ทธ์ธ ์ ๋ก๋๊ฐ ๊ฐ๋ฅํด์ง๋ค.
LoadEvilPlugin()์์ ํ๋ฌ๊ทธ์ธ ์กด์ฌ ์ ํ์ฑํ๋ฅผ ์ํด /admin/plugins.html๋ก POST ์์ฒญ์ ์ ์ก ํ๋ค.
STEP4 : ์๊ฒฉ ์ฝ๋ ์คํ(RCE) ๋ฐํ
[๊ทธ๋ฆผ 28] ์
์ฑ ํ๋ฌ๊ทธ์ธ ์
๋ก๋ ํ๋ฆ๋์์ ๊ด๋ฆฌ์ ๊ณ์ ์ ํ ํฐ์ ์ด์ฉํด ํ๋ฌ๊ทธ์ธ ์
๋ก๋ ํ ํ๋ฌ๊ทธ์ธ์ ๊ฒฝ๋ก์ ์ ๊ทผํจ์ผ๋ก์จ ์๊ฒฉ ์ฝ๋ ์คํ(RCE)์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค.
PoC ์ฝ๋์์ ํ์ธํด๋ณด๋ฉด ExecuteCommandByEvilPlugin()์์๋ ๋ฉ์ธ ํจ์์ ์๋ shell_url๊ณผ command๋ฅผ ์ด์ฉํด POST ์์ฒญ์ ์์ฑํ๊ณ cmd ํ๋ผ๋ฏธํฐ์ ๋ช ๋ น์ด๋ฅผ ์ธ์ฝ๋ฉํ์ฌ ์ ๋ฌํจ์ผ๋ก์จ ์๊ฒฉ ๋ช ๋ น์ด ์คํ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค.
04. ๋์ ๋ฐฉ์
TeamCity์์ ๋ฐ์ํ ์ธ์ฆ ์ฐํ ์ทจ์ฝ์ ์ ์จํ๋ ๋ฏธ์ค(On-Premises) ์ค์น ๋ชจ๋ ๋ฒ์ ์์ ๋ฐํ๋๋ฏ๋ก ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ ์กฐ์น๊ฐ ํ์ํ๋ค.
1) ์ต์ ๋ฒ์ ์ ๋ฐ์ดํธ(23.11.4)
TeamCity ์๋ฒ, ์์ด์ ํธ ๋ฐ ํด๋ผ์ด์ธํธ๋ฅผ ํฌํจํ ๋ชจ๋ ์ํํธ์จ์ด์ ๋ํ ์ต์ ๋ฒ์ ๋ฐ ๋ณด์ ์ ๋ฐ์ดํธ๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋ฉฐ ์ ๋ฐ์ดํธ๋ฅผ ํตํด ์ทจ์ฝ์ ์์ฒด์ ๋ํ ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ต์ ๋ฒ์ ์ธ 2023.11.4 ๋ก ์ ๋ฐ์ดํธ ์งํ์ ๊ถ๊ณ ํ๋ค.
2) ๋ณด์ ํจ์น ํ๋ฌ๊ทธ์ธ ์ ์ฉ
JetBrains์์๋ ์ทจ์ฝ์ ๋ง ํจ์น๊ฐ ๊ฐ๋ฅํ ๋ณด์ ํจ์น ํ๋ฌ๊ทธ์ธ์ ์ง์ํ๊ณ ์์ด ์ ๋ฐ์ดํธ๊ฐ ์ด๋ ค์ด ํ๊ฒฝ์ผ ๊ฒฝ์ฐ ํ๋ฌ๊ทธ์ธ์ ํตํด ํจ์น๊ฐ ์ ์ฉ๋ ์ ์๋๋ก ์ค์น๋ฅผ ๊ถ๊ณ ํ๋ค. ํ๋ฌ๊ทธ์ธ ์๋ ์ค์น ๋ฐฉ๋ฒ์ ZIP ํ๋ฌ๊ทธ์ธ ํจํค์ง๋ฅผ [TeamCity ์ค์น ๋๋ ํฐ๋ฆฌ]/plugins ๊ฒฝ๋ก์ ๋ณต์ฌํ์ฌ ์ค์น ํ ๋ก๋๋ฅผ ์ ํํ์ฌ ํ์ฑํ๋ ์ ์๋๋ก ํ๋ค.
3) ์ ์ฑ ํ๋ฌ๊ทธ์ธ ์ ๋ก๋ ์ ๋นํ์ฑํ
PoC ๋ถ์์์ ํ์ธํ ์ ์ฑ ํ๋ฌ๊ทธ์ธ์ด ์ ๋ก๋ ๋ ๊ฒฝ์ฐ disabled-plugins.xml ํ์ผ์์ ํ๊ทธ๋ฅผ ์ด์ฉํด ๋นํ์ฑํ๊ฐ ๊ฐ๋ฅํ๋ฏ๋ก [ํ 3]์ OS ๋ณ๋ก ์์นํ ๊ฒฝ๋ก์์ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
4) ๋ก๊ทธ ํ์ผ ์ ๊ท ํํ์ ์ ์ฉ
๋ก๊ทธ ํ์ผ์์ ์ ๊ทํํ์์ ํตํด ํน์ ๋ฌธ์์ด ํจํด์ ๋งค์นญํ์ฌ ํด๋น ํจํด์ด ํฌํจ๋ ๋ก๊ทธ ๋ฉ์์ง๋ฅผ ์๋ณํจ์ผ๋ก์จ ํน์ ์ ํ์ ํ๋ ํ์ง๊ฐ ๊ฐ๋ฅํ๋ค. OS ๋ณ ๋ก๊ทธ ํ์ผ์ด ์กด์ฌํ๋ ๊ฒฝ๋ก๋ [ํ 4]์ ๊ฐ์ผ๋ฉฐ logs ๋๋ ํฐ๋ฆฌ ๋ด์ ์กด์ฌํ๋ teamcity-*.log ํ์ผ์์ ์ธ์ฆ ์ฐํ๋ฅผ ์ํ ๊ฒฝ๋ก ์ ๊ทผ ๋ฐ ์ ๋ก๋ ๋ ํ๋ฌ๊ทธ์ธ ์ ๋ณด ๋ฑ์ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
teamcity-javaLogging.log ํ์ผ์๋ ModelAndView.setViewName ํธ์ถ ํ์ ์ฒ๋ฆฌ๋ URL์ ์ค๋ช ํ๋ ๋ด์ฉ์ด ํฌํจ๋์ด ์๋ก์ด ์ก์ธ์ค ํ ํฐ์ ์์ฑํ์ ๋๋ฅผ ์์๋ก ํ์ฌ [๊ทธ๋ฆผ 34]๊ณผ ๊ฐ์ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๋ค.
์ธ์ฆ ์ฐํ ์ทจ์ฝ์ ์ด ๋ฐ์๋ ๋ ๋ก๊ทธ ๋ด์ฉ์ ํ์ธํด๋ณด๋ฉด jsp= ํ๋ผ๋ฏธํฐ์ ;.jsp ๋ฌธ์์ด์ด ํฌํจ๋์ด ์๋ค. ์ด๋ฅผ ํ์งํ๊ธฐ ์ํด ์๋์ [๊ทธ๋ฆผ 35]์ ์๋ ์ ๊ทํํ์์ ์ ์ฉํ์ฌ ์ ์ฉ ์๋์ ๋ํ ํ์ง๊ฐ ๊ฐ๋ฅํ๋ค.
05.๋ง๋ฌด๋ฆฌ
JetBrains์ TeamCity์์ ๋ฐ์ํ CVE ์ทจ์ฝ์ ์ ์์๋ก ์ธ์ฆ ์ฐํ ์ทจ์ฝ์ ์ ๋ํ ๋ถ์์ ํตํด ์ทจ์ฝ์ ์ ์ํ์ฑ๊ณผ ๋ฐ์ ์์ธ์ ๋ํด ํ์ธํ ์ ์์๋ค. ์ธ์ฆ ์ฐํ ์ทจ์ฝ์ ์ ๊ณต๊ฒฉ์๊ฐ ์ด๊ธฐ ์ก์ธ์ค๋ฅผ ์ํด ๋ณด์ ๋ฉ์ปค๋์ฆ์ ์ฐํํ์ฌ ์์คํ ์ ์ ๊ทผํ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ๋ค. ์ ๊ทผ ๊ถํ์ ํ๋ํ๊ฒ ๋๋ฉด ํ ํฐ์ ์์ฑํ์ฌ ์น ์์ ์ ๋ก๋ํ๊ฑฐ๋ ์๊ฒฉ ์ฝ๋ ์คํ๊ณผ ๊ฐ์ 2์ฐจ ๊ณต๊ฒฉ์ผ๋ก ์ด์ด์ง ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ๋ฐ์ํ๊ฒ ๋๋ค. ์ด๋ฅผ ๋์ํ๊ธฐ ์ํด ๋ณด๋ค ๊ฐ๋ ฅํ ์ธ์ฆ ๋ฐ ์ ๊ทผ ์ ์ด ๋ฉ์ปค๋์ฆ์ ๋์ ํ๊ณ ์ ๋ ฅ ๊ฐ ๊ฒ์ฆ๊ณผ ์ธ์ฆ ํ๋ก์ธ์ค ๊ฐํ, ํจ์น ์ ๋ฐ์ดํธ ๋ฑ์ ํตํด ์์คํ ์ ๋ณด์์ฑ์ ๊ฐํํ๋ ๊ฒ์ด ํ์ํ๋ค.
06.์ฐธ๊ณ ์๋ฃ
1) Vulnerability Details : CVE-2024-27198 :
https://www.cvedetails.com/cve/CVE-2024-27198/?q=cve-2024-27198
2) Additional Critical Security Issues Affecting TeamCity On-Premises (CVE-2024-27198 and CVE-2024-27199) – Update to 2023.11.4 Now : https://blog.jetbrains.com/teamcity/2024/03/additional-critical-security-issues-affecting-teamcity-on-premises-cve-2024-27198-and-cve-2024-27199-update-to-2023-11-4-now/
3) Proof of Concept for Authentication Bypass in JetBrains TeamCity Pre-2023.11.4 : https://github.com/Chocapikk/CVE-2024-27198
4) CVE-2024-27198 and CVE-2024-27199: JetBrains TeamCity Multiple Authentication Bypass Vulnerabilities :
https://www.rapid7.com/blog/post/2024/03/04/etr-cve-2024-27198-and-cve-2024-27199-jetbrains-teamcity-multiple-authentication-bypass-vulnerabilities-fixed/