¿Qué tan perjudicial es hoy una vulnerabilidad de desreferencia de puntero NULL?

2

Recientemente he estado leyendo acerca de las implicaciones de las referencias erróneas de punteros NULL en el código del kernel (a menudo LKMs / modules), específicamente escalando privilegios a la raíz a través de mmap() ing la página NULL y luego memcpy() ing algún código shell que llama commit_creds(prepare_kernels_cred(0)); (o cualquier otra cosa) de user-land para hacer que el código posterior se ejecute en el contexto del usuario root (generalmente para generar un shell de root). Este fue un método de explotación muy popular hace alrededor de una década.

Se introdujo una mitigación, mmap_min_addr , que previene mmap() de páginas bajas, y la gente (por supuesto) encontró formas de evitarla (los artículos que leí eran todos en 2009). Sin embargo, no hay (aparentemente) ningún método (conocido o público) para eludir esta mitigación (y, por supuesto, otro endurecimiento del kernel hace que los errores de corrupción de memoria se vuelvan más difíciles o completamente inviables).

Dado esto, ¿qué tan perjudiciales son las desreferencias de puntero NULL en la actualidad? Parece que lo mejor que se puede aprovechar es la denegación de servicio (en un kernel moderno con mmap_min_addr habilitado [quizás descuidando ASLR, DEP / NX, SELinux / AppArmor / PaX / grsec, etc.]). ¿Es posible aprovechar la escalada de privilegios en entornos particulares? (Excluyendo la desactivación de mmap_min_addr , por supuesto). Y si es así, ¿cuáles son algunos ejemplos?

    
pregunta Phizo 25.01.2018 - 14:09
fuente

1 respuesta

3

En estos días, las referencias erróneas de puntero nulo solo se pueden directamente como condiciones de denegación de servicio, ya que la página cero siempre está protegida contra la asignación. Hay casos en los que el puntero de referencia no es nulo, pero apunta a memoria desasignada (por ejemplo, UAF en un JIT), y estos generalmente pueden aprovecharse para obtener LPE o RCE en ciertos casos, este último principalmente aplicable a las vulnerabilidades del motor de JavaScript.

Dicho esto, la activación de un deref nulo a menudo puede tener efectos secundarios fuera del alcance de DoS, por ejemplo. produciendo un seguimiento de pila o volcado de núcleo que filtra datos confidenciales de manera que un usuario sin privilegios pueda acceder a él.

    
respondido por el Polynomial 25.01.2018 - 14:23
fuente

Lea otras preguntas en las etiquetas