Toxcore буферинин толуп кетиши UDP пакетин жөнөтүү аркылуу пайдаланылды

Toxcore, Tox P2P кабарлашуу протоколунун эталондук ишке ашырылышы, атайын даярдалган UDP пакетин иштеп чыгууда коддун аткарылышын түртүшү мүмкүн болгон аялуу жерине (CVE-2021-44847) ээ. UDP транспорту өчүрүлбөгөн Toxcore негизиндеги тиркемелердин бардык колдонуучулары алсыздыктан жабыр тартышат. Чабуул жасоо үчүн жабырлануучунун IP дарегин, тармак портун жана ачык DHT ачкычын билип турган UDP пакетин жөнөтүү жетиштүү (бул маалымат DHTде жалпыга жеткиликтүү, б.а. чабуул каалаган колдонуучуга же DHT түйүнүнө жасалышы мүмкүн).

Маселе токскордун 0.1.9дан 0.2.12ге чейинки чыгарылыштарында болгон жана 0.2.13 версиясында оңдолгон. Кардар тиркемелеринин ичинен qTox долбоору гана аялуулукту жок кылган жаңыртууну чыгарды. Коопсуздукту чечүү жолу катары, TCP колдоосун сактап, UDPди өчүрө аласыз.

Аялуу тармак пакетиндеги маалымат өлчөмүн туура эмес эсептөөдөн улам пайда болгон handle_request() функциясында буфердин толуп кетишинен келип чыгат. Тактап айтканда, шифрленген маалыматтардын узундугу "1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE" катары аныкталган CRYPTO_SIZE макросунда аныкталган, ал кийинчерээк "length - CRYPTO_SIZE" кемитүү операциясында колдонулган. Макродо кашаа жок болгондуктан, бардык маанилердин суммасын кемитүүнүн ордуна 1ди кемитип, калган бөлүктөрүн кошкон. Мисалы, "узундугу - (1 + 32 * 2 + 24)" ордуна буфердин өлчөмү "узундук - 1 + 32 * 2 + 24" деп эсептелген, натыйжада буфердин чегинен тышкары стектеги маалыматтардын үстүнөн жазуу пайда болгон.

Source: opennet.ru

Комментарий кошуу