๋งํฌ ํ๋๊ฐ ์ด๋ค ํ๋์ ํ ์ง๋ ์ฃผ์ ๋งจ ์์ ๋ช ๊ธ์, ๊ทธ๋ฌ๋๊น URI ์คํด์ด ์ ํจ. http:๋ฉด ํ์ด์ง๋ฅผ ์ด๊ณ , mailto:๋ฉด ๋ฉ์ผ ์ฑ์ ๋์ฐ๊ณ , javascript:๋ฉด ๊ทธ ์๋ฆฌ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํจ. ์น ๋ณด์ ์ชฝ์์ ์ด ๋ช ๊ธ์ ๋๋ฌธ์ ์๊ธด ์ฌ๊ณ ๋ง ๋ชจ์๋ ๊ฝค ๊ธด ์ฐ๋๊ธฐ๊ฐ ๋ ๊ฑฐ๋ค. ์ด๋ฒ Plex Media Server์ CVE-2026-96654๋ ๊ทธ ์ฐ๋๊ธฐ์ ๋ค์ด๊ฐ ์ฌ๋ก๋ผ์, ํ์๋ฒ๋ฅผ ์ง์ ๊ตด๋ฆฌ๋ ์ ์ฅ์์ ์ ๋ฆฌํด ๋ดค์.
- Plex Media Server ์น ํ๋ฉด์์ ์ธ์ฝ๋ฉ๋ URI ์คํด์ ์ ๋๋ก ๊ฑธ๋ฌ๋ด์ง ๋ชปํ๋ ์ทจ์ฝ์ (CWE-84 ๊ณ์ด)์ผ๋ก, ๊ฒฐ๊ณผ์ ์ผ๋ก XSS๋ก ์ด์ด์ง ์ ์์
- ๊ณต๊ฒฉ์๊ฐ ์ฌ์ด๋ ๋งํฌ๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ์๊ฐ ์น UI์์ ๋ณด๊ฑฐ๋ ํด๋ฆญํ๋ฉด ๊ทธ ์ธ์ ๊ถํ์ผ๋ก ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ์ ์์
- ๋์ ์ฐ์ ์์๋ ์ต์ ๋ฒ์ ์ ๋ฐ์ดํธ, ์ธ๋ถ ๋ ธ์ถ ์ต์ํ, ๊ณต์ ์ฌ์ฉ์์ ์ธ๋ถ ๋ฉํ๋ฐ์ดํฐ ์ ๊ฒ ์์
1. ์ด ์ทจ์ฝ์ ์ด ์ ํํ ๋ญ๊ฐ ๋ฌธ์ ์ธ์ง
NVD ๋ถ๋ฅ๋ช ์ "Improper Neutralization of Encoded URI Schemes in a Web Page"์. ๋ง์ด ๊ธธ์ง๋ง ํ์ด๋ณด๋ฉด ๋จ์ํจ.
- ๋ณดํต ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ์ ๋ ฅ์ javascript:, data:, vbscript: ๊ฐ์ ์ํํ ์คํด์ด ๋ค์ด์ค๋ฉด ๋ง๋๋ก ๋ง๋ค์ด์ง
- ๊ทผ๋ฐ ์ด ๊ฒ์ฌ๋ฅผ ๋ฌธ์์ด ๊ทธ๋๋ก ๋น๊ตํ๋ ๋ฐฉ์์ผ๋ก ํ๋ฉด, HTML ์ํฐํฐ๋ ํผ์ผํธ ์ธ์ฝ๋ฉ, ๋์๋ฌธ์ ์๊ธฐ, ์ค๊ฐ์ ๊ณต๋ฐฑ·์ ์ด๋ฌธ์ ๋ผ์ ๋ฃ๊ธฐ ๊ฐ์ ๋ณํ์ ๋์นจ
- ํํฐ๋ "์ด๊ฑด javascript:๊ฐ ์๋๋ค" ํ๊ณ ํต๊ณผ์ํค๋๋ฐ, ๋ธ๋ผ์ฐ์ ๋ ๋์ฝ๋ฉํ ๋ค์ ํด์ํ๋๊น ๊ฒฐ๊ตญ javascript:๋ก ์ธ์ํจ
- ์ฆ, ๊ฒ์ฌํ๋ ์ชฝ๊ณผ ํด์ํ๋ ์ชฝ์ด ๊ฐ์ ๋ฌธ์์ด์ ์๋ก ๋ค๋ฅด๊ฒ ์ฝ๋ ๊ฒ ํต์ฌ ๋ฌธ์
Plex๋ ์ํ ์ ๋ชฉ, ์ค๋ช , ์ปฌ๋ ์ ์ด๋ฆ, ์ธ๋ถ ๋งํฌ ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์น UI์ ๊ทธ๋๋ก ๊ทธ๋ ค์ฃผ๋ ๊ตฌ์กฐ๋ผ์, ์ด๋ฐ ๊ฐ ์ค ํ๋๊ฐ ๋งํฌ ์์ฑ(href ๋ฑ)์ผ๋ก ๋ค์ด๊ฐ๋ ์ง์ ์ด ์์ผ๋ฉด ๋ฐ๋ก ๋ฌธ์ ๊ฐ ๋จ. ์ ํํ ์ด๋ค ํ๋์์ ํฐ์ง๋์ง, ์ํฅ๋ฐ๋ ๋ฒ์ ๋ฒ์๊ฐ ์ด๋๊น์ง์ธ์ง๋ Plex ๊ณต์ ๋ณด์ ๊ณต์ง์ NVD ํญ๋ชฉ์ ๊ผญ ์ง์ ํ์ธํ๋ ๊ฒ ๋ง์. ์์น๋ ๋์ค์ ๊ฐฑ์ ๋๋ ๊ฒฝ์ฐ๋ ๋ง์์ ์ฒ์ ๋ณธ ์ซ์๋ฅผ ๊ทธ๋๋ก ๋ฏฟ์ง ์๋ ํธ์.
2. ํ์๋ฒ ์ด์์ ์ ์ฅ์์ ํ์ค์ ์ธ ๊ณต๊ฒฉ ํ๋ฆ
์คํ ๊ฐ๋ฅํ ํ์ด๋ก๋๋ ๋ค๋ฃจ์ง ์๊ณ ๊ฐ๋ ๋ง ์ง์ด๋ด.
- ์ ๋ ฅ ์ง์ : ๊ณต์ ๋ฐ์ ์ฌ์ฉ์, ์ธ๋ถ ์์ด์ ํธ๊ฐ ๊ฐ์ ธ์ค๋ ๋ฉํ๋ฐ์ดํฐ, ํน์ ์กฐ์๋ ๋ฏธ๋์ด ํ์ผ์ ํ๊ทธ ์ ๋ณด ๋ฑ์ ์ธ์ฝ๋ฉ๋ ์คํด์ด ์์ธ ๋งํฌ๊ฐ ๋ค์ด๊ฐ
- ์ ์ฅ: ์๋ฒ๊ฐ ์ด ๊ฐ์ ์ํํ๋ค๊ณ ํ๋จํ์ง ๋ชปํ๊ณ ๊ทธ๋๋ก ์ ์ฅํจ
- ํธ๋ฆฌ๊ฑฐ: ๊ด๋ฆฌ์๊ฐ ์น UI(app.plex.tv ๋๋ ๋ก์ปฌ 32400 ํฌํธ ์น)์์ ํด๋น ํญ๋ชฉ์ ์ด๊ฑฐ๋ ๋งํฌ๋ฅผ ํด๋ฆญํจ
- ๊ฒฐ๊ณผ: ๊ด๋ฆฌ์ ๋ธ๋ผ์ฐ์ ์ธ์ ๊ถํ์ผ๋ก ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ฉด์ ํ ํฐ ํ์ทจ, ์ค์ ๋ณ๊ฒฝ, ๊ณต์ ๊ถํ ์กฐ์ ๊ฐ์ 2์ฐจ ํผํด๋ก ์ด์ด์ง ์ ์์
๊ฐ์ธ์ ์ผ๋ก ์ ์ผ ์ ๊ฒฝ ์ฐ์ด๋ ๊ฑด Plex ํ ํฐ์. ์ด ํ ํฐ ํ๋๋ฉด ์น ๋ก๊ทธ์ธ ์์ด API๋ก ์๋ฒ๋ฅผ ๋ง์ง ์ ์์ด์, XSS๊ฐ "ํ์ ํ๋ ๋จ๋ ์ฅ๋"์ผ๋ก ๋๋์ง ์๋ ์ด์ ๊ฐ ๋ฐ๋ก ์ด๊ฑฐ์.
3. ํ์ง: ์ด๋๋ฅผ ๋ค์ฌ๋ค๋ณด๋ฉด ๋๋
- Plex Media Server ๋ก๊ทธ: Windows๋ %LOCALAPPDATA%\Plex Media Server\Logs, ๋ฆฌ๋ ์ค๋ ๋ณดํต /var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Logs ์๋์ ์์. ๋ฉํ๋ฐ์ดํฐ ํธ์ง ์์ฒญ์ด๋ ํ์์ ์๋ IP์์ ๋ค์ด์จ API ํธ์ถ์ ํ์ธํจ
- ๋ฉํ๋ฐ์ดํฐ ์ง์ ๊ฒ์: ๋ผ์ด๋ธ๋ฌ๋ฆฌ DB๋ ์น UI์์ ์ ๋ชฉ·์ค๋ช ·๋งํฌ ํ๋์ %6A, &#, ์ด์ํ ๊ณต๋ฐฑ ๊ฐ์ ์ธ์ฝ๋ฉ ํ์ ์ด ๋ค์ด๊ฐ ํญ๋ชฉ์ด ์๋์ง ํ์ธํจ. ์ ์ ์ํ ์ค๋ช ์ ์ด๋ฐ ๋ฌธ์์ด์ด ๋ค์ด๊ฐ ์ผ์ ๊ฑฐ์ ์์
- ๋ฆฌ๋ฒ์ค ํ๋ก์ ๋ก๊ทธ: Nginx๋ Caddy ์๋จ์ ๋๊ณ ์๋ค๋ฉด ์์ฒญ URL๊ณผ ์ฟผ๋ฆฌ์คํธ๋ง์ ์ธ์ฝ๋ฉ๋ javascript, data ์คํด์ด ์์ฌ ๋ค์ด์ค๋์ง ๊ฒ์ ๊ท์น์ ํ๋ ๋ง๋ค์ด๋๋ฉด ํธํจ
- ๊ณ์ ์ชฝ ์ด์ ์งํ: Plex ๊ณ์ ์ ์ธ์ฆ๋ ๊ธฐ๊ธฐ ๋ชฉ๋ก์ ๋ชจ๋ฅด๋ ๊ธฐ๊ธฐ๊ฐ ์๊ฒผ๋์ง, ๊ณต์ ์ฌ์ฉ์ ๋ชฉ๋ก์ด ๋ฐ๋์๋์ง ํ์ธํจ
4. ์ํ: ์ค๋ ํ ๊ฒ๊ณผ ์ด๋ฒ ์ฃผ์ ํ ๊ฒ
์ค๋ ๋ฐ๋ก
- Plex Media Server๋ฅผ ํจ์น๊ฐ ๋ฐ์๋ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํจ. ์๋ ์ ๋ฐ์ดํธ๋ฅผ ๊บผ๋ ์ฌ๋์ด ์์ธ๋ก ๋ง์์ ์ค์ > ์ผ๋ฐ์์ ํ๋ฒ ํ์ธํด ๋ณด๋ ๊ฑฐ ์ถ์ฒํจ
- ์์ฌ์ค๋ฌ์ด ์ผ์ด ์์๋ค๋ฉด Plex ๊ณ์ ์์ ๋ชจ๋ ๊ธฐ๊ธฐ ๋ก๊ทธ์์ + ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ์ผ๋ก ๊ธฐ์กด ํ ํฐ์ ๋ฌดํจํํจ
- 2๋จ๊ณ ์ธ์ฆ์ด ๊บผ์ ธ ์๋ค๋ฉด ์ผ๋
์ด๋ฒ ์ฃผ ์์
- 32400 ํฌํธ๋ฅผ ๊ณต์ ๊ธฐ์์ ์ง์ ํฌ์๋ฉํด ๋์๋ค๋ฉด ๊ผญ ํ์ํ์ง ๋ค์ ์๊ฐํด ๋ด. ์ธ๋ถ ์์ฒญ์ด ํ์ํ๋ฉด VPN(WireGuard, Tailscale ๋ฑ) ๋ค๋ก ์จ๊ธฐ๋ ์ชฝ์ ๊ฐ์ธ์ ์ผ๋ก๋ ๋ ์ ํธํจ
- ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ์ฐ๊ณ ์๋ค๋ฉด Content-Security-Policy ํค๋๋ก ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ์ javascript: ์คํ ๋ฒ์๋ฅผ ์ค์ฌ๋ . Plex ์น UI๊ฐ ๊นจ์ง์ง ์๋ ์ ์์ ์กฐ๊ธ์ฉ ์กฐ์ฌ๊ฐ๋ ๊ฒ ํ์ค์ ์
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ณต์ ์ฌ์ฉ์ ์ค ์ง๊ธ์ ์ฐ๋ฝ๋ ์ ํ๋ ๊ณ์ ์ ์ ๋ฆฌํจ
- ๊ด๋ฆฌ์ ์์ ์ ํ์ ์ฐ๋ ๋ธ๋ผ์ฐ์ ํ๋กํ ๋ง๊ณ ๊ด๋ฆฌ ์ ์ฉ ํ๋กํ์์ ํ๋ ์ต๊ด์ ๋ค์ด๋ฉด XSS ํ ๋ฐฉ์ ์ ๋ถ ํธ๋ฆฌ๋ ์ํฉ์ ๊ฝค ์ค์ผ ์ ์์
5. ๊ฐ๋ฐํ๋ ์ฌ๋์ด๋ผ๋ฉด ๊ฐ์ ธ๊ฐ ๊ตํ
์ด๊ฑด Plex๋ง์ ๋ฌธ์ ๊ฐ ์๋๋ผ URL์ ๋ฐ๋ ๋ชจ๋ ์๋น์ค์ ํด๋นํ๋ ์๊ธฐ๋ผ์ ์งง๊ฒ ๋ง๋ถ์.
- ์ํํ ์คํด์ ์ฐจ๋จ ๋ชฉ๋ก์ผ๋ก ๋ง์ง ๋ง๊ณ , http/https์ฒ๋ผ ํ์ฉํ ์คํด๋ง ํ์ฉ ๋ชฉ๋ก์ผ๋ก ๋ฐ๋ ๊ฒ ๊ธฐ๋ณธ์
- ๊ฒ์ฌ๋ ๋ฐ๋์ ๋์ฝ๋ฉ·์ ๊ทํ๊ฐ ๋๋ ๋ค์ ํด์ผ ํจ. ๋ธ๋ผ์ฐ์ ๊ฐ ํด์ํ๋ ํํ์ ๊ฐ์ ํํ๋ก ๋ง๋ค์ด๋๊ณ ๋น๊ตํด์ผ ์ฐํ๊ฐ ์ ๋จ
- ๊ฐ๋ฅํ๋ฉด ์ง์ ํ์ฑํ์ง ๋ง๊ณ ์ธ์ด๋ ํ๋ ์์ํฌ๊ฐ ์ ๊ณตํ๋ URL ํ์๋ก scheme์ ๋ฝ์์ ํ๋จํจ
- ์ถ๋ ฅํ ๋๋ ๋ฌธ๋งฅ(HTML ๋ณธ๋ฌธ, ์์ฑ, URL)์ ๋ง๋ ์ด์ค์ผ์ดํ๋ฅผ ๋ฐ๋ก ์ ์ฉํจ. ์ ๋ ฅ ๊ฒ์ฆ ํ๋๋ง ๋ฏฟ์ผ๋ฉด ๊ฒฐ๊ตญ ์ด๋ฐ ๊ตฌ๋ฉ์ด ์๊ธฐ๋ ๊ฒ ๊ฐ๋ค
๋ง๋ฌด๋ฆฌ
ํ์๋ฒ๋ "์ง์์ ํผ์ ์ฐ๋ ๊ฑฐ๋๊น" ํ๋ ๋ง์ ๋๋ฌธ์ ์ ๋ฐ์ดํธ๊ฐ ์ ์ผ ๋ฆ๊ฒ ๋๋ ์ฅ๋น์ธ ๊ฒ ๊ฐ๋ค. ๋๋ Plex๋ ํ๋ฒ ์ธํ ํด ๋๋ฉด ๋ช ๋ฌ์ฉ ์ ๋ค์ฌ๋ค๋ณด๋ค๊ฐ ์ด๋ฒ์ ๋ฒ์ ํ์ธํ๋ฉด์ ์๊ฐ๋ณด๋ค ์ค๋ ๋ฐฉ์นํ๋ค๋ ๊ฑธ ์์์. ์ด๋ฒ ๊ธฐํ์ ์ ๋ฐ์ดํธํ๊ณ , ํฌํธ ํฌ์๋ฉ์ด๋ ๊ณต์ ์ฌ์ฉ์ ๋ชฉ๋ก๊น์ง ๊ฐ์ด ํ๋ฒ ์ ๋ฆฌํด ๋ด์. ๋ก๊ทธ์์ ์ด์ํ ํ์ ์ ์ฐพ์๊ฑฐ๋ CSP๋ฅผ Plex์ ๋ง์ถฐ ์ ์ฉํด ๋ณธ ๋ถ์ด ์์ผ๋ฉด ๋๊ธ๋ก ๊ฒฝํ ๊ณต์ ํด ์ฃผ์ธ์. ๊ฐ์ด ์ ๋ฆฌํด์ ๋ค์ ๊ธ์ ๋ณดํ๋ณด๊ฒ ์ต๋๋ค.