
Arcabouço de análise e validação não armamentizado do CVE-2016-5195 (Dirty COW) com pesquisa de causa raiz, revisão do patch upstream e PoC seguro apenas para laboratório em kernels confirmados.
Pesquisa defensiva, validação não armamentizada e análise de patch para CVE-2016-5195 (Dirty COW), uma condição de corrida de copy-on-write do kernel Linux que pode permitir que um usuário local modifique dados associados a um mapeamento somente leitura e obtenha privilégios elevados.
| Campo | Valor |
|---|---|
| Componente | Gerenciamento de memória do kernel Linux / get_user_pages() |
| Fraqueza | CWE-362: Concurrent Execution using Shared Resource with Improper Synchronization |
| Gravidade | Alta, CVSS 3.1: 7.0 |
| Vetor | CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Pré-requisito de ataque | Acesso local de baixo privilégio |
| Correção upstream | 19be0eaffa3ac7d8eb6784ad9bdbc7d67ed8e619 |
| Primeira versão upstream corrigida | Linux 4.8.3; backports das distribuições variam |
Dirty COW é uma corrida no tratamento pelo kernel Linux de escritas forçadas e
mapeamentos copy-on-write (COW). Um usuário local pode disputar a invalidação de
páginas contra uma escrita via /proc/self/mem. Em um kernel afetado, a corrida
pode fazer com que dados associados a um mapeamento privado nominalmente somente
leitura sejam gravados de volta no arquivo subjacente.
O impacto público é a escalada local de privilégios quando um atacante consegue aplicar a primitiva a um arquivo sensível à segurança. A vulnerabilidade foi explorada ativamente em outubro de 2016. Este repositório não automatiza esse caminho de escalada.
| Caminho | Finalidade |
|---|---|
poc.c | Validação não armamentizada usando apenas um inode temporário desvinculado |
exploit.c | Primitiva de escrita em arquivo arbitrário para um laboratório descartável autorizado |
ROOT_CAUSE.md | Análise detalhada da transição de estado vulnerável e da corrida |
VULNERABILITY_REPORT.md | Pré-condições, causa raiz, impacto e remediação |
PATCH_ANALYSIS.md | Análise linha por linha da correção upstream FOLL_COW |
evidence/ | Saída de validação estruturada e notas de interpretação |
O harness padrão é intencionalmente limitado:
cc -std=c11 -Wall -Wextra -Wpedantic -Werror -O2 \
poc.c -o dirtycow-safe -pthread
A primitiva de exploit exclusiva de laboratório pode ser compilada separadamente:
cc -std=c11 -Wall -Wextra -Wpedantic -Werror -O2 \
exploit.c -o dirtycow-exploit -pthread
./dirtycow-safe
Contagem opcional de iterações limitadas:
./dirtycow-safe --iterations 5000000
Resultados possíveis:
marker-observed: comportamento vulnerável foi observado no inode descartável.marker-not-observed: inconclusivo. Uma corrida que não dispara não prova
que o kernel está corrigido.77: a interface Linux /proc/self/mem necessária está indisponível.Não use o resultado do PoC como verificação primária do status do patch. Consulte o aviso do pacote de kernel da distribuição em execução e verifique se o kernel corrigido está ativo após a reinicialização.
exploit.c aceita um arquivo explícito e um prefixo de substituição
e demonstra a primitiva de escrita em arquivo arbitrário em um kernel afetado.
Exige a confirmação literal --i-understand, aplica limites máximos de payload e
iterações e não constrói um payload de escalada de privilégios.
O arquivo selecionado pode ser modificado permanentemente. Use-o apenas em um
laboratório descartável e isolado que você possua ou para o qual esteja
explicitamente autorizado a testar. A análise completa da corrida e das
transições de estado está em ROOT_CAUSE.md.
evidence/evidence.json registra as assinaturas de
código-fonte observadas nas revisões oficiais do Linux antes e depois da
correção, o resultado da compilação do PoC sem avisos e as propriedades de
segurança da validação. evidence/validation.log
fornece um resumo conciso. A validação capturada não executou a corrida.
Instale a atualização de kernel fornecida pelo fornecedor e reinicie no kernel corrigido. Não decida a exposição apenas pela string de versão upstream: kernels empresariais e de distribuições comumente fazem backport da correção sem adotar o número de versão upstream. Contêineres usam o kernel do host; portanto, a remediação deve cobrir o host.
Consulte PATCH_ANALYSIS.md para a alteração upstream
exata e VULNERABILITY_REPORT.md para orientações de
validação.
Use este material apenas em sistemas que você possua ou para os quais esteja explicitamente autorizado a testar.