A curl nevű hálózati adatok küldésére és fogadására szolgáló segédprogramban és a párhuzamosan fejlődő libcurl könyvtárban egy sebezhetőséget (CVE-2023-38545) fedeztek fel, amely puffertúlcsordulást okozhat, és potenciálisan lehetővé teheti a támadó számára, hogy kódot hajtson végre a kliens oldalon, ha a curl segédprogramon vagy a libcurl-t használó alkalmazáson keresztül egy, a támadó által irányított HTTPS-szerverhez fordul. A probléma csak akkor jelentkezik, ha a curl a SOCKS5 proxy-n keresztül történő hozzáférést használ. Közvetlen hívás esetén, proxy nélkül a sebezhetőség nem jelentkezik. A problémát a curl 8.4.0 verziójában orvosolták. A hibát felfedező biztonsági kutató 4660 dollár jutalmat kapott az Internet Bug Bounty program keretein belül a Hackerone-on.
A sebezhetőséget a hosztnév feloldásával kapcsolatos kódbeli hiba okozza, mielőtt a SOCKS5 proxyhoz fordulna. Amikor a hosztnév hossza legfeljebb 256 karakter, a curl azonnal átadja a nevet a SOCKS5 proxy számára a feloldáshoz, ha a név hosszabb a 255 karakter hosszúságnál, akkor a helyi feloldóra vált és a SOCKS5 számára már meghatározott címet továbbít. A kód hibája miatt a helyi feloldás szükségességét jelző zászló a SOCKS5 proxy-n keresztüli lassú kapcsolat-egyeztetés során nem a megfelelő értékre állítható, ami hosszú hosztnév bufertúllépését okozza. IP address vagy nevének hossza nem haladhatja meg a 255 karaktert.
A weboldal tulajdonosa, akinek a curl a SOCKS5 proxy-n keresztül hívja, kezdeményezheti a puffertúlcsordulást a kliens oldalon azzal, hogy a kérés átirányítási kódját (HTTP 30x) és a 'Location:' fejlécben a hosztnév URL-jét adja vissza, amely a 16 és 64 KB közötti tartományban van (a 16 KB minimum mérete a hozzárendelt puffer túllépéséhez, míg a 65 KB a hosztnév URL-ben megengedett maximális hossza). Ha a libcurl beállításaiban engedélyezett az átirányítás, és a használt SOCKS5 proxy elég lassú, akkor a hosztnév hosszúsága már egy kicsi bufferbe került, amely tudatosan kisebb méretű.
A sebezhetőség elsősorban a libcurl alapú alkalmazásokat érinti, és a curl segédprogramban csak akkor jelentkezik, ha a '—limit-rate' opció értéke kevesebb mint 65541, mivel a libcurl alapértelmezés szerint 16 KB méretű buffert oszt ki, míg a curl segédprogram 100 KB-ot, de ez a méret változhat a '—limit-rate' paraméter értékétől függően.
Daniel Stenberg, a projekt szerzője, említette, hogy a sebezhetőség 1315 napon keresztül észrevétlen maradt. Azt is megjegyezték, hogy a curl által korábban felfedezett sebezhetőségek 41%-át valószínűleg el lehetett volna kerülni, ha a curl olyan nyelven íródott volna, amely biztonságos memóriahasználatot biztosít, de a curl más nyelvre való átírását a közeljövőben nem tervezik. A kódalap biztonságának növelése érdekében javasolt a kód tesztelésére szolgáló eszközök kibővítése és aktívan használni a memóriahasználat szempontjából biztonságos nyelveken írt függőségeket. A curl egyes részeinek fokozatos cseréje is terítéken van, biztonságos nyelveken, például a Rust nyelven megvalósított kísérleti HTTP-backend, a Hyper használatával.
Forrás: opennet.ru
