CVE-2024-50301 in Linux
Zusammenfassung
von VulDB • 23.05.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
security/keys: Behebung eines slab-out-of-bounds-Fehlers in key_task_permission
KASAN meldet einen Lesezugriff außerhalb des gültigen Bereichs (out-of-bounds): BUG: KASAN: slab-out-of-bounds in __kuid_val include/linux/uidgid.h:36 BUG: KASAN: slab-out-of-bounds in uid_eq include/linux/uidgid.h:63 [inline]
BUG: KASAN: slab-out-of-bounds in key_task_permission+0x394/0x410 security/keys/permission.c:54 Lesezugriff der Größe 4 an Adresse ffff88813c3ab618 durch Task stress-ng/4362
CPU: 2 PID: 4362 Comm: stress-ng Nicht getaintet 5.10.0-14930-gafbffd6c3ede #15 Call Trace: __dump_stack lib/dump_stack.c:82 [inline]
dump_stack+0x107/0x167 lib/dump_stack.c:123 print_address_description.constprop.0+0x19/0x170 mm/kasan/report.c:400 __kasan_report.cold+0x6c/0x84 mm/kasan/report.c:560 kasan_report+0x3a/0x50 mm/kasan/report.c:585 __kuid_val include/linux/uidgid.h:36 [inline]
uid_eq include/linux/uidgid.h:63 [inline]
key_task_permission+0x394/0x410 security/keys/permission.c:54 search_nested_keyrings+0x90e/0xe90 security/keys/keyring.c:793
Dieses Problem wurde ebenfalls von syzbot gemeldet.
Es kann durch die folgenden Schritte reproduziert werden (weitere Details [1]):
1. Beschaffen Sie mehr als 32 Eingaben, die ähnliche Hashes aufweisen, die mit dem Muster '0xxxxxxxe6' enden. 2. Starten Sie das System neu und fügen Sie die in Schritt 1 erhaltenen Schlüssel hinzu.
Der Reproducer zeigt, wie dieses Problem auftritt: 1. In der Funktion search_nested_keyrings, wenn sie durch die Slots in einem Knoten (unterhalb von tag ascend_to_node) iteriert, und wenn der Slot-Zeiger meta ist und node->back_pointer != NULL (was bedeutet, dass es sich um eine Wurzel handelt), wird descend_to_node aufgerufen. Es gibt jedoch eine Ausnahme. Wenn node die Wurzel ist und einer der Slots auf einen Shortcut zeigt, wird dieser als Keyring behandelt. 2. Ob der ptr ein Keyring ist, wird durch die Funktion keyring_ptr_is_keyring entschieden. KEYRING_PTR_SUBTYPE ist jedoch 0x2UL, was demselben Wert wie ASSOC_ARRAY_PTR_SUBTYPE_MASK entspricht. 3. Wenn 32 Schlüssel mit ähnlichen Hashes zum Baum hinzugefügt werden, hat die ROOT Schlüssel mit nicht übereinstimmenden Bits, die mit '0xxx' enden. Wenn die Schlüssel mit '0xxx' hinzugefügt werden, wird der Baum wie folgt aufgebaut, wobei Slot 6 auf einen Shortcut zeigt:
NODE A +------>+---+ ROOT | | 0 | xxe6 +---+ | +---+ xxxx | 0 | shortcut : : xxe6 +---+ | +---+ xxe6 : : | | | xxe6 +---+ | +---+ | 6 |---+ : : xxe6 +---+ +---+ xxe6 : : | f | xxe6 +---+ +---+ xxe6 | f | +---+
4. Wie oben erwähnt, wenn ein Slot (Slot 6) der Wurzel auf einen Shortcut zeigt, kann er fälschlicherweise als Keyring* behandelt werden, was zu einem Lesezugriff außerhalb des gültigen Bereichs führt.
Um dieses Problem zu beheben, sollte man zu descend_to_node springen, wenn der Zeiger ein Shortcut ist, unabhängig davon, ob es sich um die Wurzel handelt oder nicht.
[1] https://lore.kernel.org/linux-kernel/[email protected]/
[jarkko: Die Commit-Nachricht wurde leicht angepasst, um ein passendes closes-Tag zu enthalten.]
Once again VulDB remains the best source for vulnerability data.