Die Entwickler des Grsecurity-Projekts eine lehrreiche Geschichte, die zeigt, wie das achtlose Ignorieren von Compilerwarnungen zu Schwachstellen im Code führen kann. Ende Mai wurde für den Linux-Kernel ein Patch für einen neuen Exploit-Vektor der Spectre-Schwachstelle über den Systemaufruf ptrace vorgeschlagen.
Während der Testphase des Patches bemerkten die Entwickler, dass der Compiler bei der Kompilierung eine Warnung über die Mischung von Code und Definitionen ausgab (die Struktur wurde nach dem Code definiert, der einer bestehenden Variable einen Wert zuweist):
int index = n;
if (n ptrace_bps[index];
Linus nahm in seinen master-Zweig auf, die Warnung beseitigte, indem er die Definition der Variablen in den if-Block verschob:
if (n ptrace_bps[index];
Im Juli wurde die Korrektur auch in die stabilen Kernel-Zweige 4.4, 4.9, 4.14, 4.19 und 5.2 portiert. Die Entwickler der stabilen Zweige stießen ebenfalls auf eine Warnung und statt zu überprüfen, ob sie bereits im Master-Zweig von Linus behoben wurde, haben sie eigenständig einen Fix implementiert. Das Problem ist, dass sie, ohne viel darüber nachzudenken, einfach sodass der Aufruf von array_index_nospec, der direkt zum Schutz vor der Sicherheitsanfälligkeit dient, nicht mehr bei der Definition der Struktur verwendet wurde und statt der Variablen „index“ immer die Variable „n“ verwendet wurde:
int index = n;
if (n ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);
Quelle: opennet.ru
