یک تغییر اعمال شده توسط مایکروسافت نزدیک بود همه چیز را خراب کند، اما اینتل و ای ام دی به موقع وارد عمل شدند و اوضاع را نجات دادند. این تغییر مربوط به پیکربندی هستهای به نام ARCH_HAS_EXECMEM_ROX بود که امکان کش کردن حافظه اجرایی (EXECMEM) با دسترسی فقط خواندنی و اجرایی (ROX) را فراهم میکرد. این ویژگی برای بهبود عملکرد در نسخه ۶.۱۳ لینوکس برای پردازندههای ۶۴ بیتی AMD و Intel (x86_64/AMD64) اضافه شده بود.
متأسفانه این تغییر بدون تأیید رسمی (Ack) از سوی نگهدارنده هسته x86 اعمال شد و باعث شد یکپارچگی جریان کنترل (CFI) در این پردازندهها دچار مشکل شود.
پیتر زایلسترا از اینتل امروز درخواست کرد که این تغییرات مربوط به پشتیبانی از EXECMEM_ROX فوراً لغو شود چون هنوز کارهای زیادی باقی مانده تا این ویژگی آماده انتشار شود. او نوشت:
x86: غیرفعال کردن پشتیبانی از EXECMEM_ROX
تمام این ماجرای module_writable_address() حسابی فایل alternative.c را به هم ریخته، تازه باگهایی هم دارد — به خصوص بعضی از نسخههای CFI که باعث کرش و مشکل میشوند.
مایک روی اصلاح این مشکلات کار میکند، اما با توجه به وضعیت فعلی، این ویژگی آماده نیست.
فعلاً غیرفعالش کنیم و دوره بعد دوباره امتحان کنیم.
بورسیلاف پتکوف از AMD هم ناراحتی خود را ابراز کرد و نوشت:
خیلی جالب است که این تغییر بدون حتی یک تأیید از سوی نگهدارنده x86 اعمال شد، کلی چیز را خراب کرد و هنوز هم به جای بازگردانی، سر جایش مانده. لطفاً دیگر این کار را تکرار نکنیم.
برای کسانی که نمیدانند، فناوری اجرای کنترل جریان (Control-flow Enforcement Technology - CET) یک ویژگی امنیتی مهم است که شامل Shadow Stack و Indirect Branch Targeting (IBT) میشود. Shadow Stack از سیستم در برابر حملات Return Oriented Programming (ROP) محافظت میکند و IBT در برابر حملات Call Oriented Programming (COP) و Jump Oriented Programming (JOP) دفاع میکند.
CET این کار را با بررسی تطابق استک عادی برنامه با یک نسخه سخت افزاری ذخیره شده (Shadow Stack) انجام میدهد تا از صحت آدرسهای بازگشتی اطمینان حاصل کند. به زبان ساده، Shadow Stack جلوی بدافزارها را میگیرد که فرآیندهای نرم افزار قانونی را به دست بگیرند و با علامت گذاری نرم افزارهای مشکوک، از اجرای آنها جلوگیری میکند.