Kerentanan dalam paket NPM node-netmask digunakan di 270 ribu proyek

Paket NPM node-netmask, yang memiliki sekitar 3 juta unduhan per minggu dan digunakan sebagai ketergantungan pada lebih dari 270 ribu proyek di GitHub, memiliki kerentanan (CVE-2021-28918) yang memungkinkannya melewati pemeriksaan yang menggunakan netmask untuk menentukan kejadian pada rentang alamat atau untuk pemfilteran. Masalah ini telah diperbaiki pada rilis node-netmask 2.0.0.

Kerentanan memungkinkan untuk memperlakukan alamat IP eksternal sebagai alamat dari jaringan internal dan sebaliknya, dan dengan logika tertentu menggunakan modul node-netmask dalam aplikasi untuk melakukan SSRF (Pemalsuan permintaan sisi server), RFI (Remote File Inclusion) dan serangan LFI (Local File Inclusion) ) untuk mengakses sumber daya di jaringan internal dan memasukkan file eksternal atau lokal dalam rantai eksekusi. Masalahnya adalah menurut spesifikasi, nilai string alamat yang dimulai dengan nol harus ditafsirkan sebagai bilangan oktal, tetapi modul node-netmask tidak memperhitungkan hal ini dan memperlakukannya sebagai bilangan desimal.

Misalnya, penyerang dapat meminta sumber daya lokal dengan menentukan nilai "0177.0.0.1", yang sesuai dengan "127.0.0.1", tetapi modul "node-netmask" akan membuang nilai null, dan memperlakukan 0177.0.0.1β€³ sebagai " 177.0.0.1", yang mana dalam aplikasi saat mengevaluasi aturan akses, tidak akan mungkin untuk menentukan identitas dengan "127.0.0.1". Demikian pula, penyerang dapat menentukan alamat β€œ0127.0.0.1”, yang seharusnya sama dengan β€œ87.0.0.1”, tetapi akan diperlakukan sebagai β€œ127.0.0.1” di modul β€œnode-netmask”. Demikian pula, Anda dapat menipu pemeriksaan akses ke alamat intranet dengan menentukan nilai seperti β€œ012.0.0.1” (setara dengan β€œ10.0.0.1”, tetapi akan diproses sebagai 12.0.0.1 selama pemeriksaan).

Para peneliti yang mengidentifikasi masalah tersebut menyebut masalah tersebut sebagai bencana besar dan memberikan beberapa skenario serangan, namun sebagian besar terlihat spekulatif. Misalnya, ini berbicara tentang kemungkinan menyerang aplikasi berbasis Node.js yang membuat koneksi eksternal untuk meminta sumber daya berdasarkan parameter atau data permintaan input, tetapi aplikasi tersebut tidak diberi nama atau dirinci secara spesifik. Bahkan jika Anda menemukan aplikasi yang memuat sumber daya berdasarkan alamat IP yang dimasukkan, tidak sepenuhnya jelas bagaimana kerentanan dapat dieksploitasi dalam praktiknya tanpa terhubung ke jaringan lokal atau tanpa mendapatkan kendali atas alamat IP β€œcermin”.

Para peneliti hanya berasumsi bahwa pemilik 87.0.0.1 (Telecom Italia) dan 0177.0.0.1 (Brasil Telecom) mampu melewati pembatasan akses ke 127.0.0.1. Skenario yang lebih realistis adalah mengeksploitasi kerentanan untuk melewati berbagai daftar blokir sisi aplikasi. Masalah ini juga dapat diterapkan untuk berbagi definisi rentang intranet dalam modul NPM "private-ip".

Sumber: opennet.ru

Tambah komentar