Escalada de privilegios en función mremap del kernel de Linux

Se ha descubierto una vulnerabilidad en el la llamada de sistema mremap
que puede ser explotada por usuarios locales maliciosos para perpetrar
una escalada de privilegios.

La función mremap da la capacidad de cambiar el tamaño o mover áreas de

memoria virtual (VMAs) o parte de ellas. Una VMA típica suele ocupar al

menos una página de memoria (que tiene un tamaño de 4kB en la

arquitectura i386). Una comprobación incorrecta de tamaños descubierta

dentro del código de kernel do_mremap(), que realiza el remapeo de una

zona de memoria virtual puede llevar a la creación de una VMA de

longitud 0.

El problema se basa en el problema de mremap, al

remapear dos páginas dentro de una VMA, crea un agujero de memoria del

tamaño de una página pero un VMA adicional de dos. En el caso del

remapeo de una de tamaño 0, no se crea el agujero de VMA, pero se crea

un descriptor adicional también de tamaño 0. Un área de memoria virtual

maliciosa como esa puede desestabilizar las operaciones de otras rutinas

de manejo de memoria.

Ya que no se requieren privilegios

especiales para utilizar la llamada mremap, cualquier proceso puede

hacer uso de este problema para desestabilizar el subsistema de manejo

de memoria del kernel. La explotación con éxito de esta vulnerabilidad

puede permitir la escalada local de privilegios, incluyendo la ejecución

de código arbitrario con acceso a nivel kernel. Se tiene constancia de

la existencia de códigos de demostración de la vulnerabilidad que crean

shells con privilegios de root en sistemas vulnerables.

Demostrando agilidad a la hora de responder al problema, gran cantidad

de distribuciones Linux han publicado ya actualizaciones para corregir

este problema, entre las que se encuentran las siguientes:

Astaro

Conectiva

Debian

EnGarde

Fedora

Red Hat

SuSE

Turbo Linux