رفع راش منجر به رفع ناقص آسیب‌پذیری Spectre در هسته لینوکس شد.

توسعه دهندگان پروژه Grsecurity به اشتراک گذاشته شده است یک داستان هشدار دهنده که نشان می دهد چگونه حذف بی دقت هشدارهای کامپایلر می تواند منجر به آسیب پذیری در کد شود. در پایان ماه می، برای هسته لینوکس، اصلاحی برای بردار جدید بهره برداری از آسیب پذیری Spectre از طریق فراخوانی سیستم ptrace پیشنهاد شد.

در فرآیند آزمایش پچ، توسعه دهندگان متوجه شدند که هنگام ساختن، کامپایلر هشداری در مورد ترکیب کد و تعاریف نمایش می دهد (ساختار پس از کد با اختصاص یک مقدار به یک متغیر موجود تعریف شده است):

int index = n;
if (n < HBP_NUM) { index = array_index_nospec(index, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[index];

لینوس قبول کرد تصحیح به شعبه استاد شما، خلاص شدن از از اخطار با قرار دادن تعریف متغیر در یک بلوک if:

if (n < HBP_NUM) { int index = array_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[index];

در ماه جولای، اصلاح به شاخه‌های هسته پایدار 4.4، 4.9، 4.14، 4.19 و 5.2 نیز منتقل شد. نگهدارنده های پایدار نیز با این هشدار مواجه شدند و به جای اینکه بررسی کنند که آیا قبلاً در شاخه اصلی لینوس ثابت شده است یا خیر، خودشان آن را وصله کردند. مشکل این است که آنها، بدون فکر زیاد، فقط نقل مکان کرد تعریف ساختار به بالا، به طوری که فراخوانی به array_index_nospec که مستقیماً محافظت در برابر آسیب پذیری را فراهم می کند، دیگر در تعریف ساختار استفاده نمی شود و به جای متغیر "index" همیشه از متغیر "n" استفاده می شود:

int index = n;
if (n < HBP_NUM ){ struct perf_event *bp = thread->ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);

منبع: opennet.ru

اضافه کردن نظر