Прелевање на баферот во curl и libcurl, манифестирано при пристап преку прокси SOCKS5

Идентификувана е ранливост (CVE-2023-38545) во алатката за примање и испраќање податоци преку curl мрежата и библиотеката libcurl, која се развива паралелно, што може да доведе до прелевање на баферот и потенцијално извршување на кодот на напаѓачот на страната на клиентот кога се пристапува со помош на алатката curl или апликација која користи libcurl, до сервер HTTPS контролиран од напаѓачот. Проблемот се појавува само ако пристапот преку SOCKS5 прокси е овозможен во навивам. Кога се пристапува директно без прокси, ранливоста не се појавува. Ранливоста е фиксирана во изданието curl 8.4.0. Безбедносниот истражувач кој ја откри грешката доби награда од 4660 долари како дел од иницијативата на Хакероне за Интернет баг Баунти.

Ранливоста е предизвикана од грешка во кодот за резолуција на името на домаќинот пред да пристапите до проксито SOCKS5. Ако името на домаќинот е долго до 256 знаци, curl веднаш го пренесува името на проксито SOCKS5 за резолуција од негова страна, а ако името е повеќе од 255 знаци, се префрла на локалниот резолутор и ја пренесува веќе дефинираната адреса на SOCKS5 . Поради грешка во кодот, знамето што укажува на потребата за локална резолуција може да се постави на погрешна вредност за време на бавното преговарање на врската преку SOCKS5, што доведе до снимање на долго име на домаќинот во бафер доделен со очекување за складирање на IP адресата или името, не повеќе од 255 знаци.

Сопственикот на страницата до која се пристапува со навивам преку прокси SOCKS5 може да предизвика прелевање на баферот од страна на клиентот со враќање на кодот за пренасочување на барање (HTTP 30x) и поставување на заглавието „Локација:“ на URL со име на домаќин во опсег од 16 нагоре до 64 KB (16 KB е минималната големина потребна за прелевање на доделениот бафер, а 65 KB е максималната дозволена должина на името на домаќинот во URL-то). Ако пренасочувањето на барањето е овозможено во поставките за libcurl и користениот прокси SOCKS5 е доволно бавен, тогаш долгото име на домаќинот ќе биде запишано во мал бафер, очигледно со помала големина.

Ранливоста главно влијае на апликациите базирани на libcurl и се појавува во алатката curl само кога се користи опцијата „--limit-rate“ со вредност помала од 65541 - libcurl стандардно доделува бафер од 16 KB во големина, а во алатката curl тоа е 100 KB, но оваа големина се менува во зависност од вредноста на параметарот „-limit-rate“.

Даниел Стенберг, авторот на проектот, спомна дека ранливоста останала неоткриена 1315 дена. Исто така, се вели дека 41% од претходно идентификуваните пропусти во curl веројатно би можеле да се избегнат доколку curl бил напишан на јазик што е безбеден за меморија, но нема планови за препишување на curl на друг јазик во догледна иднина. Како мерки за подобрување на безбедноста на базата на кодови, се предлага да се прошират алатките за тестирање на кодот и поактивно да се користат зависности напишани на програмски јазици кои обезбедуваат безбедно работење со меморија. Исто така, ја разгледува можноста за постепено замена на делови од curl со опции напишани на безбедни јазици, како што е експерименталниот Hyper HTTP backend имплементиран во Rust.

Извор: opennet.ru

Додадете коментар