
Artigo acadêmico e slides de apresentação analisando a vulnerabilidade de escalonamento de privilégios Dirty COW no Linux (CVE-2016-5195), incluindo técnicas de exploração, comportamento de writeback do kernel e desafios de detecção.
Este repositório contém meu artigo e slides de apresentação sobre CVE-2016-5195, uma vulnerabilidade de escalonamento de privilégios no Linux, escrito para o curso de Sistemas Operacionais: Design e Segurança na FMI, Universidade de Bucareste.
Em meu artigo, afirmei que é possível usar o Dirty COW para backdoorar binários silenciosamente sem escalar imediatamente para root, tornando mais difícil a detecção.
Isso não é verdade porque, ao tentar realizar o writeback da página modificada, o kernel percebe que a página está suja (o que nunca deveria estar) e entra em pânico, causando uma falha no sistema.
Para evitar isso, você deve escalar imediatamente para root e desabilitar o writeback automático executando echo 0 > /proc/sys/vm/dirty_writeback_centisecs.
Meu prova de conceito não faz isso,
então ele rapidamente falha ao testar em uma VM, após modificar com sucesso o /etc/passwd
(que não é persistido no disco).
https://www.exploit-db.com/exploits/40847 é um exemplo de código de exploit que sobrescreve /etc/passwd e depois desabilita o writeback para evitar falhas.
Outros métodos incluem patching do vDSO (https://github.com/scumjr/dirtycow-vdso) em vez de uma página com suporte a arquivo, o que afeta todos os processos do sistema e não causa falhas, e tem outras vantagens como também escapar de contêineres e não ser afetado pelas restrições do SELinux que poderiam impedir até mesmo abrir o /etc/passwd como somente leitura para o ataque.
Embora você possa de fato backdoorar o sistema após escalar para root (o mesmo que qualquer outro método de escalonamento de privilégios), isso envolveria operações comuns do sistema de arquivos e poderia ser detectado por sistemas de detecção de intrusão, enquanto que, se o writeback tivesse funcionado como eu pensei originalmente, ele poderia contornar o monitoramento de operações de escrita, já que o kernel faria o writeback da página sem envolver nenhuma chamada de sistema de escrita, mas na verdade ele apenas entra em pânico.