Linux Kernel hasta 5.15.169/6.1.114/6.6.57/6.11.4 arm64 /adrp-self memcpy escalada de privilegios

CVSS Puntuación meta temporalPrecio actual del exploit (≈)Puntuación de interés CTI
5.4$0-$5k0.00

Resumeninformación

Una vulnerabilidad ha sido encontrada en Linux Kernel hasta 5.15.169/6.1.114/6.6.57/6.11.4 y clasificada como problemática. Resulta afectada una función desconocida dentro del archivo /adrp-self dentro del componente arm64. La alteración resulta en una debilidad no identificada. Esta vulnerabilidad se registra como CVE-2024-50194. Ningún exploit está disponible. Se sugiere actualizar el componente afectado.

Detallesinformación

Una vulnerabilidad ha sido encontrada en Linux Kernel hasta 5.15.169/6.1.114/6.6.57/6.11.4 y clasificada como problemática. La función memcpy del archivo /adrp-self del componente arm64 es afectada por esta vulnerabilidad. Los efectos exactos de un ataque con éxito no son conocidos. CVE resume:

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: arm64: sondas: corrige uprobes para kernels big-endian El código de uprobes de arm64 está roto para kernels big-endian ya que no convierte la codificación de instrucciones en memoria (que siempre es little-endian) al endianness nativo del kernel antes de analizar y simular instrucciones. Esto puede resultar en algunos problemas distintos: * El kernel puede rechazar erróneamente el sondeo de una instrucción que puede sondearse de forma segura. * El kernel puede permitir erróneamente el paso de una instrucción fuera de línea cuando esa instrucción no puede ser pasada fuera de línea de forma segura. * El kernel puede simular erróneamente la instrucción incorrectamente durante la interpretación de la codificación de bytes intercambiados. El desajuste de endianness no es detectado por el compilador o sparse porque: * Los campos arch_uprobe::{insn,ixol} están codificados como matrices de u8, por lo que el compilador y sparse no tienen idea de que estos contienen un valor de 32 bits little-endian. El código central de uprobes los llena con un memcpy() que de manera similar no maneja el endianness. * Si bien el tipo uprobe_opcode_t es un alias para __le32, tanto arch_uprobe_analyze_insn() como arch_uprobe_skip_sstep() convierten de u8[] al tipo de nombre similar probe_opcode_t, que es un alias para u32. Por lo tanto, no hay una advertencia de conversión de endianness. Solucione esto cambiando los campos arch_uprobe::{insn,ixol} a __le32 y agregando las conversiones __le32_to_cpu() apropiadas antes de consumir la codificación de instrucciones. El núcleo uprobes copia estos campos como rangos opacos de bytes y, por lo tanto, no se ve afectado por este cambio. Al mismo tiempo, elimine MAX_UINSN_BYTES y use consistentemente AARCH64_INSN_SIZE para mayor claridad. Probado con lo siguiente: | #include | #include | | #define noinline __attribute__((noinline)) | | static noinline void *adrp_self(void) | { | void *addr; | | asm volátil( | " adrp %x0, adrp_self\n" | " add %x0, %x0, :lo12:adrp_self\n" | : "=r" (addr)); | } | | | int main(int argc, char *argv) | { | void *ptr = adrp_self(); | bool equal = (ptr == adrp_self); | | printf("adrp_self => %p\n" | "adrp_self() => %p\n" | "%s\n", | adrp_self, ptr, equal ? "EQUAL" : "NOT EQUAL"); | | return 0; | } .... donde la función adrp_self() se compiló a: | 00000000004007e0 : | 4007e0: 90000000 adrp x0, 400000 <__ehdr_start> | 4007e4: 911f8000 add x0, x0, #0x7e0 | 4007e8: d65f03c0 ret Antes de este parche, no se reconocía el ADRP y se asumía que se podía ejecutar paso a paso, lo que provocaba la corrupción del resultado: | # ./adrp-self | adrp_self => 0x4007e0 | adrp_self() => 0x4007e0 | IGUAL | # echo 'p /root/adrp-self:0x007e0' > /sys/kernel/tracing/uprobe_events | # echo 1 > /sys/kernel/tracing/events/uprobes/enable | # ./adrp-self | adrp_self => 0x4007e0 | adrp_self() => 0xffffffffff7e0 | NO IGUAL Después de este parche, el ADRP se reconoce y simula correctamente: | # ./adrp-self | adrp_self => 0x4007e0 | adrp_self() => 0x4007e0 | IGUAL | # | # echo 'p /root/adrp-self:0x007e0' > /sys/kernel/tracing/uprobe_events | # echo 1 > /sys/kernel/tracing/events/uprobes/enable | # ./adrp-self | adrp_self => 0x4007e0 | adrp_self() => 0x4007e0 | IGUAL

El advisory puede ser descargado de git.kernel.org. La vulnerabilidad es identificada como CVE-2024-50194. Hay detalles técnicos conocidos, pero no se dispone de un exploit.

Para el scanner Nessus se dispone de un plugin ID 212923 (CBL Mariner 2.0 Security Update: kernel (CVE-2024-50194)), que puede ayudar a determinar la existencia del riesgo analizado.

Una actualización a la versión 5.15.170, 6.1.115, 6.6.58 o 6.11.5 elimina esta vulnerabilidad. Aplicando el parche cf60d19d4018/14841bb7a531/8165bf83b8a6/3d2530c65be0/13f8f1e05f1d es posible eliminar el problema. El parche puede ser descargado de git.kernel.org. El mejor modo sugerido para mitigar el problema es Actualización.

La vulnerabilidad también está documentado en la base de datos Tenable (212923). If you want to get best quality of vulnerability data, you may have to visit VulDB.

Productoinformación

Escribe

Proveedor

Nombre

Versión

Licencia

Sitio web

CPE 2.3información

CPE 2.2información

CVSSv4información

VulDB Vector: 🔍
VulDB Confiabilidad: 🔍

CVSSv3información

VulDB Puntuación meta base: 5.5
VulDB Puntuación meta temporal: 5.4

VulDB Puntuación base: 5.5
VulDB Puntuación temporal: 5.3
VulDB Vector: 🔍
VulDB Confiabilidad: 🔍

NVD Puntuación base: 5.5
NVD Vector: 🔍

CVSSv2información

AVACAuCIA
💳💳💳💳💳💳
💳💳💳💳💳💳
💳💳💳💳💳💳
VectorComplejidadAutenticaciónConfidencialidadIntegridadDisponibilidad
DesbloquearDesbloquearDesbloquearDesbloquearDesbloquearDesbloquear
DesbloquearDesbloquearDesbloquearDesbloquearDesbloquearDesbloquear
DesbloquearDesbloquearDesbloquearDesbloquearDesbloquearDesbloquear

VulDB Puntuación base: 🔍
VulDB Puntuación temporal: 🔍
VulDB Confiabilidad: 🔍

Explotacióninformación

Clase: Escalada de privilegios
CWE: CWE-172
CAPEC: 🔍
ATT&CK: 🔍

Físico: En parte
Local: Sí
Remoto: En parte

Disponibilidad: 🔍
Estado: No está definido

EPSS Score: 🔍
EPSS Percentile: 🔍

Predicción de precios: 🔍
Estimación del precio actual: 🔍

0-DayDesbloquearDesbloquearDesbloquearDesbloquear
HoyDesbloquearDesbloquearDesbloquearDesbloquear

Nessus ID: 212923
Nessus Nombre: CBL Mariner 2.0 Security Update: kernel (CVE-2024-50194)

Inteligencia de amenazasinformación

Interés: 🔍
Actores activos: 🔍
Grupos APT activos: 🔍

Contramedidasinformación

Recomendación: Actualización
Estado: 🔍

Hora de 0 días: 🔍

Actualización: Kernel 5.15.170/6.1.115/6.6.58/6.11.5
Parche: cf60d19d4018/14841bb7a531/8165bf83b8a6/3d2530c65be0/13f8f1e05f1d

Línea de tiempoinformación

2024-10-21 🔍
2024-11-08 +18 días 🔍
2024-11-08 +0 días 🔍
2024-12-14 +36 días 🔍

Fuentesinformación

Proveedor: kernel.org

Aviso: git.kernel.org
Estado: Confirmado

CVE: CVE-2024-50194 (🔍)
GCVE (CVE): GCVE-0-2024-50194
GCVE (VulDB): GCVE-100-283522

Artículoinformación

Fecha de creación: 2024-11-08 08:08
Actualizado: 2024-12-14 02:03
Cambios: 2024-11-08 08:08 (59), 2024-11-29 21:41 (11), 2024-12-14 02:03 (2)
Completo: 🔍
Cache ID: 216::103

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Discusión

Sin comentarios aún. Idiomas: es + pt + en.

Por favor, inicie sesión para comentar.

Do you need the next level of professionalism?

Upgrade your account now!