باگ سادهای که سندباکس اپل رو شکست
خلاصهٔ کاملتر
نویسنده تو این پست از یه فرار از سندباکس تو پلتفرمهای اپل میگه که خودش اواخر سال گذشته پیداش کرده و گزارشش داده. باگ با شناسهٔ CVE-2026-20628 ثبت شده و فوریهٔ امسال تو نسخهٔ ۲۶.۳ روی همهٔ سیستمعاملهای اپل (و نسخههای قدیمیتری که همون روز آپدیت گرفتن) وصله شده. به گفتهٔ نویسنده، اکسپلویت قابلاتکا فقط روی macOS جواب میداد.
همهچی برمیگرده به چیزی به اسم spawn attributes؛ یعنی ویژگیهایی که موقع صدا زدن posix_spawn برای پروسهٔ فرزند تعیین میشن. اپل بین اینها چندتا ویژگی خصوصی هم داره، از جمله یکی که با posix_spawnattr_setmacpolicyinfo_np یه بلاب باینری رو به یه MAC policy مشخص پاس میده. خود Sandbox هم یه MAC policy داره و این بلاب رو قبول میکنه؛ مهمترین چیزی که توش تعریف میشه، اسم یه «پروفایل داخلی» سندباکسه.
پروفایلهای داخلی همون پروفایلهای سندباکسن که مستقیم داخل کرنلاکستنشن Sandbox ساخته شدن، نه بهشکل فایل متنی بیرونی. مکاواس فقط چندتا از اینها رو داره، ولی یکیشون یعنی no-network اجازهٔ دسترسی به پوشهٔ خانگی کاربر رو میده. نویسنده میگه با این سطح دسترسی فرار از سندباکس بیزحمته: کافیه یکی از فایلهای پیکربندی شل دستکاری بشه و بعد Terminal باز بشه.
زنجیرهٔ کامل خیلی سادهست. معمولاً پروسهٔ فرزندِ یه پروسهٔ سندباکسشده همون پروفایل والد رو به ارث میبره، اما نویسنده دیده اگه موقع spawn اسم یه پروفایل داخلی تو spawn attributes مشخص بشه، همون پروفایل جای پروفایل والد اعمال میشه. یعنی پروسهای که به پوشهٔ خانگی دسترسی نداشت، با اجرای یه فرزند و انتخاب no-network عملاً دسترسی بیشتری از والدش میگرفت. حتی لازم نبود باینری خاصی نوشته بشه؛ همون /bin/bash که هنوز با مکاواس میاد کافی بود.
وصله هم به همون سادگیه: از این به بعد پروسههایی که خودشون سندباکسشدهان نمیتونن برای فرزندشون پروفایل داخلی تعیین کنن، مگه اینکه انتایتلمنت com.apple.private.security.sandbox-spawnattrs رو داشته باشن. نویسنده میگه اپل میتونست سراغ راه پیچیدهتری بره و پروفایلها رو با هم مقایسه کنه، ولی به نظر خودش همین ردّ کردن یکدست انتخاب بهتریه. تأخیر تو انتشار این نوشته هم به خاطر باگ دومی بوده که اپل در نهایت اون رو آسیبپذیری امنیتی ندونست.
نکات کلیدی:
- شناسهٔ باگ CVE-2026-20628 بود و تو نسخهٔ ۲۶.۳ وصله شد
- ریشهٔ مشکل: تعیین اسم پروفایل داخلی سندباکس تو spawn attributes موقع ساختن پروسهٔ فرزند
- پروفایل no-network دسترسی به پوشهٔ خانگی میداد و همین برای فرار کافی بود
- اکسپلویت فقط روی macOS قابلاتکا بود
- بعد از وصله، پروسهٔ سندباکسشده بدون انتایتلمنت خاص نمیتونه پروفایل داخلی تعیین کنه




