Rust жана Go тилдеринин тармактык китепканаларындагы аялуу, IP дарегин текшерүүдөн өтүүгө мүмкүндүк берет

Rust жана Go тилдеринин стандарттуу китепканаларында даректи талдоо функцияларында сегиздик цифралуу IP даректерди туура эмес иштетүүгө байланыштуу алсыздыктар аныкталган. Алсыздыктар тиркемелердеги жарактуу даректерди текшерүүнү кыйгап өтүүгө, мисалы, SSRF (Сервер тараптагы өтүнүчтөрдү жасалмалоо) чабуулдарын жүзөгө ашырууда локалдык интерфейс даректерине (127.xxx) же интранеттин субнеттерине кирүүнү уюштурууга мүмкүндүк берет. Алсыздыктар түйүн-тармак маскасы (JavaScript, CVE-2021-28918, CVE-2021-29418), private-ip (JavaScript, CVE-2020-28360), ipaddress (Python, CVE-) китепканаларында мурда аныкталган көйгөйлөр циклин улантууда. 2021-29921), Data::Validate::IP (Perl, CVE-2021-29662) жана Net::Netmask (Perl, CVE-2021-29424).

Спецификацияга ылайык, нөл менен башталган IP дарек сабынын маанилери сегиздик сандар катары чечмелениши керек, бирок көптөгөн китепканалар муну эске алышпайт жана нөлдү жокко чыгарып, маанини ондук сан катары карашат. Мисалы, сегиздикте 0177 саны ондукта 127ге барабар. Чабуулчу ондук белгиде "0177.0.0.1" туура келген "127.0.0.1" маанисин көрсөтүү менен ресурсту сурай алат. Көйгөйлүү китепкана колдонулса, тиркеме 0177.0.0.1 дареги 127.0.0.1/8 кичи тармагында экенин аныктабайт, бирок чындыгында суроо-талапты жөнөтүүдө ал "0177.0.0.1" дарегине кире алат, ал тармак функциялары 127.0.0.1 катары иштетилет. Ушундай эле жол менен, сиз "012.0.0.1" ("10.0.0.1" эквиваленти) сыяктуу маанилерди көрсөтүү менен интранет даректерине кирүү мүмкүнчүлүгүн текшерүүнү алдасаңыз болот.

Rust'та "std::net" стандарттык китепканасына маселе (CVE-2021-29922) таасирин тийгизген. Бул китепкананын IP дарек талдоочусу даректеги маанилердин алдында нөлдү жокко чыгарды, бирок үч сандан ашпаган сан көрсөтүлсө гана, мисалы, "0177.0.0.1" жараксыз маани жана туура эмес жыйынтык катары кабыл алынат. 010.8.8.8 жана 127.0.026.1 жооп катары кайтарылып берилмек. Колдонуучу белгилеген даректерди талдоодо std::net::IpAddr колдонгон тиркемелер SSRF (Сервер тараптын өтүнүчүн жасалмалоо), RFI (Алыскы файлдарды кошуу) жана LFI (Жергиликтүү файлдарды кошуу) чабуулдарына кабылышы мүмкүн. Алсыздык Rust 1.53.0 бутагында оңдолду.

Rust жана Go тилдеринин тармактык китепканаларындагы аялуу, IP дарегин текшерүүдөн өтүүгө мүмкүндүк берет

Go'до стандарттык китепкана "нет" таасир этет (CVE-2021-29923). net.ParseCIDR орнотулган функциясы сегиздик сандардын алдындагы нөлдөрдү иштетүүнүн ордуна аларды өткөрүп жиберет. Мисалы, чабуулчу 00000177.0.0.1 маанисин өткөрө алат, ал net.ParseCIDR(00000177.0.0.1/24) функциясында текшерилгенде 177.0.0.1/24 эмес, 127.0.0.1/24 катары талданат. Көйгөй Kubernetes платформасында да көрүнөт. Алсыздык Go релизинин 1.16.3 жана бета 1.17де оңдолгон.

Rust жана Go тилдеринин тармактык китепканаларындагы аялуу, IP дарегин текшерүүдөн өтүүгө мүмкүндүк берет


Source: opennet.ru

Комментарий кошуу