Уразлівасць у uClibc і uClibc-ng, якая дазваляе падмяніць дадзеныя ў кэшы DNS

У стандартных Сі-бібліятэках uClibc і uClibc-ng, ужывальных у шматлікіх убудаваных і партатыўных прыладах, выяўленая ўразлівасць (CVE не прысвоены), якая дазваляе падставіць фіктыўныя дадзеныя ў кэш DNS, што можна выкарыстаць для падмены ў кэшы IP-адрасы адвольнага дамена і перанапраў да дамена на сервер зламысніка.

Праблема закранае розныя Linux-прашыўкі для маршрутызатараў, кропак доступу і прылад інтэрнэту-рэчаў, а таксама Linux-дыстрыбутывы для ўбудавальных сістэм, такія як OpenWRT і Embedded Gentoo. Адзначаецца, што ўразлівасць выяўляецца ў прыладах шматлікіх вытворцаў (напрыклад, uClibc выкарыстоўваецца ў прашыўках Linksys, Netgear і Axis), але бо ў uClibc і uClibc-ng уразлівасць застаецца невыпраўленай, дэталёвыя звесткі аб пэўных прыладах і вытворцах, у прадуктах якіх прысутнічае праблема, пакуль не выдаюцца.

Уразлівасць выклікана выкарыстаннем у кодзе адпраўкі DNS-запытаў прадказальных ідэнтыфікатараў транзакцыі. Ідэнтыфікацыйны нумар запыту DNS выбіраўся шляхам простага павелічэння лічыльніка без ужывання дадатковай рандомизации нумароў портаў, што дазваляла дамагчыся атручванні кэша DNS праз папераджальную адпраўку UDP-пакетаў з фіктыўнымі адказамі (адказ будзе прыняты, калі ён прыйшоў раней адказу рэальнага сервера і ўключае карэктны У адрозненне ад прапанаванага ў 2008 годзе метаду Камінскага, ідэнтыфікатар транзакцыі нават не трэба адгадваць, бо ён першапачаткова прадказальны (спачатку выстаўляецца значэнне 1, якое пры кожным запыце павялічваецца, а не выбіраецца выпадковым чынам).

Уразлівасць у uClibc і uClibc-ng, якая дазваляе падмяніць дадзеныя ў кэшы DNS

У спецыфікацыі для абароны ад падбору ідэнтыфікатара рэкамендуецца дадаткова прымяняць выпадковае размеркаванне нумароў зыходных сеткавых партоў, з якіх адпраўляюцца DNS-запыты, што кампенсуе недастаткова вялікі памер ідэнтыфікатара. Пры ўключэнні рандомизации портаў для фармавання фіктыўнага адказу акрамя падбору 16 бітнага ідэнтыфікатара неабходна падабраць і нумар сеткавага порта. У uClibc і uClibc-ng падобная рандомизация не ўключалася відавочна (пры выкліку bind не паказваўся выпадковы зыходны UDP порт) і яе ўжыванне залежала ад налад аперацыйнай сістэмы.

Пры адключэнні рандомизации патоў вызначэнне інкрыментуемага ідэнтыфікатара запыту адзначаецца як трывіяльная задача. Але нават у выпадку прымянення рандомизации, атакаваламу неабходна толькі адгадаць сеткавы порт з дыяпазону 32768-60999, для чаго можна выкарыстоўваць масіраваную адначасовую адпраўку фіктыўных адказаў па розных сеткавых партоў.

Уразлівасць у uClibc і uClibc-ng, якая дазваляе падмяніць дадзеныя ў кэшы DNS

Наяўнасць праблемы пацверджана ва ўсіх актуальных выпусках uClibc і uClibc-ng, у тым ліку самыя свежыя версіі uClibc 0.9.33.2 і uClibc-ng 1.0.40. У верасні 2021 года інфармацыя аб уразлівасці была адпраўлена ў CERT / CC для ўзгодненай падрыхтоўкі выпраўленняў. У студзені 2022 года дадзеныя аб праблеме былі перададзены больш за 200 вытворцам, якія супрацоўнічаюць з CERT/CC. У сакавіку была спроба асобна звязацца з суправаджаючым праект uClibc-ng, але ён адказаў, што не ў стане выправіць уразлівасць самастойна і рэкамендаваў публічна раскрыць інфармацыю аб праблеме, разлічваючы атрымаць дапамогу ў распрацоўцы выпраўлення ад супольнасці. З вытворцаў аб выпуску абнаўлення з ухіленнем уразлівасці абвясціў NETGEAR.

Крыніца: opennet.ru

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