NPM paketo mazgas-netmask pažeidžiamumas, naudojamas 270 tūkst. projektų

Node-netmask NPM paketas, kuris per savaitę atsisiunčiamas apie 3 milijonus kartų ir naudojamas kaip priklausomybė nuo daugiau nei 270 tūkstančių „GitHub“ projektų, turi pažeidžiamumą (CVE-2021-28918), leidžiantį apeiti patikras, kuriose naudojama tinklo kaukė. adresų diapazonams arba filtravimui nustatyti. Problema išspręsta išleidžiant mazgo tinklo kaukę 2.0.0.

Dėl pažeidžiamumo išorinį IP adresą galima traktuoti kaip adresą iš vidinio tinklo ir atvirkščiai, ir naudojant tam tikrą logiką programoje naudoti mazgo tinklo kaukę, kad būtų galima atlikti SSRF (Server-side request forgery), RFI. (Remote File Inclusion) ir LFI (Local File Inclusion) atakos), kad pasiektų vidinio tinklo išteklius ir į vykdymo grandinę įtrauktų išorinius arba vietinius failus. Problema ta, kad pagal specifikaciją adresų eilutės reikšmės, prasidedančios nuliu, turėtų būti interpretuojamos kaip aštuntieji skaičiai, tačiau mazgo-tinklo kaukės modulis į tai neatsižvelgia ir traktuoja jas kaip dešimtainius skaičius.

Pavyzdžiui, užpuolikas gali paprašyti vietinio šaltinio, nurodydamas reikšmę „0177.0.0.1“, kuri atitinka „127.0.0.1“, tačiau modulis „mazgas-netmask“ atmes nulį ir 0177.0.0.1 traktuos kaip „ 177.0.0.1“, kurios programoje, vertinant prieigos taisykles, nebus galima nustatyti tapatybės su „127.0.0.1“. Panašiai užpuolikas gali nurodyti adresą „0127.0.0.1“, kuris turėtų būti identiškas „87.0.0.1“, bet modulyje „mazgas-netmask“ bus traktuojamas kaip „127.0.0.1“. Panašiai galite apgauti čekį dėl prieigos prie intraneto adresų nurodydami tokias reikšmes kaip „012.0.0.1“ (atitinka „10.0.0.1“, bet tikrinimo metu bus apdorojama kaip 12.0.0.1).

Tyrėjai, kurie nustatė problemą, vadina problemą katastrofiška ir pateikia kelis atakos scenarijus, tačiau dauguma jų atrodo spekuliaciniai. Pavyzdžiui, kalbama apie galimybę atakuoti Node.js pagrįstą programą, kuri užmezga išorinius ryšius, kad prašytų išteklių pagal įvesties užklausos parametrus arba duomenis, tačiau programa nėra konkrečiai pavadinta ar išsamiai aprašyta. Net jei randate programas, kurios įkelia išteklius pagal įvestus IP adresus, nėra visiškai aišku, kaip pažeidžiamumą galima išnaudoti praktiškai neprisijungus prie vietinio tinklo arba neįgyjant „veidrodinių“ IP adresų kontrolės.

Tyrėjai tik mano, kad 87.0.0.1 (Telecom Italia) ir 0177.0.0.1 (Brasil Telecom) savininkai gali apeiti prieigos apribojimą iki 127.0.0.1. Realesnis scenarijus yra išnaudoti pažeidžiamumą siekiant apeiti įvairius programų blokų sąrašus. Problema taip pat gali būti taikoma bendrinant intraneto diapazonų apibrėžimą NPM modulyje „private-ip“.

Šaltinis: opennet.ru

Добавить комментарий