CVE-2024-50301 in Linux
Riassunto
di VulDB • 19/06/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
security/keys: correzione di un accesso out-of-bounds su slab in key_task_permission
KASAN segnala una lettura 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 Lettura di dimensione 4 all'indirizzo ffff88813c3ab618 da parte del task stress-ng/4362
CPU: 2 PID: 4362 Comm: stress-ng Not tainted 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
Questo problema è stato segnalato anche da syzbot.
Può essere riprodotto seguendo questi passaggi (maggiori dettagli [1]):
1. Ottenere più di 32 input con hash simili, che terminano con il pattern '0xxxxxxxe6'. 2. Riavviare e aggiungere le chiavi ottenute al passaggio 1.
Il programma di riproduzione dimostra come si verifica questo problema: 1. Nella funzione search_nested_keyrings, quando si itera attraverso gli slot in un nodo (sotto tag ascend_to_node), se il puntatore allo slot è meta e node->back_pointer != NULL (il che indica una radice), si procede a descend_to_node. Tuttavia, esiste un'eccezione. Se il nodo è la radice, e uno degli slot punta a una scorciatoia (shortcut), questa verrà trattata come un keyring. 2. Se il puntatore ptr è un keyring è deciso dalla funzione keyring_ptr_is_keyring. Tuttavia, KEYRING_PTR_SUBTYPE è 0x2UL, lo stesso valore di ASSOC_ARRAY_PTR_SUBTYPE_MASK. 3. Quando vengono aggiunte 32 chiavi con hash simili all'albero, la ROOT contiene chiavi con hash non simili (ad esempio slot 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31). 4. Infine, si forma l'albero come mostrato di seguito, dove lo slot 6 punta a una scorciatoia.
NODE A +------>+---+ ROOT | | 0 | xxe6 +---+ | +---+ xxxx | 0 | shortcut : : xxe6 +---+ | +---+ xxe6 : : | | | xxe6 +---+ | +---+ | 6 |---+ : : xxe6 +---+ +---+ xxe6 : : | f | xxe6 +---+ +---+ xxe6 | f | +---+
4. Come menzionato sopra, se uno slot (slot 6) della radice punta a una scorciatoia, può essere erroneamente trasferito a un key*, portando a una lettura out-of-bounds.
Per risolvere questo problema, si dovrebbe saltare a descend_to_node se il ptr è una scorciatoia, indipendentemente dal fatto che il nodo sia la radice o meno.
[1] https://lore.kernel.org/linux-kernel/[email protected]/
[jarkko: ha modificato leggermente il messaggio di commit per includere un tag
di chiusura appropriato.]
If you want to get best quality of vulnerability data, you may have to visit VulDB.