Bregusrwydd yn llyfrgelloedd rhwydwaith ieithoedd Rust and Go sy'n eich galluogi i osgoi dilysu cyfeiriad IP

Mae gwendidau sy'n gysylltiedig Γ’ phrosesu cyfeiriadau IP yn anghywir Γ’ digidau wythol mewn swyddogaethau dosrannu cyfeiriadau wedi'u nodi yn llyfrgelloedd safonol yr ieithoedd Rust and Go. Mae'r gwendidau yn ei gwneud hi'n bosibl osgoi gwiriadau am gyfeiriadau dilys mewn cymwysiadau, er enghraifft, i drefnu mynediad i gyfeiriadau rhyngwyneb loopback (127.xxx) neu is-rwydweithiau mewnrwyd wrth gyflawni ymosodiadau SSRF (ffugio ceisiadau ochr gweinydd). Mae'r gwendidau yn parhau Γ’'r cylch o broblemau a nodwyd yn flaenorol ym mwgwd nod y llyfrgelloedd (JavaScript, CVE-2021-28918, CVE-2021-29418), private-ip (JavaScript, CVE-2020-28360), ipaddress (Python, CVE-). 2021-29921 ), Data:: Dilysu:: IP (Perl, CVE-2021-29662) a Net::Netmask (Perl, CVE-2021-29424).

Yn Γ΄l y fanyleb, dylid dehongli gwerthoedd llinynnol cyfeiriad IP sy'n dechrau gyda sero fel rhifau wythol, ond nid yw llawer o lyfrgelloedd yn cymryd hyn i ystyriaeth ac yn syml yn taflu'r sero, gan drin y gwerth fel rhif degol. Er enghraifft, mae'r rhif 0177 mewn wythol yn hafal i 127 mewn degol. Gall ymosodwr ofyn am adnodd trwy nodi'r gwerth "0177.0.0.1", sydd mewn nodiant degol yn cyfateb i "127.0.0.1". Os defnyddir y llyfrgell broblemus, ni fydd y cais yn canfod bod y cyfeiriad 0177.0.0.1 yn yr is-rwydwaith 127.0.0.1/8, ond mewn gwirionedd, wrth anfon cais, gall gael mynediad i'r cyfeiriad "0177.0.0.1", y mae'r bydd swyddogaethau rhwydwaith yn prosesu fel 127.0.0.1. Mewn ffordd debyg, gallwch dwyllo'r gwiriad o fynediad i gyfeiriadau mewnrwyd trwy nodi gwerthoedd fel "012.0.0.1" (sy'n cyfateb i "10.0.0.1").

Yn Rust, effeithiwyd ar y llyfrgell safonol "std::net" gan broblem (CVE-2021-29922). Roedd parser cyfeiriad IP y llyfrgell hon yn taflu sero cyn y gwerthoedd yn y cyfeiriad, ond dim ond pe na bai mwy na thri digid wedi'u nodi, er enghraifft, byddai "0177.0.0.1" yn cael ei weld fel gwerth annilys, a chanlyniad anghywir yn cael ei ddychwelyd mewn ymateb i 010.8.8.8 a 127.0.026.1 . Mae rhaglenni sy'n defnyddio std ::net ::IpAddr wrth ddosrannu cyfeiriadau a bennir gan ddefnyddwyr yn agored i ymosodiadau SSRF (ffugio ar ochr y gweinydd), RFI (Cynhwysiant Ffeil o Bell) ac LFI (Cynhwysiant Ffeil Lleol). Roedd y bregusrwydd yn sefydlog yn y gangen Rust 1.53.0.

Bregusrwydd yn llyfrgelloedd rhwydwaith ieithoedd Rust and Go sy'n eich galluogi i osgoi dilysu cyfeiriad IP

Yn Go, effeithir ar "rwyd" safonol y llyfrgell (CVE-2021-29923). Mae'r swyddogaeth adeiledig net.ParseCIDR yn hepgor sero cyn rhifau wythol yn hytrach na'u prosesu. Er enghraifft, gall ymosodwr basio'r gwerth 00000177.0.0.1, a fydd, pan gaiff ei wirio yn y swyddogaeth net.ParseCIDR(00000177.0.0.1/24), yn cael ei ddosrannu fel 177.0.0.1/24, ac nid 127.0.0.1/24. Mae'r broblem hefyd yn amlygu ei hun yn y platfform Kubernetes. Mae'r bregusrwydd yn sefydlog yn Go release 1.16.3 a beta 1.17.

Bregusrwydd yn llyfrgelloedd rhwydwaith ieithoedd Rust and Go sy'n eich galluogi i osgoi dilysu cyfeiriad IP


Ffynhonnell: opennet.ru

Ychwanegu sylw