Перапаўненне буфера ў Toxcore, якое эксплуатуецца праз адпраўку UDP-пакета.

У Toxcore, эталоннай рэалізацыі P2P-пратакола абмену паведамленнямі Tox, выяўлена ўразлівасць (CVE-2021-44847), якая патэнцыйна дазваляе ініцыяваць выкананне кода пры апрацоўцы спецыяльна аформленага UDP-пакета. Уразлівасці схільныя ўсе карыстачы прыкладанняў на базе Toxcore, у якіх не адключаны транспарт UDP. Для нападу досыць адправіць UDP-пакет, ведаючы IP-адрас, сеткавы порт і адчынены DHT-ключ ахвяры (дадзеныя звесткі даступныя публічна ў DHT, т.е. напад магла быць здзейснена на любога карыстача або вузел DHT).

Праблема выяўлялася ў выпусках toxcore з 0.1.9 па 0.2.12 і ўхіленая ў версіі 0.2.13. З кліенцкіх прыкладанняў абнаўленне з ухіленнем уразлівасці пакуль выпусціў толькі праект qTox. У якасці абыходнага шляху абароны можна адключыць выкарыстанне UDP, пакінуўшы падтрымку TCP.

Уразлівасць выклікана перапаўненнем буфера ў функцыі handle_request(), які ўзнікае з-за некарэктнага разліку памеру дадзеных у сеткавым пакеце. У прыватнасці, даўжыня зашыфраваных дадзеных вызначалася ў макрасе CRYPTO_SIZE, вызначаным як "1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE", які ў далейшым выкарыстоўваўся ў аперацыі аднімання "length - CRYPTO_SIZE". З-за адсутнасці дужак у макрасе замест аднімання сумы ўсіх значэнняў выконвалася адніманне 1 і складанне астатніх частак. Напрыклад, замест "length - (1 + 32 * 2 + 24)" памер буфера разлічваўся як "length - 1 + 32 * 2 + 24", што прыводзіла да перазапісу дадзеных у стэку, якія знаходзяцца за мяжой буфера.

Крыніца: opennet.ru

Дадаць каментар