Уразлівасць у сеткавых бібліятэках моў Rust і Go, якая дазваляе абыйсці праверку IP-адрасоў.

У стандартных бібліятэках моў Rust і Go выяўлены ўразлівасці, злучаныя з некарэктнай апрацоўкай IP-адрасоў з васьмірічнымі лічбамі ў функцыях разбору адрасу. Уразлівасці дазваляюць абыйсці праверкі дапушчальных адрасоў у прыкладаннях, напрыклад, для арганізацыі звароту да адрасоў loopback-інтэрфейсу (127.xxx) або інтранэт-падсеткам пры здзяйсненні нападаў SSRF (Server-side request forgery). Уразлівасці працягваюць цыкл праблем, раней выяўленых у бібліятэках node-netmask (JavaScript, CVE-2021-28918, CVE-2021-29418), private-ip (JavaScript, CVE-2020-28360), ipaddress (Python, CVE-2021 ), Data::Validate::IP (Perl, CVE-29921-2021) і Net::Netmask (Perl, CVE-29662-2021).

У адпаведнасці са спецыфікацыяй радковыя значэнні 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 (Server-side request forgery), RFI (Remote File Inclusion) і LFI (Local File Inclusion). Уразлівасць ухілена ў галінцы Rust 1.53.0.

Уразлівасць у сеткавых бібліятэках моў Rust і Go, якая дазваляе абыйсці праверку IP-адрасоў.

У мове Go праблеме схільная стандартная бібліятэка "net" (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-адрасоў.


Крыніца: opennet.ru

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