Curl болон libcurl дахь буфер халилт, SOCKS5 проксигоор дамжуулан хандах үед илэрдэг

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

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

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

Энэ эмзэг байдал нь libcurl дээр суурилсан програмуудад голчлон нөлөөлдөг бөгөөд зөвхөн 65541-ээс бага утгатай "--limit-rate" сонголтыг ашиглах үед л curl хэрэгсэлд харагдана - libcurl анхдагчаар 16 КБ хэмжээтэй буфер, curl хэрэгсэлд хуваарилдаг. Энэ нь 100 KB боловч энэ хэмжээ нь "-limit-rate" параметрийн утгаас хамаарч өөрчлөгддөг.

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

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх