Vulnerabilitat a XFS que permet llegir dades del dispositiu de blocs en brut

S'ha descobert una vulnerabilitat (CVE-2021-4155) al codi del sistema de fitxers XFS que permet a un usuari local sense privilegis llegir dades de bloc no utilitzades directament des d'un dispositiu de bloc. Totes les versions principals del nucli Linux anteriors a la 5.16 que contenen el controlador XFS es veuen afectades per aquest problema. La correcció es va incloure a la versió 5.16, així com a les actualitzacions del nucli 5.15.14, 5.10.91, 5.4.171, 4.19.225, etc. L'estat de la generació d'actualitzacions amb l'eliminació del problema a les distribucions es pot fer un seguiment en aquestes pàgines: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch.

La vulnerabilitat és causada pel comportament incorrecte de dos ioctl (XFS_IOC_ALLOCSP) i ioctl (XFS_IOC_FREESP) específics de XFS, que són l'anàleg funcional de la trucada del sistema fallocate() a tot el nucli. Quan s'augmenta la mida d'un fitxer que no està alineat en blocs, els ioctls XFS_IOC_ALLOCSP/XFS_IOC_FREESP no restableixen els bytes de cua fins al límit del següent bloc. Així, a XFS amb una mida de bloc estàndard de 4096 bytes de cada bloc, un atacant pot llegir fins a 4095 bytes de les dades escrites anteriors. Aquestes àrees poden contenir dades de fitxers suprimits, fitxers desfragmentats i fitxers amb blocs desduplicats.

Podeu comprovar si hi ha un problema al vostre sistema amb un simple prototip d'explotació. Si, després d'executar la seqüència d'ordres proposada, és possible llegir el text de Shakespeare, aleshores el controlador FS és vulnerable. El muntatge inicial de la partició XFS per a la demostració requereix drets de superusuari.

Com que ioctl(XFS_IOC_ALLOCSP) i ioctl(XFS_IOC_FREESP) són gairebé idèntics en funcionalitat al fallocate(), i la seva única diferència és la fuga de dades, la seva presència és com una porta posterior. Malgrat la política general de no canviar les interfícies existents al nucli, a proposta de Linus, s'ha pres la decisió d'eliminar completament aquests ioctls en la següent versió.

Font: opennet.ru

Afegeix comentari