Falla en Snapd otorga root a atacantes en sistemas Linux

Una vulnerabilidad que afecta a Snapd, un paquete instalado de forma predeterminada en Ubuntu y utilizado por otras distribuciones de Linux como Debian, OpenSUSE, Arch Linux, Fedora y Solus, puede permitir que un atacante local obtenga privilegios de root y por ende, control total del sistema.

Snapd

Snapd es un servicio utilizado para entregar, actualizar y administrar aplicaciones (en forma de paquetes instantáneos) en distribuciones de Linux. Es un servicio que se instala automáticamente en Ubuntu y se ejecuta en el contexto del root. Snapd se está convirtiendo en un componente vital del sistema operativo Ubuntu, particularmente en los giros más ágiles como “Snappy Ubuntu Core” para la nube y el IoT.

El ecosistema Snap incluye una “snapd store”, donde los desarrolladores pueden contribuir y mantener paquetes listos para usar.

Desafortunadamente, ya ha habido intentos exitosos de introducir códigos maliciosos en algunos de esos paquetes.

La vulnerabilidad: Dirty Sock: CVE-2019-7304

El investigador Chris Moberly descubrió la vulnerabilidad, apodada “Dirty Sock” (Calcetín Sucio, en castellano) y lo reveló en privado a Canonical, el fabricante de Ubuntu, a fines de enero, que afecta a las versiones de Snapd 2.28 a 2.37.

Es una vulnerabilidad de escalada de privilegios local, lo que significa que los atacantes primero deben obtener acceso remoto a la máquina de destino y solo entonces pueden usarla para elevar sus privilegios.

Moberly detalla el ataque en una publicación muy completa, pero nos entrega un TL;DR:

“Snapd sirve una API REST adjunta a un socket local UNIX_AF. El control de acceso a las funciones restringidas de la API se logra consultando el UID asociado con cualquier conexión hecha a ese socket. Los datos de pares de socket controlados por el usuario pueden verse afectados para sobrescribir una variable UID durante el análisis de cadenas en un for-loop. Esto permite a cualquier usuario acceder a cualquier función API. Con acceso a la API, existen múltiples métodos para obtener la raíz “.

En la publicación también hace públicos dos exploits PoC para ello, que permiten que la falla sea explotada en sistemas con conexión a Internet y un servicio SSH, y en aquellos que no lo están (a través de snaps maliciosos, de carga lateral).

Y ahora qué?

Moberly destaca la eficiente respuesta del equipo de Snapd, quienes trabajaron junto a Chris para solucionar el problema apenas Moberly hizo el disclosure. La falla se solucionó en la versión 2.37.1 de Snapd y posteriores, y Ubuntu y el resto de las distribuciones de Linux mencionadas anteriormente ya han implementado una versión arreglada del paquete. La solución, entonces, es parchar de inmediato!