IP ์ฃผ์†Œ ํ™•์ธ์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” Rust ๋ฐ Go ์–ธ์–ด์˜ ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ทจ์•ฝ์ 

์ฃผ์†Œ ๊ตฌ๋ฌธ ๋ถ„์„ ๊ธฐ๋Šฅ์—์„œ 127์ง„์ˆ˜๊ฐ€ ํฌํ•จ๋œ IP ์ฃผ์†Œ์˜ ์ž˜๋ชป๋œ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ ์ทจ์•ฝ์ ์ด Rust ๋ฐ Go ์–ธ์–ด์˜ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ์œผ๋กœ ์ธํ•ด SSRF(์„œ๋ฒ„ ์ธก ์š”์ฒญ ์œ„์กฐ) ๊ณต๊ฒฉ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ฃจํ”„๋ฐฑ ์ธํ„ฐํŽ˜์ด์Šค ์ฃผ์†Œ(2021.xxx) ๋˜๋Š” ์ธํŠธ๋ผ๋„ท ์„œ๋ธŒ๋„ท์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์œ ํšจํ•œ ์ฃผ์†Œ์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ์€ ์ด์ „์— node-netmask ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(JavaScript, CVE-28918-2021, CVE-29418-2020), private-ip(JavaScript, CVE-28360-2021), ipaddress(Python, CVE- 29921-2021 ), Data::Validate::IP(Perl, CVE-29662-2021) ๋ฐ Net::Netmask(Perl, CVE-29424-XNUMX).

์‚ฌ์–‘์— ๋”ฐ๋ฅด๋ฉด 0177์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” IP ์ฃผ์†Œ ๋ฌธ์ž์—ด ๊ฐ’์€ 127์ง„์ˆ˜๋กœ ํ•ด์„๋˜์–ด์•ผ ํ•˜์ง€๋งŒ ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ์ด๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ 0177.0.0.1์„ ๋ฒ„๋ฆฌ๊ณ  ๊ฐ’์„ 127.0.0.1์ง„์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 0177.0.0.1์ง„์ˆ˜ 127.0.0.1์€ 8์ง„์ˆ˜ 0177.0.0.1๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” 127.0.0.1์ง„์ˆ˜ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ "012.0.0.1"์— ํ•ด๋‹นํ•˜๋Š” "10.0.0.1" ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ฃผ์†Œ XNUMX์ด ์„œ๋ธŒ๋„ท XNUMX/XNUMX์— ์žˆ๋Š”์ง€ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์ฃผ์†Œ "XNUMX"์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์€ XNUMX๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ "XNUMX"("XNUMX"๊ณผ ๋™์ผ)๊ณผ ๊ฐ™์€ ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์ธํŠธ๋ผ๋„ท ์ฃผ์†Œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ํ™•์ธ์„ ์†์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Rust์—์„œ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ "std::net"์ด ๋ฌธ์ œ(CVE-2021-29922)์˜ ์˜ํ–ฅ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ IP ์ฃผ์†Œ ๊ตฌ๋ฌธ ๋ถ„์„๊ธฐ๋Š” ์ฃผ์†Œ ๊ฐ’ ์•ž์˜ 0177.0.0.1์„ ์‚ญ์ œํ–ˆ์ง€๋งŒ ์„ธ ์ž๋ฆฌ ์ดํ•˜์˜ ์ˆซ์ž๊ฐ€ ์ง€์ •๋œ ๊ฒฝ์šฐ์—๋งŒ "010.8.8.8"์ด ์ž˜๋ชป๋œ ๊ฐ’์œผ๋กœ ์ธ์‹๋˜์–ด ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 127.0.026.1 ๋ฐ 1.53.0 ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ์ฃผ์†Œ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ๋•Œ std::net::IpAddr์„ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ž ์žฌ์ ์œผ๋กœ SSRF(์„œ๋ฒ„ ์ธก ์š”์ฒญ ์œ„์กฐ), RFI(์›๊ฒฉ ํŒŒ์ผ ํฌํ•จ) ๋ฐ LFI(๋กœ์ปฌ ํŒŒ์ผ ํฌํ•จ) ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ์€ Rust XNUMX ๋ธŒ๋žœ์น˜์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

IP ์ฃผ์†Œ ํ™•์ธ์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” Rust ๋ฐ Go ์–ธ์–ด์˜ ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ทจ์•ฝ์ 

Go์—์„œ๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ "net"์ด ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค(CVE-2021-29923). net.ParseCIDR ๋‚ด์žฅ ํ•จ์ˆ˜๋Š” 00000177.0.0.1์ง„์ˆ˜ ์•ž์˜ 00000177.0.0.1์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹  ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณต๊ฒฉ์ž๋Š” net.ParseCIDR(24/177.0.0.1) ํ•จ์ˆ˜์—์„œ ํ™•์ธํ•  ๋•Œ 24/127.0.0.1๊ฐ€ ์•„๋‹Œ 24/1.16.3๋กœ ๊ตฌ๋ฌธ ๋ถ„์„๋˜๋Š” 1.17 ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” Kubernetes ํ”Œ๋žซํผ์—์„œ๋„ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ์€ Go ๋ฆด๋ฆฌ์Šค XNUMX ๋ฐ ๋ฒ ํƒ€ XNUMX์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

IP ์ฃผ์†Œ ํ™•์ธ์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” Rust ๋ฐ Go ์–ธ์–ด์˜ ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ทจ์•ฝ์ 


์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€