Ang kahinaan sa node-netmask NPM package na ginamit sa 270 libong proyekto

Ang node-netmask NPM package, na mayroong humigit-kumulang 3 milyong mga pag-download bawat linggo at ginagamit bilang isang dependency sa higit sa 270 libong mga proyekto sa GitHub, ay may kahinaan (CVE-2021-28918) na nagpapahintulot dito na i-bypass ang mga tseke na gumagamit ng netmask upang matukoy ang paglitaw upang matugunan ang mga saklaw o para sa pag-filter. Ang isyu ay naayos sa paglabas ng node-netmask 2.0.0.

Ang kahinaan ay ginagawang posible na ituring ang isang panlabas na IP address bilang isang address mula sa panloob na network at kabaligtaran, at sa isang tiyak na lohika ng paggamit ng node-netmask module sa application upang isagawa ang SSRF (Server-side request forgery), RFI (Remote File Inclusion) at LFI (Local File Inclusion) pag-atake ) upang ma-access ang mga mapagkukunan sa panloob na network at isama ang mga panlabas o lokal na file sa chain ng pagpapatupad. Ang problema ay ayon sa pagtutukoy, ang mga halaga ng string ng address na nagsisimula sa isang zero ay dapat bigyang-kahulugan bilang mga numero ng octal, ngunit hindi ito isinasaalang-alang ng node-netmask module at tinatrato ang mga ito bilang mga decimal na numero.

Halimbawa, maaaring humiling ang isang attacker ng lokal na mapagkukunan sa pamamagitan ng pagtukoy sa value na "0177.0.0.1", na tumutugma sa "127.0.0.1", ngunit itatapon ng module na "node-netmask" ang null, at ituturing ang 0177.0.0.1β€³ bilang " 177.0.0.1", na sa application kapag sinusuri ang mga panuntunan sa pag-access, hindi posibleng matukoy ang pagkakakilanlan gamit ang "127.0.0.1". Katulad nito, maaaring tukuyin ng isang attacker ang address na "0127.0.0.1", na dapat ay kapareho ng "87.0.0.1", ngunit ituturing na "127.0.0.1" sa module na "node-netmask". Katulad nito, maaari mong dayain ang tseke para sa pag-access sa mga intranet address sa pamamagitan ng pagtukoy ng mga halaga tulad ng "012.0.0.1" (katumbas ng "10.0.0.1", ngunit ipoproseso bilang 12.0.0.1 sa panahon ng pagsusuri).

Ang mga mananaliksik na natukoy ang problema ay tinatawag na ang problema ay sakuna at nagbibigay ng ilang mga sitwasyon ng pag-atake, ngunit karamihan sa kanila ay mukhang haka-haka. Halimbawa, pinag-uusapan nito ang posibilidad ng pag-atake sa isang application na nakabase sa Node.js na nagtatatag ng mga panlabas na koneksyon upang humiling ng mapagkukunan batay sa mga parameter o data ng kahilingan sa pag-input, ngunit ang application ay hindi partikular na pinangalanan o detalyado. Kahit na makakita ka ng mga application na naglo-load ng mga mapagkukunan batay sa mga ipinasok na IP address, hindi ito lubos na malinaw kung paano maaaring mapagsamantalahan ang kahinaan sa pagsasanay nang hindi kumokonekta sa isang lokal na network o walang kontrol sa mga "mirror" na IP address.

Ipinapalagay lamang ng mga mananaliksik na ang mga may-ari ng 87.0.0.1 (Telecom Italia) at 0177.0.0.1 (Brasil Telecom) ay magagawang i-bypass ang paghihigpit sa pag-access sa 127.0.0.1. Ang isang mas makatotohanang senaryo ay ang pagsamantalahan ang kahinaan upang i-bypass ang iba't ibang mga listahan ng block sa gilid ng application. Ang isyu ay maaari ding ilapat sa pagbabahagi ng kahulugan ng mga saklaw ng intranet sa NPM module na "private-ip".

Pinagmulan: opennet.ru

Magdagdag ng komento