Esta semana, hablaremos de tres vulnerabilidades de alta gravedad que podrían permitir a los atacantes escalar privilegios si tienen acceso local al sistema.
Kernel Linux eBPF - Vulnerabilidad de validación de entrada inadecuada
CVE-2022-23222 describe una vulnerabilidad derivada del manejo de programas eBPF por parte del kernel. Un atacante que pueda ejecutar BPF puede bloquear el sistema o ejecutar código arbitrario en el contexto del kernel.
Causa raíz - El verificador BPF no restringe adecuadamente varios tipos de punteros *_OR_NULL, lo que permite que estos tipos hagan aritmética de punteros. Esto puede ser aprovechado para ejecutar código arbitrario o bloquear el sistema.
Nota importante: El BPF sin privilegios se desactiva por defecto en la mayoría de las distros. El fallo se introdujo en la versión 5.8.0 del kernel y se parcheó en la versión 5.14.17. La disponibilidad de exploits públicos es otra razón por la que CVE-2022-23222 supone un riesgo importante.
Mantenerse actualizado con el último k ernel ofrecido por su distribución de Linux es una forma sencilla de protegerse de esta vulnerabilidad. Si su Linode arranca un kernel proporcionado por nosotros, puede verificar que su Linode's Configuration Profile está configurado para arrancar el último kernel y luego reiniciar su Linode.
Si no puede actualizar a un kernel parcheado inmediatamente, también puede mitigar esta vulnerabilidad asegurándose de que unprivileged_bpf_disabled esté establecido en 1. El siguiente ejemplo aplicará una mitigación temporal hasta que su Linode se reinicie. Asegúrese de escribir esta configuración en un archivo de configuración sysctl y de arrancar de forma segura su Linode para persistir la mitigación.
# sysctl -w kernel.unprivileged_bpf_disabled=1
Fuente: Tr3e wang de SecCoder Security Lab
Escape del contenedor usando Desbordamiento de Heap en el Kernel de Linux
CVE-2022-0185 es un fallo de desbordamiento de heap que permite a un atacante con acceso a un usuario sin privilegios escalar sus privilegios a root. Para ello, el atacante debe tener una capacidad específica de Linux, CAP_SYS_ADMIN. Es importante tener en cuenta que cuando se utiliza Docker (u otros IRC) en un cluster de Kubernetes, el filtro seccomp se desactiva por defecto, por lo que esta vulnerabilidad podría ser explotada en esos casos.
Causa - El error es causado por un subdesbordamiento de enteros presente en fs/fs_context.c:legacy_parse_paramlo que provoca un error de cálculo de la longitud máxima válida. Esto conduce a un desbordamiento de enteros en el componente "File System Context".
El desbordamiento se produce cuando una operación de sustracción reduce un entero sin signo a un valor inferior a cero. Como los enteros sin signo no pueden representar números negativos, el cálculo resultante envuelve el valor máximo del entero. Cuando este desbordamiento se produce dentro de la función legacy_parse_param, falla una comprobación de tamaño, y el atacante puede escribir más allá de los límites de la memoria de 4kb asignada en el espacio del núcleo. Usando esta "escritura sin límites", el atacante puede cambiar valores en la memoria del kernel y, por ejemplo, añadir acceso a sí mismo a cualquier otro proceso que se ejecute en el mismo nodo.
El comando "capsh -print" puede ser usado en el contexto del usuario actual para listar las capacidades habilitadas. La explotación se basa en la capacidad CAP_SYS_ADMIN; sin embargo, el permiso sólo necesita ser concedido en el espacio de nombres actual. Un usuario sin privilegios puede usar unshare (CLONE_NEWNS | CLONE_NEWUSER) para entrar en un espacio de nombres con el permiso CAP_SYS_ADMIN y luego proceder a la explotación para hacer root en el sistema. Sin embargo, el uso de seccomp evitará que el atacante entre en el espacio de nombres con esa capacidad.
La vulnerabilidad fue introducida en el kernel 5.1 y parcheada en la 5.16.2. El código del exploit ya está apareciendo en línea. Aquí está el escrito original para obtener más detalles técnicos sobre los hallazgos.
Mantenerse actualizado con el último kernel ofrecido por su distribución de Linux es una forma sencilla de protegerse de esta vulnerabilidad. Si su Linode arranca un kernel proporcionado por nosotros, también puede verificar que su Linode's Configuration Profile está configurado para arrancar el último kernel y luego reiniciar su Linode. Si no puedes actualizar a un kernel parcheado inmediatamente, puedes aplicar estas mitigaciones:
- Minimizar el uso de contenedores privilegiados que tienen acceso a la capacidad CAP_SYS_ADMIN.
- En el caso de los contenedores sin privilegios, asegurarse de que existe un filtro seccomp que bloquea la llamada unshare reducirá el riesgo.
- Mitigue la explotación desde contenedores sin privilegios deshabilitando la capacidad del usuario de utilizar espacios de nombres de usuario a nivel de host. El siguiente ejemplo aplicará una mitigación temporal hasta que su Linode se reinicie. Asegúrese de escribir esta configuración en un archivo de configuración sysctl y de arrancar de forma segura su Linode para persistir la mitigación.
# sysctl -w kernel.unprivileged_userns_clone=0
PwnKit - Vulnerabilidad de escalada de privilegios local en Polkit
Polkit es un componente para controlar los privilegios en todo el sistema en los sistemas operativos tipo Unix. Proporciona una metodología sistemática para que los procesos sin privilegios se comuniquen con los procesos con privilegios. Además, alguien puede utilizar polkit para ejecutar comandos con privilegios elevados utilizando el comando pkexec (normalmente con root).
CVE-2021-4034 es una vulnerabilidad de corrupción de memoria en pkexec de polkit, un programa SUID-root instalado por defecto en la mayoría de las principales distribuciones de Linux. Una explotación exitosa permite a cualquier usuario sin privilegios obtener privilegios de root en la configuración por defecto fácilmente.
Causa raíz - El programa pkexec no valida correctamente el número de argumentos que se le pasan, lo que permite a alguien ejecutar código arbitrario como usuario con privilegios.
Todas las versiones de Polkit a partir de 2009 son vulnerables y explotables incluso si el propio demonio de polkit no se está ejecutando.
Mantenerse actualizado con el último kernel ofrecido por su distribución de Linux es una forma sencilla de protegerse de esta vulnerabilidad. Si su Linode arranca un kernel proporcionado por nosotros, puede verificar que su Linode's Configuration Profile está configurado para arrancar el último kernel y luego reiniciar su Linode. Si no puede actualizar a un kernel parcheado inmediatamente, puede mitigar temporalmente el problema eliminando el bit SUID de pkexec:
# chmod 0755 /usr/bin/pkexec
Comentarios