Pretečenie vyrovnávacej pamäte v Toxcore využívané odoslaním paketu UDP

Toxcore, referenčná implementácia protokolu Tox P2P správ, má zraniteľnosť (CVE-2021-44847), ktorá by mohla potenciálne spustiť spustenie kódu pri spracovaní špeciálne vytvoreného paketu UDP. Táto chyba zabezpečenia sa týka všetkých používateľov aplikácií založených na Toxcore, ktorí nemajú zakázaný prenos UDP. Na útok stačí poslať UDP paket s vedomím IP adresy, sieťového portu a verejného DHT kľúča obete (táto informácia je verejne dostupná v DHT, t.j. útok môže byť vykonaný na ľubovoľnom užívateľovi alebo DHT uzle).

Problém bol prítomný vo vydaniach toxcore 0.1.9 až 0.2.12 a bol opravený vo verzii 0.2.13. Spomedzi klientskych aplikácií zatiaľ len projekt qTox vydal aktualizáciu, ktorá túto zraniteľnosť odstraňuje. Ako riešenie zabezpečenia môžete vypnúť UDP pri zachovaní podpory TCP.

Zraniteľnosť je spôsobená pretečením vyrovnávacej pamäte vo funkcii handle_request(), ku ktorému dochádza v dôsledku nesprávneho výpočtu veľkosti údajov v sieťovom pakete. Konkrétne bola dĺžka zašifrovaných dát určená v makre CRYPTO_SIZE, definovanom ako "1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE", ktoré bolo následne použité v operácii odčítania "dĺžka - CRYPTO_SIZE". Kvôli absencii zátvoriek v makre namiesto odčítania súčtu všetkých hodnôt odčítalo 1 a pridalo zvyšné časti. Napríklad namiesto "dĺžka - (1 + 32 * 2 + 24)" sa veľkosť vyrovnávacej pamäte vypočítala ako "dĺžka - 1 + 32 * 2 + 24", čo viedlo k prepísaniu údajov v zásobníku za hranicou vyrovnávacej pamäte.

Zdroj: opennet.ru

Pridať komentár