Heise.de Kernel ab 5.1 verwundbar (wenn bereits angemeldet)

Solche Artikel liebe ich ja. Versteht mich bitte nicht falsch, es ist ja gut und richtig, dass Medien wie heise.de über derartige Sicherheitslücken berichten. Die Art und Weise, in der dies geschieht, ist allerdings mehr als fragwürdig. Schauen wir uns nur einmal den folgenden Absatz an.

Der Fehler resultiert aus einem Integer-Underflow in den File-System-Kontext-Funktionen. Die Begrenzungsprüfung if (len > PAGE_SIZE - 2 - size); schlägt nicht immer an. Bei einem Wert von size größer oder gleich 4095 liefert die Berechnung einen Wert kleiner 0 und das ist bei einer vorzeichenlosen Variablen wieder ein sehr großer Wert und allemal größer als len. Deshalb könne ein Angreifer beliebig Daten außerhalb der Grenzen schreiben. Der Fix ist übrigens einfach. Die Überprüfung von

size + len + 2 > PAGE_SIZE

vermeidet den Underflow.

Jetzt lasst uns doch mal ehrlich sein: Welcher normalsterbliche Leser soll das verstehen? Auch wenn ich mich hiermit nun als Unwissender oute, den Kern des Problems habe ich nicht erfassen können; und ich kann mir nun wirklich nicht vorstellen, dass es nur mir so ergeht.

Programmierer kann verstehen, wenn er C/C++ gut kennt. :slightly_smiling_face:


Ich wusste, das Problem ist C/C++, da es kein Schutz vor Speicherzugriffsfehler hat und auch zu Sicherheitslücken durch falsche oder versehentliche Programmierung führen kann.

Ich empfehle unfähige C-Programmierern , Rust zu benutzen. Vergiss C/C++.
Rust soll Entwicklern von Systemen/Treibern helfen, Speicherfehler zu reduzieren und ist sicherer als C/C++, insbesondere bei der Behandlung von Speicherfehlern.


Rust ist bei verschiedene Benchmarks ähnlich schnell wie C/C++.

1 Like

Schonmal ein guter Vorschlag, aber bis der Linux Kernel komplett auf Rust läuft wird es noch ein Weilchen dauern :wink:

Wenn ein Programmierer das nicht versteht, sollte er daran denken den Beruf zu wechseln. :man_shrugging:

Man kann den GCC so scharf einstellen, dass er solche Stellen meldet (Warning), dann muss man aber auch bereit sein “false positives” von Hand zu überprüfen und mit einem cast zu entschärfen :wink:
Ich hab das vor kurzem bei einem älteren(12 Jahre) Projekt mit X.xxx Zeilen Code nachträglich eingeführt.

2 Likes

In diesem Fall ist die eigentliche Ursache kein Speicherzugriffsfehler sondern eine unsaubere Rechenoperation. Die Folge ist dann ein Speicherzugriffsfehler. Es ist ja schön wenn die Folge abgefangen wird. (wie bei Rust) :wink:
Aber die Rechenoperation liefert trotzdem ein falsches Ergebnis. Solche Rechenfehler kriegt man in jeder Sprache hin, die einen automatischen Overflow macht. Ausser in C passiert das auch in Java, Forth, Lua, Bash, Basic, …

4 Likes

Java gilt als speichersicher, weil Java-Runtime-Fehlererkennung Array-Grenzen und Pointer-Dereferenzen prüfen kann. Normalerweise soll es Prozess beim Overflow Error automatisch sofort beenden.


https://alexgaynor.net/2019/apr/21/modern-c++-wont-save-us/

PDF: Vulnerabilities due to memory unsafety :point_left:

Er wirft keine Exception in Java wenn du bei einem primitiven Datentypen über die Grenze gehst.

Sowas geht:

public static void main(String[] args) {
        int x = Integer.MAX_VALUE + 1;
        System.out.println(x); 
    }

Ergebnis: -2147483648

1 Like

Viele Java-Programmierern würden die Grenze von primitiven Datentypen wissen, wenn Java einfach wäre, also geringere Wahrscheinlichkeit von Versehen. Bei C/C++ ist die Wahrscheinlichkeit der unbeabsichtigte Programmierung höher als andere Programmiersprache.

Die Heise Medien richten sich an eine Zielgruppe mit gewissem Sachverstand. Zeitschriften wie c’t oder i’X veröffentlichen regelmässig Artikel die für Experten gedacht sind. Auch heise online veröffentlicht regelmässig Artikel die Expertenwissen voraussetzen. Wer solche Artikel nicht versteht kann auf andere Medien ausweichen: Computerbild, Chip. PC Magazin, etc.

Dieser Tiefgang in den Heise Artikeln wird von vielen Leser geschätzt. Ich denke das das sogar ein entscheidender Faktor ist für den Erfolg der Heise Medien.

Und die “Art und Weise” wie Heise das macht ist keineswegs “fragwürdig”. Ich kann nur sagen: Danke Heise!

3 Likes

Du und ich sind vermutlich nicht Zielgruppe. Ist nichts verwerfliches dran. :grimacing:

1 Like

Allein deswegen hab ich seit 1986 ein Abo der c´t

1 Like

Das ist zwar richtig. Aber auch in Java kann man (aus Versehen) CODE schreiben, den der Garbage collector trotzdem nicht aufräumt. In anderen Sprachen nennt man sowas ein memory leak.

Und Pufferüberläufe kann JAVA auch :wink: weil Teile in C geschrieben sind, und aus Java Parameter übergeben werden (JNI), die manchmal eben nicht ausreichend gecheckt werden :rofl: bevor es in C weitergeht.

Sichere Programmierung muß bei den Bibliotheken beginnen :sunglasses:

Dass auch heise online regelmäßig Artikel veröffentlicht, die sich in erster Linie an ein Expertenpublikum richten, daran ist prinzipiell nichts auszusetzen. Fragwürdig nenne ich die Vorgehensweise deshalb, weil auch nichts dagegen spräche, in solchen Artikeln auch die komplizierteren Sachverhalte einem breiteren Publikum näherzubringen. Das hat nun weniger mit fehlendem Sachverstand aufseiten der Leser zu tun, sondern eher mit einer eingeschränkten Beherrschung des journalistischen Handwerks.