Przepełnienie bufora w Toxcore wykorzystane podczas wysyłania pakietu UDP

Toxcore, referencyjna implementacja protokołu przesyłania wiadomości Tox P2P, zawiera lukę (CVE-2021-44847), która może potencjalnie spowodować wykonanie kodu podczas przetwarzania specjalnie spreparowanego pakietu UDP. Luka dotyczy wszystkich użytkowników aplikacji opartych na Toxcore, którzy nie mają wyłączonego transportu UDP. Do ataku wystarczy wysłać pakiet UDP znając adres IP, port sieciowy i publiczny klucz DHT ofiary (informacje te są publicznie dostępne w DHT, czyli atak mógłby zostać przeprowadzony na dowolnego użytkownika lub węzeł DHT).

Problem występował w wersjach toxcore od 0.1.9 do 0.2.12 i został naprawiony w wersji 0.2.13. Spośród aplikacji klienckich jedynie projekt qTox udostępnił na razie aktualizację eliminującą lukę. W ramach obejścia bezpieczeństwa można wyłączyć UDP, zachowując obsługę protokołu TCP.

Podatność spowodowana jest przepełnieniem bufora w funkcji handle_request(), które następuje na skutek nieprawidłowego obliczenia rozmiaru danych w pakiecie sieciowym. W szczególności długość zaszyfrowanych danych została określona w makrze CRYPTO_SIZE, zdefiniowanym jako „1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE”, które następnie zostało wykorzystane w operacji odejmowania „długość - CRYPTO_SIZE”. Ze względu na brak nawiasów w makrze zamiast odjąć sumę wszystkich wartości, odjęto 1 i dodano pozostałe części. Przykładowo zamiast „długość - (1 + 32 * 2 + 24)” obliczono rozmiar bufora jako „długość - 1 + 32 * 2 + 24”, co skutkowało nadpisaniem danych na stosie poza granicą bufora.

Źródło: opennet.ru

Dodaj komentarz