Vulnerabilidades en el subsistema eBPF del kernel de Linux

Se identificó una vulnerabilidad (CVE-2021-29154) en el subsistema eBPF, que permite ejecutar controladores para rastrear, analizar el funcionamiento de los subsistemas y gestionar el tráfico, ejecutados dentro del kernel de Linux en una máquina virtual especial con JIT, que permite un usuario local para lograr la ejecución de su código a nivel del kernel. El problema aparece hasta la versión 5.11.12 (inclusive) y aún no se ha solucionado en distribuciones (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). La solución está disponible como parche.

Según los investigadores que identificaron la vulnerabilidad, pudieron desarrollar un prototipo funcional del exploit para sistemas x32 de 64 y 86 bits, que puede ser utilizado por un usuario sin privilegios. Sin embargo, Red Hat señala que la gravedad del problema depende de si el usuario puede acceder a la llamada al sistema eBPF. Por ejemplo, en RHEL y la mayoría de las otras distribuciones de Linux en la configuración predeterminada, la vulnerabilidad se puede explotar si BPF JIT está habilitado y el usuario tiene derechos CAP_SYS_ADMIN. Como solución alternativa, se recomienda desactivar BPF JIT usando el comando: echo 0 > /proc/sys/net/core/bpf_jit_enable

El problema se debe a un error al calcular el desplazamiento de las instrucciones de bifurcación durante el proceso de generación de código de máquina del compilador JIT. En particular, al generar instrucciones de bifurcación, no se tiene en cuenta que el desplazamiento puede cambiar después de pasar por la etapa de optimización. Esta falla se puede utilizar para generar código de máquina anómalo y ejecutarlo a nivel del kernel.

Cabe destacar que esta no es la única vulnerabilidad en el subsistema eBPF recientemente. A finales de marzo, se identificaron dos vulnerabilidades más en el kernel (CVE-2020-27170, CVE-2020-27171), lo que permite utilizar eBPF para eludir la protección contra las vulnerabilidades de clase Spectre, que permiten determinar el contenido de la memoria del kernel. como resultado de la creación de condiciones para la ejecución especulativa de determinadas operaciones. El ataque Spectre requiere la presencia de una determinada secuencia de comandos en código privilegiado que conduce a la ejecución especulativa de instrucciones. En eBPF, se han encontrado varias formas de generar dichas instrucciones mediante manipulaciones con programas BPF transmitidos para su ejecución.

La vulnerabilidad CVE-2020-27170 se debe a la manipulación del puntero en el verificador BPF que provoca que operaciones especulativas accedan a un área fuera de los límites del búfer. La vulnerabilidad CVE-2020-27171 se debe a un error de desbordamiento de números enteros al trabajar con punteros, lo que lleva a un acceso especulativo a datos fuera del búfer. Estos problemas ya se solucionaron en las versiones del kernel 5.11.8, 5.10.25, 5.4.107, 4.19.182 y 4.14.227, y también se incluyeron en las actualizaciones del kernel para la mayoría de las distribuciones de Linux. Los investigadores han preparado un prototipo de exploit que permite a un usuario sin privilegios extraer datos de la memoria del kernel.

Fuente: opennet.ru

Añadir un comentario