Vulnerabilidades

Con el objetivo de informar, advertir y ayudar a los profesionales sobre las ultimas vulnerabilidades de seguridad en sistemas tecnológicos, ponemos a disposición de los usuarios interesados en esta información una base de datos con información en castellano sobre cada una de las ultimas vulnerabilidades documentadas y conocidas.

Este repositorio con más de 75.000 registros esta basado en la información de NVD (National Vulnerability Database) – en función de un acuerdo de colaboración – por el cual desde INCIBE realizamos la traducción al castellano de la información incluida. En ocasiones este listado mostrará vulnerabilidades que aún no han sido traducidas debido a que se recogen en el transcurso del tiempo en el que el equipo de INCIBE realiza el proceso de traducción.

Se emplea el estándar de nomenclatura de vulnerabilidades CVE (Common Vulnerabilities and Exposures), con el fin de facilitar el intercambio de información entre diferentes bases de datos y herramientas. Cada una de las vulnerabilidades recogidas enlaza a diversas fuentes de información así como a parches disponibles o soluciones aportadas por los fabricantes y desarrolladores. Es posible realizar búsquedas avanzadas teniendo la opción de seleccionar diferentes criterios como el tipo de vulnerabilidad, fabricante, tipo de impacto entre otros, con el fin de acortar los resultados.

Mediante suscripción RSS o Boletines podemos estar informados diariamente de las ultimas vulnerabilidades incorporadas al repositorio.

CVE-2024-41010

Fecha de publicación:
17/07/2024
Idioma:
Español
En el kernel de Linux, se resolvió la siguiente vulnerabilidad: bpf: Se solucionó el lanzamiento demasiado temprano de tcx_entry Pedro Pinto y más tarde, de forma independiente, también Hyunwoo Kim y Wongi Lee informaron un problema por el cual tcx_entry se puede lanzar demasiado pronto, lo que lleva a un uso posterior a la liberación (UAF ) cuando una qdisc ingress o clsact antigua activa con un bloque tc compartido se reemplaza posteriormente por otra instancia de ingress o clsact. Esencialmente, la secuencia para activar la UAF (un ejemplo) puede ser la siguiente: 1. Se crea un espacio de nombres de red. 2. Se crea una qdisc de entrada. Esto asigna un tcx_entry, y &tcx_entry->miniq se almacena en el miniqp->p_miniq de la qdisc. Al mismo tiempo, se crea un bloque tcf con índice 1. 3. chain0 está adjunta al bloque tcf. chain0 debe estar conectado al bloque vinculado a la qdisc de ingreso para luego llegar a la función tcf_chain0_head_change_cb_del() que activa la UAF. 4. Cree e injerte una qdisc clsact. Esto hace que se elimine la qdisc de entrada creada en el paso 1, liberando así la tcx_entry previamente vinculada: rtnetlink_rcv_msg() => tc_modify_qdisc() => qdisc_create() => clsact_init() [a] => qdisc_graft() => qdisc_destroy( ) => __qdisc_destroy() => ingress_destroy() [b] => tcx_entry_free() => kfree_rcu() // tcx_entry liberado 5. Finalmente, se cierra el espacio de nombres de la red. Esto registra el trabajador cleanup_net y, durante el proceso de liberación de la qdisc clsact restante, accede a tcx_entry que ya se liberó en el paso 4, lo que provoca que se produzca la UAF: cleanup_net() => ops_exit_list() => default_device_exit_batch() => unregister_netdevice_many() => unregister_netdevice_many_notify() => dev_shutdown() => qdisc_put() => clsact_destroy() [c] => tcf_block_put_ext() => tcf_chain0_head_change_cb_del() => tcf_chain_head_change_item() => clsact_chain_head_change() => mini_qdisc_pair _intercambiar( ) // UAF También hay otras variantes, lo esencial es agregar una qdisc de ingreso (o clsact) con un bloque compartido específico, luego reemplazar esa qdisc, esperar a que se ejecute tcx_entry kfree_rcu() y posteriormente acceder al activo actual miniq de qdisc de una forma u otra. La solución correcta es convertir el booleano miniq_active en un contador. Lo que se puede observar, en el paso 2 anterior, el contador pasa de 0->1, en el paso [a] de 1->2 (para que el objeto miniq permanezca activo durante el reemplazo), luego en [b] de 2->1 y finalmente [c] 1->0 con el eventual lanzamiento. El contador de referencia en general oscila entre [0,2] y no necesita ser atómico ya que todo acceso al contador está protegido por el mutex rtnl. Con esto implementado, ya no ocurre ningún UAF y tcx_entry se libera en el momento correcto.
Severidad: Pendiente de análisis
Última modificación:
17/07/2024

CVE-2024-41009

Fecha de publicación:
17/07/2024
Idioma:
Español
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: bpf: corrige el exceso de reservas en ringbuf. El búfer de anillo BPF se implementa internamente como un búfer circular de tamaño potencia de 2, con dos contadores lógicos y en constante aumento: consumer_pos es el consumidor contador para mostrar en qué posición lógica el consumidor consumió los datos, y productor_pos, que es el contador del productor que indica la cantidad de datos reservados por todos los productores. Cada vez que se reserva un registro, el productor "dueño" del registro avanzará exitosamente el contador de productores. En el espacio de usuario, cada vez que se lee un registro, el consumidor de los datos avanza el contador del consumidor una vez que finaliza el procesamiento. Ambos contadores se almacenan en páginas separadas de modo que, desde el espacio del usuario, el contador del productor sea de solo lectura y el contador del consumidor sea de lectura y escritura. Un aspecto que simplifica y, por lo tanto, acelera la implementación tanto de productores como de consumidores es cómo el área de datos se mapea dos veces de forma contigua y consecutiva en la memoria virtual, lo que permite no tomar medidas especiales para las muestras que tienen que envolverse en el mismo lugar. al final del área de datos del búfer circular, porque la página siguiente después de la última página de datos volvería a ser la primera página de datos y, por lo tanto, la muestra seguirá apareciendo completamente contigua en la memoria virtual. Cada registro tiene una estructura bpf_ringbuf_hdr { u32 len; u32 página_apagada; } encabezado para la contabilidad de la longitud y el desplazamiento, y es inaccesible para el programa BPF. Ayudantes como bpf_ringbuf_reserve() devuelven `(void *)hdr + BPF_RINGBUF_HDR_SZ` para que lo use el programa BPF. Bing-Jhong y Muhammad informaron que, sin embargo, es posible hacer que un segundo fragmento de memoria asignado se superponga con el primer fragmento y, como resultado, el programa BPF ahora puede editar el encabezado del primer fragmento. Por ejemplo, considere la creación de un mapa BPF_MAP_TYPE_RINGBUF con un tamaño de 0x4000. A continuación, consumer_pos se modifica a 0x3000 /antes/ se realiza una llamada a bpf_ringbuf_reserve(). Esto asignará un fragmento A, que está en [0x0,0x3008], y el programa BPF podrá editar [0x8,0x3008]. Ahora, asignemos un fragmento B con tamaño 0x3000. Esto tendrá éxito porque consumer_pos se editó con anticipación para pasar la verificación `new_prod_pos - cons_pos > rb->mask`. El fragmento B estará en el rango [0x3008,0x6010] y el programa BPF podrá editar [0x3010,0x6010]. Debido al diseño de la memoria del búfer en anillo mencionado anteriormente, los rangos [0x0,0x4000] y [0x4000,0x8000] apuntan a las mismas páginas de datos. Esto significa que el fragmento B en [0x4000,0x4008] es el encabezado del fragmento A. bpf_ringbuf_submit() / bpf_ringbuf_discard() usa el pg_off del encabezado para luego ubicar el bpf_ringbuf a través de bpf_ringbuf_restore_from_rec(). Una vez que el fragmento B modificó el encabezado del fragmento A, bpf_ringbuf_commit() hace referencia a la página incorrecta y podría causar un bloqueo. Solucionelo calculando el pendiente_pos más antiguo y verifique si el rango desde el registro pendiente más antiguo hasta el más nuevo abarcaría más allá del tamaño del búfer circular. Si ese es el caso, rechace la solicitud. Hemos probado con el punto de referencia del búfer de anillo en las autopruebas de BPF (./benchs/run_bench_ringbufs.sh) antes/después de la corrección y, aunque parece un poco más lento en algunos puntos de referencia, todavía no es lo suficientemente significativo como para importar.
Severidad: Pendiente de análisis
Última modificación:
17/07/2024