V Toxcore, vzorovej implementácii P2P protokolu pre výmenu správ Tox, bola zistená zraniteľnosť (CVE-2021-44847), ktorá potenciálne umožňuje iniciovať vykonanie kódu pri spracovaní špeciálne formátovaného UDP paketu. Zraniteľnosti sú vystavené všetci používatelia aplikácií založených na Toxcore, v ktorých nie je vypnutý transport UDP. Na útok stačí poslať UDP paket, pričom je známa IP adresa, sieťový port a otvorený DHT kľúč obete (tieto údaje sú verejne dostupné v DHT, t.j. útok mohol byť vykonaný na akéhokoľvek používateľa alebo uzol DHT).
Problém sa prejavoval v vydaniach toxcore od 0.1.9 po 0.2.12 a bol odstránený vo verzii 0.2.13. Z klientskych aplikácií zatiaľ vydal aktualizáciu na odstránenie zraniteľnosti iba projekt qTox. Ako obchádzkovú ochranu je možné vypnúť používanie UDP a ponechať podporu TCP.
Zraniteľnosť je spôsobená preplnením vyrovnávacej pamäte v funkcii handle_request(), ktoré vzniká kvôli nesprávnemu výpočtu veľkosti údajov v sieťovom pakete. Najmä dĺžka šifrovaných údajov bola určovaná v makre CRYPTO_SIZE, definovanom ako „1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE“, ktoré sa následne používalo v operácii odčítania „length — CRYPTO_SIZE“. V dôsledku chýbajúcich zátvoriek v makre sa namiesto odčítania súčtu všetkých hodnôt vykonávalo odčítanie 1 a sčítanie ostatných častí. Napríklad, miesto „length — (1 + 32 * 2 + 24)“ sa veľkosť vyrovnávacej pamäte vypočítavala ako „length — 1 + 32 * 2 + 24“, čo viedlo k prepísaniu údajov na zásobníku, nachádzajúcich sa za hranicou vyrovnávacej pamäte.
Zdroj: opennet.ru
