Toxcore bufera pārpilde tiek izmantota, nosūtot UDP paketi

Toxcore, Tox P2P ziņojumapmaiņas protokola atsauces ieviešanai, ir ievainojamība (CVE-2021-44847), kas var izraisīt koda izpildi, apstrādājot īpaši izveidotu UDP paketi. Ievainojamība ietekmē visus Toxcore lietojumprogrammu lietotājus, kuriem nav atspējots UDP transports. Lai uzbruktu, pietiek nosūtīt UDP paketi, zinot upura IP adresi, tīkla portu un publisko DHT atslēgu (šī informācija ir publiski pieejama DHT formātā, t.i., uzbrukumu var veikt jebkuram lietotājam vai DHT mezglam).

Problēma bija sastopama toxcore laidienos no 0.1.9 līdz 0.2.12, un tā tika novērsta versijā 0.2.13. No klientu lietojumprogrammām tikai qTox projekts līdz šim ir izlaidis atjauninājumu, kas novērš ievainojamību. Kā drošības risinājumu varat atspējot UDP, vienlaikus saglabājot TCP atbalstu.

Ievainojamību izraisa bufera pārpilde funkcijā handle_request(), kas rodas nepareiza datu lieluma aprēķināšanas dēļ tīkla paketē. Konkrēti, šifrēto datu garums tika noteikts makro CRYPTO_SIZE, kas definēts kā "1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE", kas pēc tam tika izmantots atņemšanas operācijā "garums - CRYPTO_SIZE". Tā kā makro nav iekavas, tā vietā, lai atņemtu visu vērtību summu, tas atņēma 1 un pievienoja atlikušās daļas. Piemēram, "garums - (1 + 32 * 2 + 24)" vietā bufera lielums tika aprēķināts kā "garums - 1 + 32 * 2 + 24", kā rezultātā tika pārrakstīti dati par steku, kas atrodas ārpus bufera robežas.

Avots: opennet.ru

Pievieno komentāru