uClibc un uClibc-ng ievainojamība, kas ļauj viltot datus DNS kešatmiņā

Standarta C bibliotēkās uClibc un uClibc-ng, ko izmanto daudzās iegultās un pārnēsājamās ierīcēs, ir konstatēta ievainojamība (CVE nav piešķirta), kas ļauj DNS kešatmiņā ievietot fiktīvus datus, kurus var izmantot, lai aizstātu IP adresi. patvaļīga domēna kešatmiņā un novirzīt pieprasījumus uz domēnu uzbrucēja serverī.

Problēma skar dažādas Linux programmaparatūras maršrutētājiem, piekļuves punktiem un lietiskā interneta ierīcēm, kā arī iegultos Linux izplatījumus, piemēram, OpenWRT un Embedded Gentoo. Tiek atzīmēts, ka ievainojamība parādās daudzu ražotāju ierīcēs (piemēram, uClibc tiek izmantots Linksys, Netgear un Axis programmaparatūrā), taču, tā kā uClibc un uClibc-ng ievainojamība joprojām nav novērsta, detalizēta informācija par konkrētām ierīcēm un ražotājiem, kuru produkti vai problēma ir pieejama. vēl nav izpausta.

Ievainojamība ir saistīta ar paredzamu darījumu identifikatoru izmantošanu DNS vaicājumu nosūtīšanas kodā. DNS pieprasījuma identifikācijas numurs tika izvēlēts, vienkārši palielinot skaitītāju, neizmantojot papildu portu numuru randomizāciju, kas ļāva saindēt DNS kešatmiņu, iepriekš nosūtot UDP paketes ar fiktīvām atbildēm (atbilde tiks pieņemta, ja tā būs saņemta pirms atbilde no reālā servera un ietver pareizo ID). Atšķirībā no 2008. gadā piedāvātās Kaminska metodes, darījuma identifikators pat nav jāuzmin, jo tas sākotnēji ir paredzams (vērtība sākotnēji tiek iestatīta uz 1, kas tiek palielināta ar katru pieprasījumu, nevis tiek izvēlēta nejauši).

uClibc un uClibc-ng ievainojamība, kas ļauj viltot datus DNS kešatmiņā

Lai aizsargātu pret identifikatora brutālu spēku, specifikācija iesaka papildus izmantot nejaušu avota tīkla portu skaita sadalījumu, no kuriem tiek sūtīti DNS pieprasījumi, kas kompensē nepietiekami lielo identifikatora izmēru. Kad iespējojat portu randomizāciju, lai ģenerētu fiktīvu atbildi, papildus 16 bitu identifikatora atlasei ir jāatlasa arī tīkla porta numurs. Programmā uClibc un uClibc-ng šāda nejaušināšana nebija tieši iespējota (izsaucot bind, nejauša avota UDP ports netika norādīts), un tā izmantošana bija atkarīga no operētājsistēmas iestatījumiem.

Ja pot randomizācija ir atspējota, pieaugošā pieprasījuma ID noteikšana tiek atzīmēta kā nenozīmīgs uzdevums. Bet pat tad, ja tiek izmantota nejaušība, uzbrucējam atliek tikai uzminēt tīkla portu no diapazona 32768–60999, kam viņš var izmantot masveida vienlaicīgu fiktīvu atbilžu sūtīšanu uz dažādiem tīkla portiem.

uClibc un uClibc-ng ievainojamība, kas ļauj viltot datus DNS kešatmiņā

Problēma ir apstiprināta visos pašreizējos uClibc un uClibc-ng laidienos, tostarp jaunākajās uClibc 0.9.33.2 un uClibc-ng 1.0.40 versijās. 2021. gada septembrī informācija par ievainojamību tika nosūtīta CERT/CC koordinētai labojumu sagatavošanai. 2022. gada janvārī dati par problēmu tika kopīgoti ar vairāk nekā 200 ražotājiem, kas sadarbojas ar CERT/CC. Martā tika mēģināts atsevišķi sazināties ar uClibc-ng projekta uzturētāju, taču viņš atbildēja, ka saviem spēkiem nespēj novērst ievainojamību un ieteica publiski atklāt informāciju par problēmu, cerot saņemt palīdzību uClibc-ng projekta izstrādē. labot no kopienas. Starp ražotājiem NETGEAR paziņoja par atjauninājuma izlaišanu, kas novērš ievainojamību.

Avots: opennet.ru

Pievieno komentāru