O corecție imprudentă a dus la îndepărtarea incompletă a vulnerabilității Spectre din nucleul Linux

Dezvoltatorii proiectului Grsecurity au împărtășit o poveste educativă, care demonstrează cum eliminarea nepăsătoare a warnings-urilor compilatorului poate duce la apariția vulnerabilităților în cod. La sfârșitul lunii mai, pentru nucleul Linux a fost propus un patch pentru un nou vector de exploatare a vulnerabilității Spectre prin apelul de sistem ptrace.

În timpul testării patch-ului, dezvoltatorii au observat că la compilare compilatorul emite un warning pentru amestecarea codului cu definițiile (structura a fost definită după codul cu atribuirea unei valori unei variabile existente):

int index = n;
if (n ptrace_bps[index];

Linus a acceptat un fix în ramura sa master, eliminând warning-ul prin mutarea definiției variabilei în blocul if:

if (n ptrace_bps[index];

În iulie, patch-ul a fost de asemenea portat în ramurile stabile ale nucleului 4.4, 4.9, 4.14, 4.19 și 5.2. Întreținătorii ramurilor stabile s-au confruntat și ei cu warning-uri și în loc să verifice dacă acestea au fost deja rezolvate în ramura master a lui Linus, au realizat corecția manual. Problema este că, fără să se gândească prea mult, doar au mutat definiția structurii în sus, astfel încât apelul array_index_nospec, care asigurase protecția împotriva vulnerabilității, să nu mai fie folosit în definirea structurii, iar variabila „index” să fie mereu înlocuită cu variabila „n”:

int index = n;
if (n ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster