
PoC não verificado de escalada de privilégios no kernel Linux usando reutilização entre caches de msg_msgseg para sobrepor skb e pipe_buffer, alterando as flags do pipe para ler /etc/passwd.
Apenas para pesquisa experimental; o código de prefetch e nperm (referência de memória que requer a configuração de set.gdb) não foi anexado e, sem otimização, a probabilidade de acerto é baixa.
O autor observou que o autor da vulnerabilidade já divulgou as informações relacionadas a ela: https://github.com/google/security-research/pull/414
A abordagem de exploração é totalmente diferente; como não foi totalmente validada, a opinião sobre essa abordagem é conservadora (principalmente porque o autor não testou na prática se o spinlock de sock pode sofrer corrida; com base em uma compreensão parcial do código, é possível provocar a corrida por meio da interrupção de hardware do timerfd).
Análise preliminar: https://xz.aliyun.com/news/92649
Abordagem de exploração: msg_msgseg reutiliza tipc_sock por meio de cross_cache, forja alguns campos para passar por todas as verificações e, por fim, realiza a liberação; em seguida, constrói a sobreposição (overlap) entre skb e pipe_buffer, adulterando os flags de pipe_buffer (técnica: splice de arquivo somente leitura /etc/passwd e depois adulterar os flags — abordagem de exploração estendida do Dirty Pipe). Como o endereço do heap do kernel não foi vazado, o sk->lock.wq forjado não pode apontar para si mesmo; para passar pela verificação, o curr->func (detalhes no código-fonte: cadeia de chamadas de __wake_up_common) é forjado como ret. Portanto, a implementação dataonly não é totalmente completa.