Gli sviluppatori del progetto Grsecurity una storia istruttiva che mostra come una rimozione poco ponderata dei warning del compilatore possa portare a vulnerabilità nel codice. A fine maggio è stata proposta una correzione per un nuovo vettore di sfruttamento della vulnerabilità Spectre tramite la system call ptrace.
Durante il test della patch, gli sviluppatori hanno notato che durante la compilazione il compilatore emetteva un warning riguardo alla mescolanza di codice e definizioni (la struttura era stata definita dopo il codice con l'assegnazione di un valore a una variabile esistente):
int index = n;
if (n ptrace_bps[index];
Linus ha accettato nel suo branch master, il warning spostando la definizione della variabile nel blocco if:
if (n ptrace_bps[index];
A luglio, la correzione è stata portata nelle versioni stabili del kernel 4.4, 4.9, 4.14, 4.19 e 5.2. Anche le versioni stabili hanno ricevuto un avviso e, invece di controllare se fosse stato già risolto nel ramo master di Linus, hanno apportato manualmente la correzione. Il problema è che, senza pensarci troppo, hanno semplicemente la definizione della struttura più in alto, in modo che la chiamata a array_index_nospec, che forniva direttamente protezione contro la vulnerabilità, ha smesso di essere utilizzata durante la definizione della struttura, e invece della variabile ‘index’ è stata sempre utilizzata la variabile ‘n’:
int index = n;
if (n ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);
Fonte: opennet.ru
