CVE-2023-2163: descubrimiento y corrección de una vulnerabilidad de eBPF en el kernel de Linux
Contexto
- eBPF es una tecnología que permite ampliar en tiempo de ejecución las funciones del kernel de Linux sin escribir módulos de kernel complejos.
- Los programas eBPF se ejecutan cuando ocurren ciertos eventos y deben pasar una verificación de seguridad antes de cargarse.
- El verificador (
verifier) está compuesto por código complejo y se han encontrado muchas vulnerabilidades en él.
- Google desarrolló Buzzer, un fuzzer que audita automáticamente el verificador de eBPF.
Estrategia de aritmética de punteros de Buzzer
- Buzzer es un nuevo fuzzer para eBPF que usa una estrategia orientada a provocar errores lógicos.
- La estrategia de aritmética de punteros consta de los siguientes pasos:
- Generar un encabezado que inicializa registros con valores aleatorios
- Generar instrucciones aritméticas y de salto aleatorias
- Elegir un registro aleatorio y realizar una suma con un puntero a un elemento de un mapa eBPF
- Escribir un valor mágico en ese elemento
Poda de rutas en eBPF
- El verificador de eBPF se encarga de comprobar si un programa puede ejecutarse de forma segura.
- Cuando hay una condición, simula todos los estados posibles.
- Si hay muchos saltos condicionales, usa una estrategia de poda de rutas para mejorar el rendimiento.
El bug
- CVE-2023-2163 introdujo el concepto de "seguimiento preciso" para hacer más eficiente la poda de rutas.
- El bug ocurrió porque se pasó por alto que el registro
r9 contribuía a la precisión de r6.
Explotación
- Al explotar CVE-2023-2163 se logró lectura/escritura arbitraria, además de LPE y escape de contenedor.
- Pasos principales:
- Lograr lectura/escritura arbitraria
- Encontrar las credenciales del proceso y elevar privilegios
Corrección
- Para corregir CVE-2023-2163, se marcó como preciso el registro impreciso en las operaciones que afectaban a registros precisos.
- El impacto en el rendimiento no está claro, pero no se encontraron problemas adicionales.
Ideas a futuro
- Garantizar la seguridad de los programas eBPF es difícil debido a la complejidad del proceso de verificación.
- Google está abordando este problema con Buzzer y da la bienvenida a contribuciones de la comunidad de código abierto.
Resumen de GN⁺
- Este artículo explica el proceso de descubrir y corregir una vulnerabilidad en el verificador de eBPF.
- eBPF es una tecnología importante en la investigación de seguridad del kernel, y garantizar su seguridad es difícil.
- Google desarrolló un fuzzer llamado Buzzer para auditar automáticamente vulnerabilidades en el verificador de eBPF.
- Este artículo es útil para investigadores de seguridad y desarrolladores, y ayuda a garantizar la seguridad de sistemas complejos como eBPF.
- Entre los proyectos con funciones similares se encuentran otras herramientas de fuzzing relacionadas con eBPF.
Aún no hay comentarios.