بررسی آسیبپذیری Heap Overflow و اجرای کد از راه دور در Llama.cppدر سالهای اخیر، ابزارهای اجرای مدلهای زبانی بهشدت فراگیر شدهاند و پروژههای متنباز مانند llama.cpp به کاربران اجازه میدهند مدلهای پیشرفته را بهصورت محلی و بدون نیاز به سختافزار قدرتمند اجرا کنند. اما محبوبیت این ابزارها باعث شده است که سطح حمله (Attack Surface) نیز گسترش یابد.
در یک پژوهش عمیق، Patrick Peng موفق شد آسیبپذیری خطرناکی را در بخش
RPC Server کتابخانه llama.cpp کشف کند که میتواند منجر به
اجرای کد از راه دور (RCE) شود. این آسیبپذیری در تابع ggml_backend_cpu_buffer_cpy_tensor() نهفته است که برای کپی دادههای Tensor در حافظه استفاده میشود.
هرچند کد پروژه شامل بررسیهای مرزی، assertهای متعددی و مکانیزمهای دفاعی سطح بالا است، اما نویسنده موفق شد با دستکاری هوشمندانه پارامترهای ne[] و nb[] که ابعاد و اندازه دادههای Tensor را کنترل میکنند، یک
Heap Overflow ایجاد کند. این نوع از overflow برخلاف buffer overflow کلاسیک، حافظه Heap را هدف قرار میدهد و میتواند ساختارهای مجاور حافظه را تغییر دهد.
اما بهرهبرداری از این نقص آسان نبود. به گفته نویسنده، طبیعت پیچیده ساختار حافظه و حفاظتهای موجود، نیازمند یک رویکرد ترکیبی بود. در نهایت او موفق شد با استفاده از تکنیکی موسوم به
NullPointerNoException، اشارهگرهای داخلی را به گونهای تغییر دهد که بدون ایجاد crash، به لیک آدرسهای حیاتی مانند
libggml-base.so منجر شود. این لیک آدرسها گام اول در کنار زدن ASLR و آمادهسازی Memory Layout برای اجرای کد مخرب است.
یکی دیگر از چالشهای این حمله، نیاز به نوشتن جزئی (Partial-Write) روی بخشهای خاصی از حافظه و هماهنگی دقیق ساختارهای Heap بود که نشاندهنده سطح بالای تخصص موردنیاز برای چنین Exploit پیچیدهای است.
نتیجهگیری:این آسیبپذیری بار دیگر اهمیت ایمنسازی ابزارهای متنباز و ماژولهای مربوط به شبکه را نشان میدهد. فعال بودن RPC Server بدون احراز هویت و محدودیت، میتواند در صورت وجود ضعفهایی نظیر Heap Overflow، به سادگی کنترل کامل سیستم را در اختیار مهاجم قرار دهد. بهویژه در حوزه هوش مصنوعی که مدلها معمولاً روی سرورهای قدرتمند اجرا میشوند، چنین ضعفهایی میتوانند تبعات سنگینی داشته باشند.
#آکادمی_روزبه
مرکز تخصصی CISSP
https://retr0.blog/blog/llama-rpc-rce