در جریان رقابتهای Pwn2Own، یک آسیبپذیری بحرانی در چاپگر Canon MF753Cdw شناسایی شد که با شناسه CVE-2024-0244 ثبت شده است. این نقص امنیتی از نوع Heap-based Buffer Overflow است و به مهاجم اجازه میدهد بدون نیاز به احراز هویت (Unauthenticated)، عملیات Arbitrary Free را اجرا کرده و در نهایت به کنترل کامل دستگاه دست یابد.
مسیر شناسایی و تحلیل
تحقیقات بر روی درایورهای کمتر شناخته شده Canon متمرکز بود. با بررسی درایور ارسال فکس در محیط Windows، مشاهده شد که درخواستهای فکس از طریق پیامهای SOAP به نقطه انتهایی (Endpoint) مسیر /wsd/print ارسال میشوند. تحلیل ترافیک شبکه با ابزار Wireshark نشان داد که این پیامها حاوی دادههای باینری هستند که شامل اطلاعات مقصد فکس، نام کاربری و نام ماشین ارسالکننده است.
ریشه فنی آسیبپذیری (Root Cause)
آسیبپذیری زمانی رخ میدهد که مقدار طول (Length) یکی از رشتهها در Payload باینری، بیش از حد مجاز (مثلاً 0xff) تعریف شود. به دلیل نبود بررسیهای لازم روی طول ورودی (Length Check)، دادههای ورودی باعث سرریز در آرایه phone_number در حافظه Heap میشوند. این سرریز منجر به بازنویسی اشارهگرهای (Pointers) مجاور در حافظه شده و در نهایت باعث فراخوانی تابع free() روی یک آدرس کنترل شده توسط مهاجم میگردد.
تکنیک اکسپلویت (Exploitation)
برای تبدیل این نقص به اجرای کد (RCE)، از پروتکل اختصاصی Canon به نام BJNP استفاده شد. ویژگیهای این پروتکل عبارتند از:
- امکان تخصیص بافرهای بزرگ در حافظه.
- آدرسهای قابل پیشبینی برای بافرهای تخصیص یافته.
- ماهیت RWX (Read-Write-Execute) حافظه دینامیک در این دستگاهها که اجازه اجرای کد در هر آدرسی را میدهد.
استراتژی نهایی شامل قرار دادن Shellcode در یک بافر BJNP و سپس دستکاری لیست آزاد حافظه (Free List) بود تا یک شیء سیستمی حاوی اشارهگر تابع (Function Pointer) در همان مکان جایگزین شود. با بازنویسی این اشارهگر به آدرس Shellcode، مهاجم توانست کنترل کامل جریان اجرای برنامه را به دست بگیرد.