A Toxcore puffer túlcsordulása UDP-csomag küldésével kihasználva

A Toxcore, a Tox P2P üzenetkezelési protokoll referencia-megvalósítása egy biztonsági réssel (CVE-2021-44847) rendelkezik, amely potenciálisan kódfuttatást válthat ki egy speciálisan kialakított UDP-csomag feldolgozása során. A biztonsági rés minden olyan Toxcore-alapú alkalmazást érint, amelynél nincs letiltva az UDP-átvitel. A támadáshoz elegendő egy UDP-csomagot küldeni az áldozat IP-címének, hálózati portjának és nyilvános DHT-kulcsának ismeretében (ez az információ nyilvánosan elérhető DHT-ban, azaz a támadás bármely felhasználón vagy DHT-csomóponton végrehajtható).

A probléma a 0.1.9–0.2.12 toxcore kiadásokban volt jelen, és a 0.2.13-as verzióban javították. A kliens alkalmazások közül eddig csak a qTox projekt adott ki frissítést a sérülékenység megszüntetésére. Biztonsági megoldásként letilthatja az UDP-t a TCP-támogatás fenntartása mellett.

A sérülékenységet a handle_request() függvény puffertúlcsordulása okozza, amely a hálózati csomag adatméretének helytelen kiszámítása miatt következik be. Pontosabban, a titkosított adatok hosszát a CRYPTO_SIZE makróban határozták meg, amelyet a következőképpen határoztak meg: "1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE", amelyet ezt követően a "hosszúság - CRYPTO_SIZE" kivonási műveletben használtak. A zárójelek hiánya miatt a makróban ahelyett, hogy az összes érték összegét kivonta volna, kivont 1-et, és hozzáadta a fennmaradó részeket. Például a "hosszúság - (1 + 32 * 2 + 24)" helyett a pufferméretet "hosszúság - 1 + 32 * 2 + 24"-ként számították ki, ami a pufferhatáron túli veremben lévő adatok felülírását eredményezte.

Forrás: opennet.ru

Hozzászólás