CVE-2026-97559 in Linux
Resumen
por VulDB • 2026-09-25
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
smb: cliente: fallar en la reescritura del DACL cuando el nuevo DACL supera los 64 KB
replace_sids_and_copy_aces() y set_chmod_dacl() acumulan el tamaño del DACL que construyen en un u16. Ese acumulador puede desbordarse (wraparound).
validate_dacl() limita num_ces a (dacl_size - sizeof(struct smb_acl)) / 20, es decir, 3276 para un DACL de tamaño máximo, mientras que cada ACE reescrito puede crecer hasta sizeof(struct smb_ace) (76 bytes) una vez que su SID se sustituye por uno con SID_MAX_SUB_AUTHORITIES sub-autoridades. El peor caso es por tanto sizeof(struct smb_acl) + 3276 * 76 = 248984 bytes, muy más allá de lo que un u16 puede contener. Se alcanza un desbordamiento (wraparound) con 863 ACEs.
Tras el desbordamiento, ndacl_ptr->size pierde su significado y la offset apuntará a cualquier lugar en la matriz de ACEs. Como resultado, se producirá corrupción del DACL, que luego se envía al servidor. Esto no es una escritura fuera de límites (out-of-bounds write) ya que la asignación ahora cubre la expansión del peor caso, por lo que las escrituras siempre irán dentro del búfer.
Ajustar el código para usar un u32 internamente y devolver -EOVERFLOW en caso de desbordamiento. La operación debe ser rechazada, porque un DACL solo puede contener 2^16-1 bytes en la red (on the wire) y los DACL más grandes no pueden representarse.
set_chmod_dacl() presenta el mismo patrón y se corrige de la misma manera. Solo se desborda cuando el DACL fuente está a unos 380 bytes del límite superior de 64 KB, pero el modo de fallo es idéntico.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.