روشی برای دور زدن سیستمهای اجرای کد ایزوله در پایتون منتشر شده است، بر اساس استفاده از یک باگ شناختهشده که در پایتون 2.7 ظاهر شد، در سال 2012 شناسایی شد و هنوز در پایتون 3 اصلاح نشده است. این اشکال امکان استفاده از پیوندهای ویژه را میدهد. کد پایتون برای شروع دسترسی به حافظه از قبل آزاد شده (Use-After-Free) در پایتون. در ابتدا فرض بر این بود که این خطا یک تهدید امنیتی ایجاد نمی کند و تنها در موارد بسیار نادری که معمولاً به صورت مصنوعی ایجاد می شود، می تواند منجر به خاتمه غیرعادی فیلمنامه شود.
یک محقق امنیتی با نام مستعار kn32 به این مشکل علاقه مند شد و موفق شد یک اکسپلویت کاری آماده کند که فراخوانی هر فرمان سیستمی را بدون دسترسی مستقیم به روش هایی مانند os.system ممکن می کند. این اکسپلویت در پایتون خالص پیادهسازی میشود و بدون وارد کردن کتابخانههای خارجی و بدون نصب کنترلکننده «code.__new__» کار میکند. از قلاب ها فقط از “builtin.__id__” استفاده می شود که معمولاً منعی ندارد. از جنبه عملی، کد پیشنهادی می تواند برای دور زدن مکانیسم های جداسازی در سرویس ها و محیط های مختلف (به عنوان مثال، در محیط های یادگیری، پوسته های آنلاین، هندلرهای داخلی و غیره) استفاده شود که اجرای کد پایتون را امکان پذیر می کند، اما محدودیت ها را محدود می کند. تماس های موجود است و به روش های تماس مانند os.system اجازه نمی دهد.
کد پیشنهادی آنالوگ فراخوانی os.system است که با بهرهبرداری از یک آسیبپذیری در CPython کار میکند. این اکسپلویت با تمام نسخه های پایتون 3 روی سیستم هایی با معماری x86-64 کار می کند و عملکرد پایدار در اوبونتو 22.04 را نشان می دهد، حتی زمانی که حالت های حفاظتی PIE، RELRO و CET فعال هستند. کار به کسب اطلاعات از کد پایتون در مورد آدرس یکی از توابع در کد CPython قابل اجرا ختم می شود. بر اساس این آدرس، آدرس پایه CPython در حافظه و آدرس تابع system() در نمونه libc بارگذاری شده در حافظه محاسبه می شود. در پایان، انتقال مستقیم به یک آدرس سیستم خاص با جایگزینی نشانگر آرگومان اول به خط "/bin/sh" آغاز می شود.
منبع: opennet.ru