Dezvoltatorii proiectului Grsecurity 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 în ramura sa master, 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 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
