Curl жана libcurl буферинин толуп кетиши, SOCKS5 прокси аркылуу киргенде көрүнөт

Параллель иштеп жаткан curl тармагы жана libcurl китепканасы аркылуу маалыматтарды кабыл алуу жана жөнөтүү үчүн утилитада (CVE-2023-38545) кемчилик аныкталган, бул буфердин толуп кетишине жана чабуулчу коддун потенциалдуу аткарылышына алып келиши мүмкүн. curl утилитасын же libcurl колдонгон тиркемени колдонуу менен кирүүдө кардар тарапка чабуулчу башкарган HTTPS серверине. Көйгөй SOCKS5 прокси аркылуу кирүү curl режиминде иштетилгенде гана пайда болот. Проксисиз түз киргенде, алсыздык пайда болбойт. Аялуу curl 8.4.0 релизинде аныкталган. Мүчүлүштүктөрдү тапкан коопсуздук изилдөөчүсү Hackerone компаниясынын Internet Bug Bounty демилгесинин алкагында 4660 доллар сыйлык алды.

Аялуу SOCKS5 проксиге кирүүдөн мурун хост атын чечүү кодундагы катадан улам келип чыгат. Эгерде хосттун аталышы 256 белгиге чейин узундукта болсо, curl дароо SOCKS5 проксиге анын тарабындагы чечүү үчүн атын өткөрүп берет, ал эми аты 255 белгиден көп болсо, ал жергиликтүү чечүүчүгө которулат жана мурунтан эле аныкталган даректи SOCKS5ке өткөрөт. . Коддогу катадан улам, SOCKS5 аркылуу туташуунун жай сүйлөшүүлөрү учурунда локалдык резолюциянын зарылдыгын көрсөткөн желек туура эмес мааниге коюлушу мүмкүн, бул күтүү менен бөлүнгөн буферге узун хосттун аталышын жаздырууга алып келди. 255 белгиден ашпаган IP дарегин же аталышын сактоо.

SOCKS5 прокси аркылуу curl аркылуу кирген сайттын ээси суроо-талапты кайра багыттоо кодун (HTTP 30x) кайтарып, "Жайгашкан жери:" башын 16 чейин диапазондогу хост аты менен URL'ге коюу менен кардар тарабынан буфердин толуп кетишин козгой алат. 64 КБ чейин (16 КБ – бөлүнгөн буферди толтуруу үчүн талап кылынган минималдуу өлчөм, ал эми 65 КБ – URL дарегинде уруксат берилген максималдуу хост аталышынын узундугу). Эгерде libcurl жөндөөлөрүндө суроону кайра багыттоо иштетилсе жана колдонулган SOCKS5 прокси жетиштүү жай болсо, анда узун хост аты кичине буферге жазылат, албетте, кичине өлчөмдө.

Аялуулук негизинен libcurl негизиндеги тиркемелерге таасирин тийгизет жана curl утилитасында мааниси 65541ден азыраак "--limit-rate" опциясын колдонгондо гана пайда болот - libcurl демейки боюнча 16 КБ өлчөмүндөгү буферди жана curl утилитасында бөлөт. бул 100 КБ, бирок бул өлчөмү “-limit-rate” параметринин маанисине жараша өзгөрөт.

Долбоордун автору Дэниел Стенберг алсыздык 1315 күн бою байкалбай турганын белгиледи. Ошондой эле curl эстутум үчүн коопсуз тилде жазылган болсо, curl боюнча мурда аныкталган кемчиликтердин 41% алдын алса болмок, бирок жакынкы келечекте curl башка тилге кайра жазуу пландары жок деп айтылат. Код базасынын коопсуздугун жогорулатуу чаралары катары, кодду тестирлөө үчүн инструменттерди кеңейтүү жана эс тутум менен коопсуз иштөөнү камсыз кылуучу программалоо тилдеринде жазылган көз карандылыкты активдүү колдонуу сунушталат. Ошондой эле ал акырындык менен curl бөлүктөрүн коопсуз тилдерде жазылган варианттар менен алмаштыруу мүмкүнчүлүгүн карап жатат, мисалы, Rust'та ишке ашырылган эксперименталдык Hyper HTTP сервери.

Source: opennet.ru

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