Toxcore، پیادهسازی مرجع پروتکل پیامرسانی Tox P2P، دارای یک آسیبپذیری (CVE-2021-44847) است که به طور بالقوه میتواند اجرای کد را هنگام پردازش یک بسته UDP ساختهشده خاص آغاز کند. همه کاربران برنامه های مبتنی بر Toxcore که دارای UDP غیرفعال نیستند، تحت تأثیر این آسیب پذیری قرار می گیرند. برای حمله، کافی است یک بسته UDP با دانستن آدرس IP، پورت شبکه و کلید عمومی DHT قربانی ارسال کنید (این اطلاعات در DHT به صورت عمومی در دسترس است، یعنی حمله می تواند بر روی هر کاربر یا گره DHT انجام شود).
این مشکل در نسخه های toxcore 0.1.9 تا 0.2.12 وجود داشت و در نسخه 0.2.13 برطرف شد. در بین برنامه های مشتری، تنها پروژه qTox تاکنون به روز رسانی را منتشر کرده است که آسیب پذیری را از بین می برد. به عنوان یک راه حل امنیتی، می توانید UDP را با حفظ پشتیبانی TCP غیرفعال کنید.
این آسیبپذیری ناشی از سرریز بافر در تابع handle_request() است که به دلیل محاسبه نادرست اندازه داده در یک بسته شبکه رخ میدهد. به طور خاص، طول داده های رمزگذاری شده در ماکرو CRYPTO_SIZE تعیین شد که به صورت "1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE" تعریف شد، که متعاقباً در عملیات تفریق "طول - CRYPTO_SIZE" استفاده شد. به دلیل عدم وجود پرانتز در ماکرو، به جای کم کردن مجموع همه مقادیر، 1 را کم کرده و قسمت های باقی مانده را اضافه می کند. به عنوان مثال، به جای "طول - (1 + 32 * 2 + 24)"، اندازه بافر به عنوان "طول - 1 + 32 * 2 + 24" محاسبه شد، که منجر به بازنویسی داده ها در پشته فراتر از مرز بافر شد.
منبع: opennet.ru