Rust և Go լեզուների ցանցային գրադարաններում խոցելիություն, որը թույլ է տալիս շրջանցել IP հասցեի ստուգումը

Rust և Go լեզուների ստանդարտ գրադարաններում հայտնաբերվել են խոցելիություններ՝ կապված IP հասցեների սխալ մշակման հետ՝ օկտալ թվանշաններով հասցեների վերլուծման գործառույթներում: Խոցելիությունները թույլ են տալիս շրջանցել հավելվածներում վավեր հասցեների ստուգումները, օրինակ՝ SSRF (Սերվերի կողմից հարցումների կեղծման) գրոհներ իրականացնելիս մուտքը շրջադարձային ինտերֆեյսի հասցեներ (127.xxx) կամ ներցանցային ենթացանցեր կազմակերպելու համար: Խոցելիությունները շարունակում են գրադարանների հանգույցների ցանցային դիմակներում (JavaScript, CVE-2021-28918, CVE-2021-29418), private-ip (JavaScript, CVE-2020-28360), ipaddress (Python, C) նախկինում հայտնաբերված խնդիրների ցիկլը: 2021-29921 ), Տվյալներ::Վալիդացիա::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 (Remote File Inclusion) և LFI (Local File Inclusion) հարձակումներին: Խոցելիությունը ֆիքսվել է 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

Добавить комментарий