آخرین اخبار
همهٔ اخبار
اکسپلویت‌ها گزارش بحرانیت ۵/۱۰

دستیابی به اجرای کد در سطح سرور (Code Execution) در پایگاه داده PostgreSQL شرکت Snowflake از طریق زنجیره‌ای از آسیب‌پذیری‌ها

دستیابی به اجرای کد در سطح سرور (Code Execution) در پایگاه داده PostgreSQL شرکت Snowflake از طریق زنجیره‌ای از آسیب‌پذیری‌ها

پژوهشگران امنیتی نشان دادند که چگونه یک نقش (Role) با دسترسی محدود در پایگاه داده مدیریت‌شده PostgreSQL شرکت Snowflake، می‌تواند منجر به کنترل کامل سرور میزبان شود. این تحقیق نشان می‌دهد که چگونه ترکیب چندین قابلیت داخلی PostgreSQL می‌تواند محدودیت‌های امنیتی اعمال شده توسط ارائه‌دهنده سرویس ابری را دور بزند.

جزئیات زنجیره حمله

این زنجیره حمله از یک حساب غیر-superuser به نام snowflake_admin آغاز شد که دارای مجوز CREATEROLE بود. اگرچه این مجوز به تنهایی کنترل کامل پایگاه داده را فراهم نمی‌کند، اما پژوهشگران از آن برای ارتقای سطح دسترسی (Privilege Escalation) استفاده کردند:

  • گام اول: استفاده از CREATEROLE برای اعطای نقش‌های pg_read_all_data و pg_write_all_data به حساب اولیه.
  • گام دوم: دسترسی به کاتالوگ‌های سیستم و تغییر در افزونه pg_cron برای اجرای وظایف زمان‌بندی شده.
  • گام سوم: ایجاد یک تابع SECURITY DEFINER که با سطح دسترسی کاربر postgres (Superuser) اجرا می‌شود.

دور زدن محدودیت‌های سیستم‌عامل

پس از دستیابی به سطح دسترسی Superuser در پایگاه داده، پژوهشگران با استفاده از زبان داخلی PostgreSQL، نام توابع جدیدی را به توابع C موجود در نرم‌افزار سرور متصل (Bind) کردند. این کار امکان دسترسی مجدد به توابع خواندن و نوشتن فایل را که توسط Snowflake مسدود شده بود، فراهم کرد.

در نهایت، با استفاده از قابلیت Large-Object، پژوهشگران موفق شدند فایل پیکربندی را تغییر داده و دستور archive_command را دستکاری کنند. این امر منجر به اجرای دستورات سیستم‌عامل (OS Command Execution) با سطح دسترسی کاربر postgres شد.

وضعیت اصلاح و توصیه‌ها

شرکت Snowflake پیش از انتشار این گزارش، آسیب‌پذیری را در سمت سرور اصلاح کرده است و کاربران این سرویس نیازی به اقدام اضافی ندارند. با این حال، برای سازمان‌هایی که از پایگاه داده‌های PostgreSQL به صورت خود-مدیریت‌شده (Self-managed) استفاده می‌کنند، توصیه‌های زیر ارائه شده است:

  • مجوز CREATEROLE را به عنوان یک مجوز پرخطر در نظر گرفته و از حساب‌های اپلیکیشن حذف کنید.
  • وظایف pg_cron و توابع SECURITY DEFINER را به دقت بازرسی کنید.
  • دسترسی به ایجاد توابع داخلی یا توابع زبان C را محدود نمایید.
  • فایل‌های پیکربندی پایگاه داده را محافظت کرده و دسترسی‌های شبکه را محدود کنید.