XSS, CSRF, ๊ทธ๋ฆฌ๊ณ  SSRF

๐Ÿ’กSpring security๋ฅผ ์„ค์ •ํ•˜๋ฉด์„œ, ๋˜ ์›น ๋ณด์•ˆ์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๋ฉด์„œ ๊ณ„์† ๊นŒ๋จน๊ณ  ๊ตฌ๊ธ€๋งํ•˜๊ฒŒ ๋˜์–ด ํ™•์‹คํ•˜๊ฒŒ ์ •๋ฆฌํ•ด ๋†“๊ณ ์ž ํฌ์ŠคํŒ…์„ ์ž‘์„ฑํ•œ๋‹ค.

XSS(Cross-Site Scripting)

์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๊ณต๊ฒฉํ•˜๋ ค๋Š” ์‚ฌ์ดํŠธ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„ฃ๋Š” ๊ธฐ๋ฒ•, html์˜ <script/>ํƒœ๊ทธ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

XSS ๊ณต๊ฒฉ์€ Reflected XSS์™€ Stored XSS(๋˜๋Š” Persist XSS)๋กœ ๋‚˜๋‰œ๋‹ค.

ํ† ํฐ ๋“ฑ์„ ์ €์žฅํ•  ๋•Œ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ์‚ฌ์šฉ์‹œ javascript์—์„œ ์ง์ ‘ ์—‘์„ธ์Šค ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— XSS์— ์ทจ์•ฝํ•˜๋‹ค.

XSS ์ทจ์•ฝ์ ์€ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์˜ํ•ด ๋ฐœ์ƒํ•œ๋‹ค.

Reflected XSS

์ผ๋ฐ˜ ์œ ์ €์˜ ์š”์ฒญ(request)์— ์•…์„ฑ์ฝ”๋“œ ์‹ฌ์Œ

๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค

  1. ๊ณต๊ฒฉ์ž๊ฐ€ ์ทจ์•ฝํ•œ ์‚ฌ์ดํŠธ ๋ฐœ๊ฒฌ.
  2. ์ทจ์•ฝํ•œ ์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํš๋“ํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹ด๊ธด URL์„ ๋งŒ๋“ค์–ด ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŠน์ • ๋ฐฉ๋ฒ•์œผ๋กœ ์ „๋‹ฌ.
  3. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ์ „๋‹ฌ๋ฐ›์€ URL ๋งํฌ๋ฅผ ํด๋ฆญ. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ทจ์•ฝํ•œ ์‚ฌ์ดํŠธ๋กœ ์š”์ฒญ์„ ์ „๋‹ฌ.
  4. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ์˜ ์‘๋‹ต ๋ฉ”์‹œ์ง€(response)๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰.
  5. ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ๊ณต๊ฒฉ์ž์—๊ฒŒ ์ „๋‹ฌ๋จ.

Stored XSS

์„œ๋ฒ„์ธก(๊ฒŒ์‹œํŒ)์— ์•…์„ฑ์ฝ”๋“œ ์‹ฌ์Œ

๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค

  1. ๊ณต๊ฒฉ์ž๊ฐ€ ์ทจ์•ฝํ•œ ์‚ฌ์ดํŠธ๋ฅผ ๋ฐœ๊ฒฌ.
  2. ์ทจ์•ฝํ•œ ์‚ฌ์ดํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒŒ์‹œํŒ์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํš๋“ํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๊ฒŒ์‹œ.
  3. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ณต๊ฒฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€์„ ์ฝ์œผ๋ฉด, ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹ด๊ธด ๊ฒŒ์‹œ๊ธ€ ์‘๋‹ต์„ ์ „๋‹ฌํ•จ.
  4. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ์˜ ์‘๋‹ต ๋ฉ”์‹œ์ง€(response)๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰.
  5. ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ๊ณต๊ฒฉ์ž์—๊ฒŒ ์ „๋‹ฌ๋จ.

XSS ๋Œ€์‘๋ฐฉ๋ฒ•

<script>์˜ ์ž…๋ ฅ์„ ์ฐจ๋‹จํ•˜๋ฉด ๋œ๋‹ค. ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์น˜ํ™˜, ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

CSRF(Cross-Site Request Forgery)

์‚ฌ์ดํŠธ๊ฐ„ ์š”์ฒญ ์œ„์กฐ์˜ ์•ฝ์ž๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์‹ ๋ขฐํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์„ ๋„์šฉํ•˜์—ฌ ์›์น˜ ์•Š๋Š” ํ–‰๋™์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณต๊ฒฉ์ด๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ ์ธ์ฆ๋œ ์„ธ์…˜์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์ ์„ ์•…์šฉํ•˜์—ฌ, ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š์€ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ๋œ ์ƒํƒœ์—์„œ ์•…์„ฑ ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋ฉด, ๊ทธ ์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

CSRF ์ทจ์•ฝ์ ์€ ์ฃผ๋กœ ์„œ๋ฒ„ ์ธก์— ์˜ํ•ด ๋ฐœ์ƒํ•œ๋‹ค.

CSRF ๊ณต๊ฒฉ์˜ ์ „์ œ์กฐ๊ฑด

๊ณต๊ฒฉ์ž๊ฐ€ CSRF ๊ณต๊ฒฉ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„  ์•„๋ž˜ ์ „์ œ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผํ•œ๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด์•ˆ์ด ์ทจ์•ฝํ•œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ด๋ฏธ ์ธ์ฆ์„ ๋ฐ›์€ ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค.
  2. ์ฟ ํ‚ค ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋ฒ„ ์„ธ์…˜ ์ •๋ณด๋ฅผ ํš๋“ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  3. ๊ณต๊ฒฉ์ž๋Š” ์„œ๋ฒ„๋ฅผ ๊ณต๊ฒฉํ•˜๊ธฐ ์œ„ํ•œ ์š”์ฒญ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ํŒŒ์•…ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

CSRF ๊ณต๊ฒฉ ์˜ˆ์‹œ(GET ์š”์ฒญ์ธ ๊ฒฝ์šฐ)

๊ณต๊ฒฉ์ž์˜ ์•…์„ฑ ์›น ์‚ฌ์ดํŠธ

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Attacker Site</title>
</head>
<body>
<div id="wrap">
    <img src="http://vulnerable-site/change?name=NameChangedByImageTag" style="width: 0px; height: 0px;"/>
</div>
</body>
</html>

๊ณต๊ฒฉ์ž๋Š” ์œ„์™€ ๊ฐ™์€ ์•…์„ฑ ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด ํƒ€๊ฒŸ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค. ํƒ€๊ฒŸ์ด ํ•ด๋‹น ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋ฉด, imgํƒœ๊ทธ(๋˜๋Š” aํƒœ๊ทธ)์˜ ์„œ๋ฒ„๋กœ GET์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. width ๋ฐ height ๊ฐ’์ด 0์ด๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.

CSRF ๊ณต๊ฒฉ ์˜ˆ์‹œ(POST ์š”์ฒญ์ธ ๊ฒฝ์šฐ)

๊ณต๊ฒฉ์ž์˜ ์•…์„ฑ ์›น ์‚ฌ์ดํŠธ

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Attacker Site</title>
</head>
<body>
<div id="wrap">
    <form action="http://vulnerable-site/change" method="POST">
        <input type="hidden" id="memberName" name="memberName" value="NameChangedByFormSubmit"/>
    </form>
    <script>
        setTimeout(function () {
            document.forms[0].submit();
        }, 1000);
    </script>
</div>
</body>
</html>

<form/> ํƒœ๊ทธ์™€ hidden ํƒ€์ž…์˜ <input /> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. JavaScript๋ฅผ ์ด์šฉํ•ด ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์ด ์ˆ˜ํ–‰๋˜๊ณ  1์ดˆ ๋’ค ํผ ์ „์†ก์„ ์‹œ๋„ํ•œ๋‹ค.

CSRF ๋Œ€์‘ ๋ฐฉ๋ฒ•

  1. Referrer ๊ฒ€์ฆ

์š”์ฒญ ํ—ค๋”(request header) ์ •๋ณด์—์„œ Referrer ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณดํ†ต host์™€ Referrer ๊ฐ’์ด ์ผ์น˜ํ•˜๋ฏ€๋กœ ๋‘˜์„ ๋น„๊ตํ•œ๋‹ค. CSRF ๊ณต๊ฒฉ์˜ ๋Œ€๋ถ€๋ถ„ Referrer ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ๋งŒ์œผ๋กœ ๋ฐฉ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.
์˜ˆ์‹œ: Java servlet์˜ ๊ฒฝ์šฐ

String referer = request.getHeader("Referer");
String host = request.getHeader("host");
  1. CSRF ํ† ํฐ ๊ฒ€์ฆ

ํด๋ผ์ด์–ธํŠธ ๋ณ„๋กœ ๋‹ค๋ฅธ ํ† ํฐ์„ ์ƒ์„ฑํ•˜์—ฌ hiddenํƒ€์ž… inputํƒœ๊ทธ๊ฐ€ ํฌํ•จ๋œ ํŽ˜์ด์ง€๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ํ•ด๋‹น ํƒœ๊ทธ์— ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ณ ์œ ํ•œ ํ† ํฐ์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ. ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํ† ํฐ์„ ์„ธ์…˜ ๋“ฑ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•จ. ๋งŒ์•ฝ ํ† ํฐ์ด ๋ˆ„๋ฝ๋˜์–ด ์žˆ๋‹ค๋ฉด CSRF ๋กœ ์˜์‹ฌํ•  ์ˆ˜ ์žˆ์Œ.

  1. Double submit cookie ์›น๋ธŒ๋ผ์šฐ์ €์˜ Same Origin ์ •์ฑ…์œผ๋กœ ๊ณต๊ฒฉ์ž๊ฐ€ ์ฟ ํ‚ค๊ฐ’์—๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š”๊ฒƒ์„ ์ด์šฉํ•˜์—ฌ
    1.๋ธŒ๋ผ์šฐ์ €๋Š” get์š”์ฒญ์œผ๋กœ ํ† ํฐ๊ฐ’๊ณผ _csrf(์‹œํฌ๋ฆฟํ‚ค)๊ฐ’์„ ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ๋ฐ›๋Š”๋‹ค
    2.๋ธŒ๋ผ์šฐ์ €์—์„œ write์š”์ฒญ์‹œ header์— ํ† ํฐ๊ฐ’์„ ์ฃผ๊ณ  ์ฟ ํ‚ค๊ฐ’์— ์‹œํฌ๋ฆฟํ‚ค๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ์„œ๋ฒ„์˜ ๋ฏธ๋“ค์›จ์–ด์—์„œ ํ† ํฐ๊ฐ’์„ decodeํ•ด์„œ decodeํ•œ ์‹œํฌ๋ฆฟํ‚ค๊ฐ€ ์ฟ ํ‚ค๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค

SSRF(Server-Side Request Forgery)

์„œ๋ฒ„๊ฐ€ ์œ„์กฐ๋œ ์š”์ฒญ์„ ๋ณด๋‚ด๋„๋ก ํ•˜๋Š” ์ทจ์•ฝ์ ์ด๋‹ค. Client-Side Request Forgery(CSRF, ํด๋ผ์ด์–ธํŠธ ์ธก ์š”์ฒญ ์œ„์กฐ) ๊ธฐ๋ฒ•์—์„œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋˜๋Š” ์ฃผ์ฒด๋งŒ ๋ธŒ๋ผ์šฐ์ €(Client) ์—์„œ ์„œ๋ฒ„(Server) ๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  ์ดํ•ดํ•ด๋„ ์ข‹๋‹ค.

HTTP GET ์š”์ฒญ์„ ํ†ตํ•œ SSRF ๊ณต๊ฒฉ ์˜ˆ์‹œ

GET /api/fetch?url=http://internal-service.local/admin HTTP/1.1
Host: example.com

url์— ์™ธ๋ถ€๋ง์—์„œ ์ ‘์† ๋ถˆ๊ฐ€๋Šฅํ•œ internal-service.local/admin๋กœ์˜ ์š”์ฒญ์„ ์„œ๋ฒ„๊ฐ€ ๋Œ€์‹  ๊ณต๊ฒฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๋„๋ก ํ•˜๋Š” ์˜ˆ์‹œ์ด๋‹ค.

SSRF ๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค

์ทจ์•ฝํ•œ ๊ฒŒ์‹œํŒ ์„œ๋ฒ„๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. ํ•ด๋‹น ์„œ๋ฒ„๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์ด๋ฏธ์ง€๊ฐ€ ํฌํ•จ๋œ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑํ•˜๋ฉด, ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์„ ์—ด๋žŒํ•˜๋Š” ์œ ์ €๋“ค์—๊ฒŒ ํ•ด๋‹น ์ด๋ฏธ์ง€์˜ url์„ ๊ฒ€์ฆ ์—†์ด ๋ณด์—ฌ์ค€๋‹ค.

  1. ๊ณต๊ฒฉ์ž๋Š” image_url์— ์ •์ƒ์ ์ธ url๋Œ€์‹  ์•…์˜์ ์ธ url์„ ์‚ฝ์ž…ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    POST /upload-image HTTP/1.1
    Host: example.com
    Content-Type: application/x-www-form-urlencoded
    
    image_url=http://localhost/admin
    ์—ฌ๊ธฐ์„œ http://๋ถ€๋ถ„์€ ์Šคํ‚ค๋งˆ(scheme)๋กœ์จ, ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ•˜๋‹จ์— ํ›„์ˆ ํ•œ๋‹ค.
  2. ๊ณต๊ฒฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€์— ์ ‘๊ทผํ•˜๋ฉด, ์„œ๋ฒ„๋Š” localhost/admin์œผ๋กœ์˜ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์‘๋‹ต์„ ์ ‘๊ทผ์ž์—๊ฒŒ ์„œ๋น™ํ•œ๋‹ค.
  3. ๊ณต๊ฒฉ์ž๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ด๋ฏธ์ง€์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ์„œ๋ฒ„์˜ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ์™€ ์ •๋ณด๋ฅผ ๋Œ€๋žต์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ ์„œ๋ฒ„๊ฐ€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋‚˜ ํŽ˜์ด์ง€ ๋‚ด์šฉ์„ ํฌํ•จํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋ฉด, ์ด๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์˜ ์ทจ์•ฝ์ ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก์Šคํ‚ค๋งˆ๋ž€?
URL์—์„œ ์Šคํ‚ค๋งˆ(schema)๋Š” ํ”„๋กœํ† ์ฝœ์„ ์ •์˜ํ•˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•œ๋‹ค. ์Šคํ‚ค๋งˆ๋Š” URL์˜ ๋งจ ์•ž ๋ถ€๋ถ„์— ์œ„์น˜ํ•˜๋ฉฐ, ์ฝœ๋ก ๊ณผ ๋‘ ๊ฐœ์˜ ์Šฌ๋ž˜์‹œ(://)๋กœ ๋๋‚œ๋‹ค. ์Šคํ‚ค๋งˆ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์™€ ์–ด๋–ป๊ฒŒ ํ†ต์‹ ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ง€์ •ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, HTTP, HTTPS, FTP, FILE ๋“ฑ์ด ์žˆ๋‹ค.
์œ„ ์˜ˆ์‹œ์—์„œ, http...๋Œ€์‹ , file:///etc/passwd๋ฅผ ๋„ฃ์œผ๋ฉด, ์„œ๋ฒ„ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์œ ์ € ์ •๋ณด๋ฅผ ์ทจ๋“ํ•  ์ˆ˜ ์žˆ๋‹ค.

SSRF ๋Œ€์‘ ๋ฐฉ๋ฒ•

  • URL ๊ฒ€์ฆ: ์—…๋กœ๋“œ๋˜๋Š” URL์ด ์™ธ๋ถ€ ๋„๋ฉ”์ธ์— ์†ํ•˜๋Š”์ง€ ์ฒ ์ €ํžˆ ๊ฒ€์ฆํ•œ๋‹ค.
  • ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ: ํ—ˆ์šฉ๋œ ๋„๋ฉ”์ธ์˜ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ URL์„ ์ œํ•œํ•œ๋‹ค.
  • ํ”„๋ก์‹œ ์„œ๋ฒ„ ์‚ฌ์šฉ: ์ง์ ‘์ ์ธ URL ์ ‘๊ทผ ๋Œ€์‹  ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ํ•„ํ„ฐ๋งํ•œ๋‹ค.
  • ์‘๋‹ต ๋‚ด์šฉ ์ œํ•œ: ์„œ๋ฒ„๊ฐ€ ์™ธ๋ถ€๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ์‘๋‹ต ๋‚ด์šฉ์„ ์ œํ•œํ•˜์—ฌ ๋‚ด๋ถ€ ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.