
Ein Problem in radareorg radare2 v.0.9.7 bis v.5.8.6 und behoben in v.5.8.8 ermöglicht es einem lokalen Angreifer, einen Denial-of-Service über die Funktion grub_sfs_read_extent zu verursachen.
Sherlock Fang, Vlad Tronciu, Ayam Babu
Ein Problem in radareorg radare2 v.0.9.7 bis v.5.8.6, behoben in v.5.8.8, ermöglicht es einem lokalen Angreifer, einen Denial-of-Service über die Funktion grub_sfs_read_extent zu verursachen.
Das Erstellen eines Payloads, der dazu führt, dass “treeblock = grub_malloc(data->blocksize);” auf NULL im Speicher zeigt, sodass, wenn der Wert von “treeblock” “tree = (struct grub_sfs_btree *) treeblock;” zugewiesen wird, “treeblock” ebenfalls auf NULL zeigt. Das Ausmaß der Ausnutzbarkeit hängt vom spezifischen Kontext ab, aber eine solche Nullzeiger-Dereferenzierungs-Schwachstelle würde einen Denial-of-Service des Programms verursachen, was die Gesamtleistung des Programms beeinträchtigt.
In der Funktion grub_sfs_read_extent existiert eine Sicherheitslücke aufgrund des Fehlens einer Überprüfung des Zustands von tree_block. Der nachfolgende Code verwendet tree_block, ohne zu überprüfen, ob er auf eine gültige Speicherzuweisung zeigt. Dies führt zur Dereferenzierung eines NULL-Zeigers, wenn der Baum den Wert von treeblock erhält, der in struct grub_sfs_btree* umgewandelt wird, und dann im Aufruf von grub_disk_read verwendet wird. Die Dereferenzierung eines NULL-Zeigers ist undefiniertes Verhalten in C und führt typischerweise zu einem Segmentierungsfehler oder Zugriffsverletzung, was zum Absturz des Programms führt.

Wir haben die Schwachstelle behoben, indem wir eine Überprüfung des Allokationsstatus von grub_malloc hinzugefügt haben, wie unten gezeigt.