Уразлівасць у NPM-пакеце node-netmask, які ўжываецца ў 270 тысячах праектах.

У NPM-пакеце node-netmask, які налічвае каля 3 млн загрузак у тыдзень і выкарыстоўваным у якасці залежнасці ў больш 270 тысяч праектаў на GitHub, выяўленая ўразлівасць (CVE-2021-28918), якая дазваляе абыйсці праверкі, у якіх сеткавая маска выкарыстоўваецца для вызначэння ўваходжання у дыяпазоны адрасоў або для фільтрацыі. Праблема ўхіленая ў выпуску node-netmask 2.0.0.

Уразлівасць дазваляе дамагчыся апрацоўкі вонкавага IP-адрасы як адрасы з унутранай сеткі і наадварот, а пры вызначанай логіцы выкарыстання модуля node-netmask у прыкладанні здзейсніць напады SSRF (Server-side request forgery), RFI (Remote File Inclusion) і LFI (Local File Inclusion ) для звароту да рэсурсаў ва ўнутранай сетцы і ўключэння ў ланцужок выканання знешніх або лакальных файлаў. Праблема складаецца ў тым, што ў адпаведнасці са спецыфікацыяй радковыя значэнні адрасоў, якія пачынаюцца з нуля, павінны інтэрпрэтавацца як васьмярковыя лікі, але модуль "node-netmask" не ўлічвае дадзеную асаблівасць і апрацоўвае іх як дзесятковыя лікі.

Напрыклад, атакавалы можа запытаць лакальны рэсурс, паказаўшы значэнне "0177.0.0.1", якое адпавядае "127.0.0.1", але модуль "node-netmask" адкіне нуль, і апрацуе 0177.0.0.1 "як "177.0.0.1", што ў дадатку пры адзнацы правіл доступу не дасць магчымасць вызначыць тоеснасць з "127.0.0.1". Аналагічна атакавалы можа паказаць адрас "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

Дадаць каментар