В ядре Linux устранена следующая уязвимость:
nfsd: инициализировать Stateid копирования-уведомления перед публикацией
nfsd4_copy_notify() завершил инициализацию состояния cpntf после
nfs4_alloc_init_cpntf_state() уже связал его с
s2s_cp_stateids IDR и родительский sc_cp_list с cs_count == 1 (
ссылка на членство) и ни один из них не удерживается для вызывающего абонента. Гонки
OFFLOAD_CANCEL (созданный cl_id == nn->s2s_cp_cl_id плюс угадываемый
so_id) может достичь метода Manage_cpntf_state() и освободить запись, повернув
последующее чтение cpn_cnr_stateid вызывающего абонента и cp_p_stateid/cp_p_clid
записывает в использование после освобождения. Идентификатор клиента-владельца также был записан только
после публикации, поэтому он не мог проверить право собственности в этом окне.
Запишите cp_p_stateid и cp_p_clid внутри nfs4_alloc_init_cpntf_state().
прежде чем nfs4_init_cp_state() опубликует запись и вернет ее с помощью
дополнительная ссылка. Вызывающий считывает идентификатор состояния по этой ссылке и
удаляет его с помощью nfs4_put_cpntf_state(); из-за поздней ошибки прачечная самообслуживания
пожинает запись.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: nfsd: initialize copy-notify stateid before publishing it nfsd4_copy_notify() finished initializing the cpntf state after nfs4_alloc_init_cpntf_state() had already linked it into the s2s_cp_stateids IDR and the parent's sc_cp_list, with cs_count == 1 (the membership reference) and none held for the caller. A racing OFFLOAD_CANCEL (crafted cl_id == nn->s2s_cp_cl_id plus the guessable so_id) could reach manage_cpntf_state() and free the entry, turning the caller's subsequent cpn_cnr_stateid read and cp_p_stateid/cp_p_clid writes into use-after-free. The owning clientid was also only recorded after publication, so it could not gate an ownership check in that window. Record cp_p_stateid and cp_p_clid inside nfs4_alloc_init_cpntf_state() before nfs4_init_cp_state() publishes the entry, and return it with an extra reference. The caller reads the stateid under that reference and drops it with nfs4_put_cpntf_state(); on a late error the laundromat reaps the entry.
Характеристики атаки
Последствия
Строка CVSS v3.1