آسیب‌پذیری RCE در نرم‌افزار Anydesk

در نرم‌افزار Anydesk در نسخه linux و FreeBSD، آسیب‌پذیری در فرمت استرینگ وجود دارد که به حمله کننده اجازه اکسپلویت آسیب‌پذیری و اجرای RCE می‌دهد. به‌روز رسانی امنیتی برای این آسیب‌پذیری بعد از آگاه کردن سازنده در چند روز منتشر شد و به متخصصی که این باگ امنیتی را اعلام کرد ۵۰۰۰ یورو بانتی تعلق گرفت.

شناسه آسیب‌پذیری:

CVE-2020-10160

درجه آسیب‌پذیری:

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Base Score: 9.8 Critical

سیستم‌های آسیب‌پذیر:

AnyDesk before 5.5.3 on Linux and FreeBSD

نیازمندی تعامل کاربری: خیر

سال شناسایی: ۲۰۲۰

توضیحات:

هکر می‌تواند با مهندسی معکوس و فاز نمودن اپلیکیشن، باگ امنیتی فرمت استرینگ را پیدا کند. از طریق این باگ حمله کننده توانایی اجرای RCE را پیدا می‌کند و این فرایند با فرستادن یک پکت UDP به سیستم هدف انجام می‌شود.

نرم‌افزار Anydesk دارای چندین فرآیند همزمان است که برای هر فرآیند دسترسی‌های متفاوتی دارد. با ارزش‌ترین هدف فرآیند سرویس است یعنی:

/usr/bin/anydesk –service

این فرایند با سطح دسترسی root اجرا می‌شود. طبق دو آسیب‌پذیری قدیمی (CVE-2017-14397 & CVE-2018-13102) فرایند در سیستم هدف ویندوزی برای افزایش سطح دسترسی اکسپلویت شد. هردو اکسپلویت آسیب‌پذیری از روش تزریق فایل DLL یا آسیب‌پذیری پیش‌بارگذاری انجام می‌شود. که هردو آنها در حالت لوکال انجام می‌شود.

برای اکسپلویت آسیب‌پذیری در قدم اول باید ارتباطات شبکه ای ‌Anydesk بررسی شود. برای انجام این کار از netset برای جستجو پورت ارتباطی نیاز است:

user@w00d:~$ sudo netstat -tulpn | grep anydesk        
tcp        0      0 0.0.0.0:7070            0.0.0.0:*               LISTEN      598/anydesk        
udp        0      0 0.0.0.0:50001           0.0.0.0:*                           598/anydesk

 نرم‌افزار netset برای پورت TCP به ۷۰۷۰ گوش می‌دهد و برای پورت UDP به پورت ۵۰۰۰۱ گوش می‌دهد. با گوش دادن تمام فرایندهای ‌پردازشی نرم‌افزار Anydesk مشخص می شود که فرآیند سرویس بر روی PID 598 است و همچنین فرآیند traybar بر روی PID 2983 و فرآیند front-end بر روی PID 3421 شناخته می‌شود.

user@w00d:~$ sudo ps aux | grep anydesk
root       598  0.0  0.3 531172 28620 ?        Ssl  08:56   0:02 /usr/bin/anydesk --service
user      2983  0.0  0.2 744288 23736 tty2     Sl+  08:58   0:00 /usr/bin/anydesk --tray
user      3421  0.0  0.4 864624 37760 tty2     Sl+  09:01   0:00 /usr/bin/anydesk

‍قبل از اینکه عملیات فاز را روی نرم‌افزار انجام دهیم باید مشخص شود چه دیتایی را معمولا در این پورت نرم‌افزار دریافت می‌کند. برای اینکه از دیتا نمونه‌گیری کنیم، می‌توانیم تمام ترافیک مرتبط با این پورت را بررسی کنیم و برای این کار از wireshark استفاده می‌کنیم. از fuzzotron برای فاز نمودن دیتا بدست آمده استفاده می‌شود و نقاط از دسترس خارج شدن نرم افزار را برای دیتای مختلف بررسی می‌کنیم. این عملیات برای تمامی فرآیندها و پورت‌های شناسایی شده انجام می شود.

بعد از شناخت فرایند front-end و رسیدن به نقطه شکست نرم‌افزار، بررسی این موضوع و اینکه آیا یک باگ امنیتی منجربه این شکست شده است انجام می‌شود. این موضوع به دلیل مشکل در تابع _IO_vfprintf_internal است و با ارایه دیتای غیر معمول به این تابع مشکل ایجاد می‌شود. و به Anydesk فرستاد. بعد از فرستادن پکت‌های مختلف و crash کردن‌های مختلف Anydesk و بررسی این اتفاق می‌توان payload مناسب برای اکسپلویت آسیب‌پذیری را پیدا کرد.

به روز رسانی امنیتی برای این باگ توسط سازنده نرم‌افزار در دسترس می‌باشد و پیشنهاد می‌شود به دلیل اهمیت آن سریعا در دستور کار قرار گیرد.

منابع:

  1. NVD
  2. devel0pment
  3. AnyDesk

در صورت تمایل به اشتراگ بگذارید