270๋งŒ๊ฐœ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” node-netmask NPM ํŒจํ‚ค์ง€์˜ ์ทจ์•ฝ์ 

์ฃผ๋‹น ์•ฝ 3๋งŒ ๊ฑด์˜ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์žˆ๊ณ  GitHub์—์„œ 270๋งŒ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์ ํŠธ์— ์ข…์†์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” node-netmask NPM ํŒจํ‚ค์ง€์—๋Š” ๋„ท๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒ€์‚ฌ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ (CVE-2021-28918)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์†Œ ๋ฒ”์œ„ ๋˜๋Š” ํ•„ํ„ฐ๋ง์— ๋Œ€ํ•œ ๋ฐœ์ƒ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” node-netmask 2.0.0 ๋ฆด๋ฆฌ์Šค์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ทจ์•ฝ์ ์œผ๋กœ ์ธํ•ด ์™ธ๋ถ€ IP ์ฃผ์†Œ๋ฅผ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์˜ ์ฃผ์†Œ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๊ทธ ๋ฐ˜๋Œ€๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋…ธ๋“œ-๋„ท๋งˆ์Šคํฌ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ SSRF(์„œ๋ฒ„ ์ธก ์š”์ฒญ ์œ„์กฐ), RFI๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํŠน์ • ๋…ผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (Remote File Inclusion) ๋ฐ LFI(Local File Inclusion) ๊ณต๊ฒฉ)์„ ํ†ตํ•ด ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๊ณ  ์‹คํ–‰ ์ฒด์ธ์— ์™ธ๋ถ€ ๋˜๋Š” ๋กœ์ปฌ ํŒŒ์ผ์„ ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์‚ฌ์–‘์— ๋”ฐ๋ฅด๋ฉด XNUMX์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฃผ์†Œ ๋ฌธ์ž์—ด ๊ฐ’์€ XNUMX์ง„์ˆ˜๋กœ ํ•ด์„๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ node-netmask ๋ชจ๋“ˆ์€ ์ด๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  XNUMX์ง„์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๊ณต๊ฒฉ์ž๋Š” "0177.0.0.1"์— ํ•ด๋‹นํ•˜๋Š” "127.0.0.1" ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ๋กœ์ปฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์ง€๋งŒ "node-netmask" ๋ชจ๋“ˆ์€ null์„ ์‚ญ์ œํ•˜๊ณ  0177.0.0.1"์„ " 177.0.0.1", ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์•ก์„ธ์Šค ๊ทœ์น™์„ ํ‰๊ฐ€ํ•  ๋•Œ "127.0.0.1"๋กœ ID๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ณต๊ฒฉ์ž๋Š” "0127.0.0.1"๊ณผ ๋™์ผํ•ด์•ผ ํ•˜๋Š” "87.0.0.1" ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ "node-netmask" ๋ชจ๋“ˆ์—์„œ๋Š” "127.0.0.1"๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ "012.0.0.1"("10.0.0.1"๊ณผ ๋™์ผํ•˜์ง€๋งŒ ํ™•์ธ ์ค‘์—๋Š” 12.0.0.1๋กœ ์ฒ˜๋ฆฌ๋จ)๊ณผ ๊ฐ™์€ ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์ธํŠธ๋ผ๋„ท ์ฃผ์†Œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ํ™•์ธ์„ ์†์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•œ ์—ฐ๊ตฌ์ง„์€ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํŒŒ๊ตญ์ ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ œ์‹œํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์€ ์ถ”์ธก์— ๋ถˆ๊ณผํ•ด ๋ณด์ธ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ž…๋ ฅ ์š”์ฒญ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ์™ธ๋ถ€ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋Š” Node.js ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ณต๊ฒฉํ•  ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜์ง€๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ด๋ฆ„์ด ๊ตฌ์ฒด์ ์œผ๋กœ ์ง€์ •๋˜๊ฑฐ๋‚˜ ์ž์„ธํžˆ ์„ค๋ช…๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ๋œ IP ์ฃผ์†Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๋กœ๋“œํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐœ๊ฒฌํ•˜๋”๋ผ๋„ ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ "๋ฏธ๋Ÿฌ" IP ์ฃผ์†Œ๋ฅผ ์ œ์–ดํ•˜์ง€ ์•Š๊ณ  ์‹ค์ œ๋กœ ์ทจ์•ฝ์ ์ด ์–ด๋–ป๊ฒŒ ์•…์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€๋Š” ์™„์ „ํžˆ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฐ๊ตฌ์›๋“ค์€ 87.0.0.1(Telecom Italia) ๋ฐ 0177.0.0.1(Brasil Telecom)์˜ ์†Œ์œ ์ž๊ฐ€ 127.0.0.1์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์ œํ•œ์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ํ˜„์‹ค์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์ทจ์•ฝ์ ์„ ์•…์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธก ์ฐจ๋‹จ ๋ชฉ๋ก์„ ์šฐํšŒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” NPM ๋ชจ๋“ˆ "private-ip"์—์„œ ์ธํŠธ๋ผ๋„ท ๋ฒ”์œ„ ์ •์˜๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐ์—๋„ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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