Kiraka kisichozingatiwa kilisababisha kutokamilika kwa urekebishaji wa hatari ya Specter kwenye kernel ya Linux.

Waendelezaji wa mradi wa Grsecurity pamoja hadithi ya tahadhari inayoonyesha jinsi uondoaji usiofikiriwa wa maonyo ya wakusanyaji unaweza kusababisha udhaifu katika msimbo. Mwishoni mwa Mei, marekebisho yalipendekezwa kwa kernel ya Linux kwa vekta mpya ya unyonyaji wa hatari ya Specter kupitia simu ya mfumo wa ptrace.

Wakati wa kujaribu kiraka, watengenezaji waligundua kuwa wakati wa kujenga, mkusanyaji anaonyesha onyo juu ya kuchanganya msimbo na ufafanuzi (muundo ulifafanuliwa baada ya nambari, ukitoa thamani kwa utofauti uliopo):

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

Linus alikubali marekebisho kwa tawi lako kuu, baada ya kujiondoa kutoka kwa onyo kwa kuhamisha ufafanuzi wa kutofautisha hadi if block:

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

Mnamo Julai, urekebishaji pia uliwekwa kwenye matawi ya kernel 4.4, 4.9, 4.14, 4.19 na 5.2. Watunzaji wa matawi thabiti pia walikumbana na onyo hilo na, badala ya kuangalia ili kuona ikiwa tayari lilikuwa limewekwa katika tawi kuu la Linus, walirekebisha wenyewe. Shida ni kwamba bila kufikiria juu yake, wao tu wakiongozwa kufafanua muundo juu, ili simu ya array_index_nospec, ambayo hutoa ulinzi moja kwa moja dhidi ya hatari, haitumiki tena wakati wa kufafanua muundo, na badala ya "index" ya kutofautisha, kutofautisha "n" hutumiwa kila wakati:

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

Chanzo: opennet.ru

Kuongeza maoni