์ผ๋‹จ ํ•˜๊ณ  ๋ณด๋Š” ์‚ฌ๋žŒ

๋‚˜์ค‘๋ณด๋‹จ ์ง€๊ธˆ์— ์ง‘์ค‘ํ•˜๋˜, ์ง€๊ธˆ๋ณด๋‹จ ๋‚˜์ค‘์— ์™„๋ฒฝํ•ด์ง€์ž๐Ÿ’ช๐Ÿป

๐Ÿ—ž๏ธ IT ๋™ํ–ฅ ํŒŒ์•… ๋ฐ ๋‚˜์˜ ์ƒ๊ฐ ์ •๋ฆฌ/์‚ฌ๊ฑด์‚ฌ๊ณ 

Node.js 1.1.9 ์ด์ „ ๋ฒ„์ „์—์„œ SSRF ์ทจ์•ฝ์  ๋ฐœ๊ฒฌ

JanginTech 2024. 8. 19. 09:43

1. CVE-2023-42282: SSRF Vulnerability Found in ip Package for Node.js Before Version 1.1.9 Due to Improper Categorization of IP Addresses

https://www.cve.news/cve-2023-42282/

 

CVE-2023-42282: SSRF Vulnerability Found in ip Package for Node.js Before Version 1.1.9 Due to Improper Categorization of IP Add

Security researchers have recently discovered an SSRF (Server Side Request Forgery) vulnerability in the ip package used in Node.js applications before version 1.1.9. This vulnerability has been assigned the CVE identifier CVE-2023-42282 and is considered

www.cve.news

 

[ ์š”์•ฝ ]

1. Node.js 1.1.9 ์ด์ „ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉ๋œ IP ํŒจํ‚ค์ง€๋กœ๋ถ€ํ„ฐ SSRF(Server Side Request Forgery) ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋๋‹ค. ์ด ์ทจ์•ฝ์ ์€ CVE๋กœ ์ง€์ •๋˜์—ˆ์œผ๋ฉฐ, ๊ณต๊ฒฉ์ž๊ฐ€ ๋‚ด๋ถ€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋ฌด๋‹จ ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์—ˆ๋‹ค.

 

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

 

3. ํ•ด๋‹น ์ทจ์•ฝ์ ์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์†์—ฌ ๋‚ด๋ถ€ ์„œ๋น„์Šค๋‚˜ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋ฌด๋‹จ ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. 

const ip = require('ip');

// This IP address should not be considered public, but it is treated as such.
const maliciousIP = 'x7f.1';

if (ip.isPublic(maliciousIP)) {
  console.log('The IP address is incorrectly identified as public:', maliciousIP);
} else {
  console.log('The IP address is correctly identified as private:', maliciousIP);
}

 

์ž˜๋ชป๋œ ํ˜•์‹์˜ IP('x7f.1')์„ ๊ณต์šฉ IP๋กœ ์ž˜๋ชป ์ฒ˜๋ฆฌํ•˜์—ฌ ์ž ์žฌ์ ์œผ๋กœ ์•…์˜์ ์ธ ๋‚ด๋ถ€ ์š”์ฒญ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒ€์‚ฌ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„ ์ฝ”๋“œ๋Š”, ๊ณต๊ฒฉ์ž๊ฐ€ ์„œ๋ฒ„ ๋‚ด์—์„œ ์Šน์ธ๋˜์ง€ ์•Š์€ ์š”์ฒญ์„ ๋ณด๋‚ด์–ด ๋กœ์ง์„ ์กฐ์ž‘ํ•˜๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‚ด๋ถ€ ์„œ๋น„์Šค๋ฅผ ์•…์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

4. ์œ„ ์ทจ์•ฝ์ ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ip ํŒจํ‚ค์ง€๋Š” 1.1.9 ์ด์ƒ์œผ๋กœ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํ•œ๋‹ค. isPublic ํ•จ์ˆ˜๊ฐ€ IP ์ฃผ์†Œ(๊ฐœ์ธ์šฉ/๊ณต๊ฐœ์šฉ)๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹๋ณ„ํ•˜์—ฌ SSRF ๊ณต๊ฒฉ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

5. ๋ณด์•ˆ ์ทจ์•ฝ์„ฑ์œผ๋กœ๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

 

 

โž•

SSRF(Server-Side Request Forgery)?

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

 


 

๐Ÿค” ์ด์— ๋Œ€ํ•œ ๋‚˜์˜ ์ƒ๊ฐ

๋‹จ์ˆœํ•œ IP ์˜ค๋ถ„๋ฅ˜๋กœ ์ธํ•ด ๊ณต๊ฒฉ์ž๊ฐ€ ์ค‘์š”ํ•œ ๋ณด์•ˆ ๊ฒ€์‚ฌ๋ฅผ ์šฐํšŒํ•˜๊ณ  ๋‚ด๋ถ€ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ํ„ฐ๋ฌด๋‹ˆ์—†์œผ๋ฉด์„œ๋„ ๋†€๋ž๋‹ค. ์‚ฌ์†Œํ•ด ๋ณด์ด๋Š” ๋ฒ„๊ทธ๋ผ๋„ ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ์œ„ํ—˜์„ ๊ฐ€์ ธ๋‹ค์ค„ ์ˆ˜ ์žˆ์Œ์„ ๊นจ๋‹ฌ์•˜๋‹ค.

์ฝ”๋“œ ๊ฒ€ํ† ๋ฅผ ์—„๊ฒฉํžˆํ•˜๊ณ , ์†Œํ”„ํŠธ์›จ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์ฃผ๊ธฐ์ ์ธ ์—…๋ฐ์ดํŠธ์˜ ์ค‘์š”์„ฑ์„ ์ƒ๊ธฐ์‹œ์ผœ ์ฃผ๋Š” ์ž๋ฃŒ์˜€๋‹ค.

๋ฌด์—‡๋ณด๋‹ค ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์‹œ, ๊ธฐ๋Šฅ๊ณผ ๋ณด์•ˆ์˜ ์ ์ ˆํ•œ ๊ท ํ˜•์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.