Les développeurs du projet Grsecurity partagent une histoire instructive qui illustre comment une suppression imprudente des avertissements du compilateur peut mener à des vulnérabilités dans le code. À la fin mai, un correctif a été proposé pour le noyau Linux afin de remédier à un nouveau vecteur d'exploitation de la vulnérabilité Spectre via un appel système ptrace.
Lors des tests du correctif, les développeurs ont remarqué qu'en compilant, le compilateur affichait un avertissement concernant le mélange de code et de définitions (la structure ayant été définie après le code assignant une valeur à une variable existante) :
int index = n;
if (n ptrace_bps[index];
Linus a accepté dans sa branche master, de l'avertissement en déplaçant la définition de la variable dans le bloc if :
if (n ptrace_bps[index];
En juillet, le correctif a également été porté vers les branches stables des noyaux 4.4, 4.9, 4.14, 4.19 et 5.2. Les mainteneurs des branches stables ont également rencontré l'avertissement et au lieu de vérifier s'il avait déjà été corrigé dans la branche master de Linus, ils ont apporté leur propre correctif. Le problème est qu'ils n'ont pas réfléchi et ont simplement la définition de la structure vers le haut, de sorte que l'appel à array_index_nospec, qui assurait directement la protection contre la vulnérabilité, n'était plus utilisé lors de la définition de la structure, et au lieu de la variable "index", c'était toujours la variable "n" qui était utilisée :
int index = n;
if (n ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);
Source : opennet.ru
