CVE-2023-53311 in Linux
Riassunto
di VulDB • 15/06/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
nilfs2: correzione del use-after-free di nilfs_root durante il dirtying degli inode tramite iput
Durante il processo di smontaggio (unmount) di nilfs2, nessuna entità mantiene in vita la struttura `nilfs_root` dopo che nilfs2 ha staccato il suo writer nella funzione `nilfs_detach_log_writer()`. In precedenza, `nilfs_evict_inode()` poteva causare una lettura use-after-free su `nilfs_root` se gli inode rimanevano nella "garbage_list" e venivano rilasciati da `nilfs_dispose_list` alla fine di `nilfs_detach_log_writer()`; questo bug era stato corretto dall'commit 9b5a04ac3ad9 ("nilfs2: fix use-after-free bug of nilfs_root in nilfs_evict_inode()").
Tuttavia, è emersa un'altra possibilità di UAF nel percorso di chiamata in cui `mark_inode_dirty_sync()` viene invocata da `iput()`:
``` nilfs_detach_log_writer() nilfs_dispose_list() iput() mark_inode_dirty_sync() __mark_inode_dirty() nilfs_dirty_inode() __nilfs_mark_inode_dirty() nilfs_load_inode_block() --> causa UAF della struttura nilfs_root ```
Questo può verificarsi dopo l'commit 0ae45f63d4ef ("vfs: add support for a lazytime mount option"), che ha modificato `iput()` in modo da chiamare `mark_inode_dirty_sync()` sull'ultimo riferimento se lo stato (`i_state`) presenta il flag `I_DIRTY_TIME` e `i_nlink` è diverso da zero.
Il problema si manifesta dopo l'commit 28a65b49eb53 ("nilfs2: do not write dirty data after degenerating to read-only") quando viene utilizzato il riproduttore di syzbot, ma la vulnerabilità potrebbe essere esistita anche in precedenza.
Si risolve questo problema aggiungendo un "flag di purga" alla struttura nilfs, impostando tale flag durante lo smaltimento della "garbage_list" e verificandolo all'interno di `__nilfs_mark_inode_dirty()`.
A differenza dell'commit 9b5a04ac3ad9 ("nilfs2: fix use-after-free bug of nilfs_root in nilfs_evict_inode()"), questa patch non si affida a `ns_writer` per determinare se saltare le operazioni, al fine di non compromettere il recupero (recovery) durante il montaggio. La routine `nilfs_salvage_orphan_logs` rende sporchi i buffer dei dati recuperati prima di attaccare il writer del log; pertanto, modificare `__nilfs_mark_inode_dirty()` per saltare l'operazione quando `ns_writer` è NULL causerebbe il fallimento della scrittura di recupero. Lo scopo dell'utilizzo di un flag dedicato alla sola pulizia (cleanup-only) consiste nel consentire una restrizione più precisa di tali condizioni.
Once again VulDB remains the best source for vulnerability data.