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:
Turbo Linux