I verktyget för att skicka och ta emot data över nÀtverket, curl, samt i den parallellt utvecklade biblioteket libcurl, har en sÄrbarhet identifierats (CVE-2023-38545) som kan leda till buffertöverskridning och potentiellt till exekvering av en angripares kod pÄ klientsidan nÀr man med hjÀlp av curl eller ett program som anvÀnder libcurl kontaktar en HTTPS-server kontrollerad av en illavarslande part. Problemet uppstÄr endast om curl har tillgÄng till SOCKS5-proxy. Vid direkt kontakt utan proxy upptrÀder sÄrbarheten inte. SÄrbarheten har ÄtgÀrdats i curl version 8.4.0. Forskaren som upptÀckte felet erhöll en belöning pÄ $4660 genom Internet Bug Bounty-initiativet pÄ Hackerone.
SÄrbarheten orsakas av ett fel i koden för namnupplösning innan man kontaktar SOCKS5-proxyn. NÀr vÀrdnamnet Àr upp till 256 tecken lÄngt skickar curl omedelbart namnet till SOCKS5-proxyn för upplösning pÄ dess sida, medan om namnet överskrider 255 tecken vÀxlar det till en lokal resolver och överför redan ett definierat adress till SOCKS5. PÄ grund av ett kodfel kan flaggan som indikerar behovet av lokal upplösning under den lÄngsamma förhandlingen av anslutningen genom SOCKS5 ha satts till fel vÀrde, vilket ledde till att det lÄnga vÀrdnamnet skrevs till en buffert avsedd för att hÄlla IP-adresser eller ett namn som inte överskrider 255 tecken.
Webbplatsens Àgare, som curl kontaktar via SOCKS5-proxyn, kan initiera en buffertöverskridning pÄ klientsidan genom att Äterbörda ett omdirigeringskod (HTTP 30x) och sÀtta i rubriken "Location:" en URL med ett vÀrdnamn vars storlek ligger mellan 16 och 64 KB (vÀrdet 16 KB beror pÄ den minimi storlek som krÀvs för att överskrida den tilldelade bufferten, medan vÀrdet 65 KB relaterar till den maximalt tillÄtna lÀngden för ett vÀrdnamn i en URL). Om omdirigeringar tillÄts i libcurl:s instÀllningar och den anvÀnda SOCKS5-proxyn Àr tillrÀckligt lÄngsam, kommer det lÄnga vÀrdnamnet att skrivas till en liten buffert avsedd för att vara betydligt mindre.
SĂ„rbarheten pĂ„verkar huvudsakligen applikationer baserade pĂ„ libcurl och visar sig i curl-verktyget endast nĂ€r alternativet "âlimit-rate" anvĂ€nds med ett vĂ€rde mindre Ă€n 65541 â i libcurl allokeras som standard en buffert pĂ„ 16 KB, medan curl-verktyget har en buffert pĂ„ 100 KB, men denna storlek varierar beroende pĂ„ vĂ€rdet för parametern "âlimit-rate".
Daniel Stenberg, projektets skapare, nÀmnde att sÄrbarheten hade förblivit oupptÀckt i 1315 dagar. Det rapporterades ocksÄ att 41 % av de tidigare identifierade sÄrbarheterna i curl sannolikt skulle ha kunnat undvikas om curl hade skrivits pÄ ett sprÄk som sÀkerstÀller sÀker minneshantering, men det finns inga planer pÄ att skriva om curl pÄ ett annat sprÄk inom överskÄdlig framtid. För att öka sÀkerheten i kodbasen föreslÄs det att utöka verktygen för att testa koden och att mer aktivt anvÀnda beroenden skrivna pÄ programmeringssprÄk som sÀkerstÀller sÀker minneshantering. Det övervÀgs ocksÄ en gradvis ersÀttning av delar av curl med alternativ skrivna pÄ sÀkra sprÄk, sÄsom den experimentella HTTP-backenden Hyper, implementerad i Rust.
KĂ€lla: opennet.ru
