Blog / CVE-Erklärungen

CVE-2025-37858: Warum der Typ vor dem Shift erweitert werden muss

Ein Fehler in der Rechenbreite von JFS zeigt, warum eine 64-Bit-Zielvariable einen zuvor berechneten 32-Bit-Ausdruck nicht automatisch sicher macht.

Promotionsstudium in Informationssicherheit abgeschlossenUniversitäre Verteidigung bestanden · Abschließende Dissertationsverteidigung steht noch aus

Der Fehler: Die Breite des Zwischenausdrucks

CVE-2025-37858 betrifft die Größenberechnung von Allocation Groups in dbExtendFS() in fs/jfs/jfs_dmap.c. Die Berechnung verwendete 1 << l2agsize. Die Meldung des Linux-CVE-Teams beschreibt Shift-Werte über 31 auf 32-Bit-Systemen, die undefiniertes Verhalten und ungültige Gruppengrößen verursachen.

Die Feinheit liegt im Ausdruck selbst. Die Ganzzahlkonstante 1 wird nicht zu einem 64-Bit-Operanden, weil das Ergebnis anschließend in einem breiteren Feld gespeichert wird. Zuerst wird der Shift ausgewertet, danach erfolgt die Zuweisung. Wer nur den Zieltyp prüft, übersieht die Operation, die den Wert erzeugt.

Die Korrektur: Den Operanden vorher konvertieren

Die Korrektur konvertiert den linken Operanden vor dem Shift in s64. Damit erfolgt die Operation in der vorgesehenen Breite, passend zum Feld für die Gruppengröße. Der folgende Vergleich zeigt die in der Meldung dokumentierte Änderung.

Eine Konvertierung des bereits berechneten Ausdrucks käme zu spät. Dieselbe Unterscheidung ist bei Multiplikationen und Größenberechnungen für Speicherallokationen wichtig. Auch ein breiterer Zwischentyp benötigt eine passende Bereichsprüfung; eine Erweiterung allein macht nicht jede mögliche Eingabe sicher.

- bmp->db_agsize = 1 << l2agsize;
+ bmp->db_agsize = (s64)1 << l2agsize;

Arithmetik vom Operanden aus prüfen

Halten Sie für jede Größenberechnung die tatsächlichen Operandentypen, ihre Vorzeichen und den zulässigen Eingabebereich fest. Prüfen Sie den Ausdruck vor der Zuweisung, einschließlich Typanhebungen und expliziter Konvertierungen. Berücksichtigen Sie unterstützte 32- und 64-Bit-Konfigurationen, wenn diese die Typen oder das Build-Verhalten beeinflussen.

Grenzwerttests sollten Werte um die vorgesehene Grenze prüfen und die resultierende Größe oder Ablehnung bestätigen. Sanitizer und statische Analyse können unterstützen. Der Prüfer muss die Arithmetik dennoch mit den Voraussetzungen der nächsten Operation verbinden.

Auswirkungen und Grenzen der Aussage

Die öffentliche Meldung beschreibt mögliche Dateisystembeschädigung und Kernel-Abstürze durch ungültige Gruppengrößen. Sie belegt nicht die Auswirkungen eines ähnlich aussehenden Ausdrucks in Ihrer Anwendung; dafür muss das Ergebnis bis zu seinen Nutzern verfolgt werden.

Dieses Prüfmuster hilft bei nativen Anwendungen, die Längen, Offsets, Puffer und nicht vertrauenswürdige Dateimetadaten verarbeiten. Ein abgegrenztes Security Code-Review kann die Berechnung und die davon gesteuerten Speicher- oder Dateisystemoperationen untersuchen. Für eingesetzte Linux-Pakete geben der aktuelle CVE-Eintrag und die Hinweise des Distributors Auskunft über den Korrekturstatus.

Quellen

Schwachstelleneintrag

CVE-2025-37858

Diese Art von Prüfung besprechen

Leistungen
Alle Artikel