سه نقص امنیتی در سیستم اجرای کد آنلاین Judge0 شناسایی شده است که میتوانند برای اجرای کد در سیستم هدف مورد سوء استفاده قرار گیرند. این سه آسیب پذیری بحرانی (CVE-2024-28185، CVE-2024-28189 و CVE-2024-29021)، برای مهاجمی که دارای سطح دسترسی کافی است، امکان خروج از سندباکس[1] و دریافت مجوزهای root ماشین میزبان را فراهم میآورند.
Judge0 به منظور اجرای کد دلخواه در یک سندباکس اَمن مورد استفاده قرار میگیرد. این سرویس، برای ساخت برنامههایی کاربرد دارد که مستلزم ویژگیهای اجرای کد آنلاین مانند ارزیابی داوطلبان، آموزش الکترونیکی، ویرایشگرهای کد آنلاین و IDE میباشند.
Judge0 توسط 23 مشتری از جمله AlgoDaily، CodeChum و PYnative استفاده میشود. این پروژه تا به امروز 412 بار در GitHub فورک شده است.
آسیب پذیری های مذکور، ریشه در یک اسکریپت Ruby به نام ” isolate_job.rb” دارند که وظیفه تنظیم سندباکس، اجرای کد و ذخیره نتایج اجرا را به انجام میرساند. این اسکریپت، مستلزم ایجاد symlink در یک دایرکتوری است، به گونهای که امکان نوشتن بر روی یک فایل دلخواه را در سیستم بدون سندباکس فراهم آورد.
مهاجم میتواند از این نقص برای بازنویسی اسکریپتها بر روی سیستم و اجرای کد در خارج از سندباکس و بر روی کانتینر Docker، استفاده کند. مهاجم علاوه بر این، میتواند سطح دسترسی خود را در خارج از کانتینر Docker افزایش دهد. این شرایط به مهاجم اجازه میدهد تا سیستم فایلِ میزبانِ لینوکس را mount کرده و فایلها (به عنوان مثال، یک cron job مخرب) را از یک کانتینر در حال اجرا با سطح دسترسی بالا بازنویسی کند.
مهاجم اکنون، دارای دسترسی کامل به سیستم Judge0 از جمله پایگاه داده، شبکههای داخلی، وب سرور Judge0 و هر برنامه دیگری است که بر روی میزبان لینوکس اجرا میشود.
آسیب پذیری CVE-2024-29021 مربوط به پیکربندی میشود که اجازه میدهد با پایگاه داده PostgreSQL در Judge0 که در شبکه داخلی Docker قرار دارد، ارتباط برقرار کند. از این رو، مهاجم خواهد توانست SSRF را برای اتصال به پایگاه داده و تغییر نوع داده ستون ها و در نهایت اجرای command injection، مورد استفاده قرار دهد.
این سه آسیب پذیری، هجدهم آوریل 2024 در نسخه 1.13.1، پچ شدند. توصیه میشود کاربران Judge0 سرویس خود را به منظور کاهش تهدیدات احتمالی، به آخرین نسخه بهروزرسانی کنند.
[1] Sandbox Escape