
PoC sin verificar de escalada de privilegios del kernel de Linux que emplea la reutilización cross-cache de msg_msgseg para solapar skb y pipe_buffer, alterando los flags de pipe para leer /etc/passwd.
Solo para investigación experimental. El código de prefetch y nperm (se requiere configurar la referencia de memoria set.gdb) no se adjunta; al no estar optimizado, la probabilidad de acierto es baja.
El autor ha observado que el autor de la vulnerabilidad ya ha publicado información relacionada con esta: https://github.com/google/security-research/pull/414
El enfoque de explotación es completamente diferente; como no se ha validado por completo, se mantiene una opinión conservadora al respecto (principalmente, si el spinlock de sock puede generar una condición de carrera, el autor no lo ha probado en la práctica; según una interpretación superficial del código, se puede provocar la condición de carrera mediante la interrupción dura de timerfd).
Análisis previo: https://xz.aliyun.com/news/92649
Enfoque de explotación: msg_msgseg reutiliza tipc_sock mediante cross_cache, forja algunos campos para pasar todas las comprobaciones y finalmente liberarlo; después se construye la superposición (overlap) entre skb y pipe_buffer para alterar los flags de pipe_buffer (usar splice con el archivo de solo lectura /etc/passwd y luego modificar los flags, una idea de explotación extendida de Dirty Pipe). Dado que no se ha filtrado la dirección del heap del kernel, el sk->lock.wq forjado no puede apuntar a sí mismo; para pasar la comprobación se forja curr->func (ver la cadena de llamadas de __wake_up_common en el código fuente) como ret, por lo que la implementación dataonly no está del todo completa.