Descripción
En el Linux kernel se resolvió la siguiente vulnerabilidad: nfsd: corrección de una entrada IDR obsoleta en s2s_cp_stateids para COPY asíncrono En un COPY asíncrono, nfsd4_copy() llamaba a nfs4_init_copy_state() antes de dup_copy_fields(), por lo que el IDR s2s_cp_stateids apuntaba a &u->copy->cp_stateid, memoria del búfer COMPOUND por rqstp que la siguiente solicitud reutiliza. dup_copy_fields() copia solo el valor en async_copy, de modo que la entrada del IDR quedaba apuntando al búfer transitorio durante toda la copia en segundo plano. Cualquier recorrido del IDR desreferencia entonces memoria de solicitudes reutilizada: el laundromat lee cs_type desde ella y, si los bytes parecen un NFS4_COPYNOTIFY_STID expirado, continúa con refcount_dec()/idr_remove()/kfree() sobre datos basura; manage_cpntf_state() presenta la misma exposición mediante idr_find(). Se duplican primero los campos y luego se registra el stateid en el async_copy estable. result->cb_stateid no cambia.
Qué hacer
Revisa si usas el producto afectado y en qué versión, y aplica la actualización o la mitigación que indique el aviso del fabricante. CISA no ha confirmado que se esté explotando; si eso cambia, esta ficha pasa a «explotada» y te avisamos en el boletín.
Versiones afectadas
- Linux Afectadas: e0639dc5805a9d4faaa2c07ad98fa853b9529dd3 y anteriores a 745b2edfdd96b8738a94dee450adff4c7d026d5b · e0639dc5805a9d4faaa2c07ad98fa853b9529dd3 y anteriores a bdce362f49410b9def65d76c21f6259cd89696d8 · e0639dc5805a9d4faaa2c07ad98fa853b9529dd3 y anteriores a 7aa34ea78f74e6ef60c8112635a87fc43d57f6c9 · e0639dc5805a9d4faaa2c07ad98fa853b9529dd3 y anteriores a 9b4e5e9ba5ae13808b8a6d229d87c54611ba0e7a · e0639dc5805a9d4faaa2c07ad98fa853b9529dd3 y anteriores a 14b978e8d05ce018d0afbeb6611833ef91713a02 · e0639dc5805a9d4faaa2c07ad98fa853b9529dd3 y anteriores a d0beaee498e11880e72826026db0e9c9890fc114
- Linux Afectadas: 4.20 No afectadas: 6.1.191 · 6.6.160 · 6.12.111 · 6.18.50 · 7.2.4 · 7.3
Según el registro de la vulnerabilidad en CVE.org, tal como lo publicó el fabricante. Confirma tu versión exacta en el aviso del fabricante.
Referencias
- Referencia en git.kernel.orggit.kernel.org/stable/c/745b2edfdd96b8738a94dee450adff4c7d026d5b
- Referencia en git.kernel.orggit.kernel.org/stable/c/bdce362f49410b9def65d76c21f6259cd89696d8
- Referencia en git.kernel.orggit.kernel.org/stable/c/7aa34ea78f74e6ef60c8112635a87fc43d57f6c9
- Referencia en git.kernel.orggit.kernel.org/stable/c/9b4e5e9ba5ae13808b8a6d229d87c54611ba0e7a
- Referencia en git.kernel.orggit.kernel.org/stable/c/14b978e8d05ce018d0afbeb6611833ef91713a02
- Referencia en git.kernel.orggit.kernel.org/stable/c/d0beaee498e11880e72826026db0e9c9890fc114
Ver el texto original en inglés (CVE.org)
nfsd: fix stale s2s_cp_stateids IDR entry for async COPY
In the Linux kernel, the following vulnerability has been resolved: nfsd: fix stale s2s_cp_stateids IDR entry for async COPY For an async COPY, nfsd4_copy() called nfs4_init_copy_state() before dup_copy_fields(), so the s2s_cp_stateids IDR was pointed at &u->copy->cp_stateid -- memory in the per-rqstp COMPOUND buffer that is reused by the next request. dup_copy_fields() copies only the value into async_copy, so the IDR slot dangled at the transient buffer for the whole background copy. Any IDR walker then dereferences reused request memory: the laundromat reads cs_type from it and, if the bytes look like an expired NFS4_COPYNOTIFY_STID, follows into refcount_dec()/idr_remove()/kfree() on garbage; manage_cpntf_state() has the same exposure via idr_find(). Duplicate the fields first, then register the stateid on the stable async_copy. result->cb_stateid is unchanged.