← voltar
CVE-2016-5195highsob ataqueCWE-362

CVE-2016-5195

100Vexday Risk Score

Priorize a correção. Ela está sob exploração confirmada pelo CISA e tem prova de conceito pública.

ssvc Actcvss 7epss 83%
da publicação à arma0 dias
Publicada no NVD10 de nov.
1ª PoC19 de out.
CISA KEV+1939d
probabilidade de exploração
83%top 1% das CVEs
exploração observada
simCISA + VulnCheck
127 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-03-24

Apply updates per vendor instructions.

Resumo

Dirty COW é uma condição de corrida (race condition) no subsistema de memória do kernel Linux que permite a um usuário local sem privilégios escrever em mapeamentos de memória marcados como somente-leitura, incluindo binários com bit SUID e arquivos de sistema como /etc/passwd. O bug existe desde aproximadamente o kernel 2.6.22 (2007) e foi explorado ativamente antes da divulgação pública em outubro de 2016 — está confirmado no catálogo KEV da CISA. Não é uma falha remota: exige execução local prévia, mas o impacto é escalonamento completo de privilégios até root em praticamente qualquer distribuição Linux não corrigida.

Detalhamento técnico

A falha está na lógica de quebra de copy-on-write (COW) do kernel, no caminho de tratamento de falhas de página (page fault) — a descrição oficial aponta mm/gup.c, mas o mecanismo envolve a interação entre get_user_pages(), do_wp_page() e do_cow_fault() em mm/memory.c. Quando uma escrita ocorre em uma página privada somente-leitura, o kernel dispara uma falha de página tipo COW: aloca uma nova página, marca-a como 'dirty' mas mantém a PTE como read-only, e retorna sinalizando que a operação deve ser refeita (retry). Nesse intervalo entre a criação da cópia COW e a nova tentativa de escrita, existe uma janela onde outra thread pode desfazer o mapeamento com madvise(MADV_DONTNEED), forçando o kernel a tratar a próxima tentativa de acesso como uma leitura, e não como a escrita original — fazendo com que o get_user_pages() acabe escrevendo diretamente na página de cache de página compartilhada com o arquivo original em disco, em vez da cópia privada COW.

Como é explorada

O exploit usado in the wild (e replicado em todas as PoCs públicas do repositório dirtycow) mapeia em memória (mmap) um arquivo somente-leitura ao qual o atacante tem permissão de leitura mas não de escrita — tipicamente um binário SUID root ou /etc/passwd — e dispara duas threads em loop: uma escrevendo repetidamente via /proc/self/mem (ou via ptrace(PTRACE_POKEDATA)) no offset mapeado, e outra chamando madvise(MADV_DONTNEED) sobre o mesmo mapeamento em ciclo contínuo. Vencendo a corrida, a escrita atinge a página de cache compartilhada em disco em vez de uma cópia privada, alterando permanentemente o conteúdo do arquivo apesar de ele ser read-only para o usuário.

Versões

Afetadas
Kernel Linux desde aproximadamente 2.6.22 (2007) até versões anteriores a 4.8.3, presente em praticamente todas as distribuições Linux e produtos baseados em kernel Linux vigentes em 2016 (RHEL 5/6/7, RHEL MRG 2, OpenShift Online v2, RHEV-H/RHV-H, openSUSE, dispositivos Juniper com JunOS baseado em Linux, entre outros).
Corrigidas em
Kernel mainline 4.8.3 e posteriores (commit 19be0eaffa3ac7d8eb6784ad9bdbc7d67ed8e619). Backports específicos por distribuição: RHEL 7 via RHSA-2016:2098 (kernel) e RHSA-2016:2110 (kernel-rt); RHEL 7.1 EUS via RHSA-2016:2118; RHEL 6 via RHSA-2016:2105 e RHSA-2016:2106 (6.7 EUS), RHSA-2016:2120/2128/2132/2133 (AUS 6.5/6.6/6.2/6.4); RHEL 5 via RHSA-2016:2124, RHSA-2016:2126 (5.9 AUS), RHSA-2016:2127 (5.6 AUS); Red Hat Enterprise MRG 2 via RHSA-2016:2107; openSUSE via os advisories opensuse-security-announce de outubro/2016 (msg00034, msg00035, msg00036); Juniper via JSA10770, JSA10774 e JSA10807.

Como se proteger

A correção definitiva é atualizar o kernel para uma versão que inclua o commit 19be0eaffa3ac7d8eb6784ad9bdbc7d67ed8e619, que introduz a flag FOLL_COW para validar corretamente se uma página já passou por COW usando o bit dirty da PTE, eliminando a janela de corrida. A correção foi incorporada ao kernel mainline 4.8.3 e backportada por todas as distribuições enterprise (RHEL via RHSA-2016:2098/2105/2106/2118/2120/2124/2126/2127/2128/2132/2133/2107, openSUSE via os três advisories de outubro/2016 listados, e outras). Reboot é necessário após a atualização — não existe hotpatch permanente sem reiniciar o kernel em produção normal.

Como detectar

Não há assinatura de rede, já que a exploração é inteiramente local — nenhum tráfego passa pela borda. Em sistemas com auditoria de syscalls habilitada (auditd/SystemTap), o padrão de sinal é a alta frequência de chamadas madvise(MADV_DONTNEED) intercaladas com escritas em /proc/self/mem ou chamadas ptrace(PTRACE_POKEDATA) sobre o mesmo processo, em loop apertado — mas isoladamente cada uma dessas syscalls é legítima e comum, então o sinal só é confiável observando o padrão de corrida (alta taxa, mesmo alvo, mesmo processo) e não a syscall isolada. A mitigação temporária via SystemTap divulgada pela Red Hat funciona interceptando ptrace com request 0xfff, o que também serve como ponto de instrumentação para detecção, mas não é um indicador forense retroativo — não deixa rastro em log padrão de sistemas sem auditoria explicitamente configurada antes do ataque.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
Race condition in mm/gup.c in the Linux kernel 2.x through 4.x before 4.8.3 allows local users to gain privileges by leveraging incorrect handling of a copy-on-write (COW) feature to write to a read-only memory mapping, as exploited in the wild in October 2016, aka "Dirty COW."
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
Produtos afetados
n/a · n/a
PoCs públicas encontradas127 VexDay Proof
exploitdbVexDay Proofwww.exploit-db.com/exploits/40839exploitdbVexDay Proofwww.exploit-db.com/exploits/40847exploitdbVexDay Proofwww.exploit-db.com/exploits/40611exploitdbVexDay Proofwww.exploit-db.com/exploits/40616exploitdbwww.exploit-db.com/exploits/40838não verificadogithubgithub.com/timwr/CVE-2016-51951006githubgithub.com/firefart/dirtycow937githubgithub.com/scumjr/dirtycow-vdso511githubgithub.com/gbonacini/CVE-2016-5195341githubgithub.com/r1is/CVE-2022-0847282githubgithub.com/hyln9/VIKIROOT271githubgithub.com/Brucetg/DirtyCow-EXP141githubgithub.com/DavidBuchanan314/cowroot32githubgithub.com/aishee/scan-dirtycow16githubgithub.com/xlucas/dirtycow.cr13githubgithub.com/pgporada/ansible-role-cve10githubgithub.com/whu-enjoy/CVE-2016-519510githubgithub.com/imust6226/dirtcow9githubgithub.com/sideeffect42/DirtyCOWTester7githubgithub.com/jas502n/CVE-2016-51957githubgithub.com/oleg-fiksel/ansible_CVE-2016-5195_check6githubgithub.com/talsim/root-dirtyc0w5githubgithub.com/droidvoider/dirtycow-replacer4githubgithub.com/arttnba3/CVE-2016-51953githubgithub.com/LinuxKernelContent/DirtyCow3githubgithub.com/esc0rtd3w/org.cowpoop.moooooo3githubgithub.com/DanielEbert/CVE-2016-51952githubgithub.com/FloridSleeves/os-experiment-42githubgithub.com/LiEnby/PSSRoot2githubgithub.com/ASRTeam/CVE-2016-51951githubgithub.com/malinthag62/The-exploitation-of-Dirty-Cow-CVE-2016-51951githubgithub.com/0x3n19m4/CVE-2016-51951githubgithub.com/arbll/dirtycow1githubgithub.com/titanhp/Dirty-COW-CVE-2016-5195-Testing1githubgithub.com/TotallyNotAHaxxer/CVE-2016-51951githubgithub.com/th3-5had0w/DirtyCOW-PoC1githubgithub.com/sribaba/android-CVE-2016-51950githubgithub.com/h1n4mx0/Research-CVE-2016-51950githubgithub.com/pardhu045/linux-privilege-escalation0githubgithub.com/KosukeShimofuji/CVE-2016-51950githubgithub.com/istenrot/centos-dirty-cow-ansible0githubgithub.com/ldenevi/CVE-2016-51950githubgithub.com/ndobson/inspec_CVE-2016-51950githubgithub.com/acidburnmi/CVE-2016-5195-master0githubgithub.com/xpcmdshell/derpyc0w0githubgithub.com/zakariamaaraki/Dirty-COW-CVE-2016-5195-0githubgithub.com/shanuka-ashen/Dirty-Cow-Explanation-CVE-2016-5195-0githubgithub.com/dulanjaya23/Dirty-Cow-CVE-2016-5195-0githubgithub.com/KaviDk/dirtyCow0githubgithub.com/KasunPriyashan/Y2S1-Project-Linux-Exploitaion-using-CVE-2016-5195-Vulnerability0githubgithub.com/vinspiert/scumjrs0githubgithub.com/passionchenjianyegmail8/scumjrs0githubgithub.com/1equeneRise/scumjr90githubgithub.com/fei9747/CVE-2016-51950githubgithub.com/h1n4mx0z/Research-CVE-2016-51950githubgithub.com/EDLLT/CVE-2016-5195-master0githubgithub.com/ZhiQiAnSecFork/DirtyCOW_CVE-2016-51950githubgithub.com/sakilahamed/Linux-Kernel-Exploit-LAB0githubgithub.com/ASUKA39/CVE-2016-51950githubgithub.com/Samuel-G3/Escalamiento-de-Privilegios-usando-el-Kernel-Exploit-Dirty-Cow0githubgithub.com/mohammadamin382/dirtycow-lab0githubgithub.com/MarioAlejos-Cs/dirtycow-lab0githubgithub.com/ramahmdr/dirtycow0githubgithub.com/elhaddadalaa788-alt/kernel-exploit-dirtycow-project-subm0githubgithub.com/theo543/OSDS_Paper_CVE-2016-51950githubgithub.com/maur0amaya/Escalamiento-de-Privilegios-usando-el-Kernel-Exploit-Dirty-Cow0githubgithub.com/rauljvc8/Exploit-Dirty-Cow0githubgithub.com/GonzaBot/kernel-exploit-dirtycow0githubgithub.com/endgtryna/lenovo-a1000g-mt8317-A412_01_09_130907-kernel-3.4.0-root-cve-2016-51950vulncheckvulncheck.com/xdb/3259770b0ff4não verificadovulncheckvulncheck.com/xdb/bbdb7a7979danão verificadovulncheckvulncheck.com/xdb/4d43856ec877não verificadovulncheckvulncheck.com/xdb/94c11c970613não verificadovulncheckvulncheck.com/xdb/d1c17c081d03não verificadovulncheckvulncheck.com/xdb/0eca479a0f12não verificadovulncheckvulncheck.com/xdb/db0cfa39ee2enão verificadovulncheckvulncheck.com/xdb/cecbca9ee49fnão verificadocve_referencepacketstormsecurity.com/files/139277/Kernel-Live-Patch-Security-Notice-LSN-0012-1.htmlnão verificadovulncheckvulncheck.com/xdb/31a0aa69cf4cnão verificadovulncheckvulncheck.com/xdb/9125928f7603não verificadovulncheckvulncheck.com/xdb/5c3c3322474dnão verificadovulncheckvulncheck.com/xdb/b81caecd21a0não verificadovulncheckvulncheck.com/xdb/f2204b41dd21não verificadovulncheckvulncheck.com/xdb/b05a18448174não verificadovulncheckvulncheck.com/xdb/3c59fbbe4941não verificadovulncheckvulncheck.com/xdb/a84cc3ab3f48não verificadovulncheckvulncheck.com/xdb/277a1d4bf8a2não verificadovulncheckvulncheck.com/xdb/2f99e74166aenão verificadovulncheckvulncheck.com/xdb/cd262e482af1não verificadovulncheckvulncheck.com/xdb/9ab30651140cnão verificadovulncheckvulncheck.com/xdb/10e422584e38não verificadovulncheckvulncheck.com/xdb/26aa72694109não verificadovulncheckvulncheck.com/xdb/26759f64e421não verificadocve_referencewww.exploit-db.com/exploits/40611/não verificadovulncheckvulncheck.com/xdb/c702394e39a9não verificadocve_referencepacketstormsecurity.com/files/139287/DirtyCow-Local-Root-Proof-Of-Concept.htmlnão verificadovulncheckvulncheck.com/xdb/0f54259ef0a3não verificadovulncheckvulncheck.com/xdb/bbc108f0e2d3não verificadovulncheckvulncheck.com/xdb/a73a45d1e2d2não verificadovulncheckvulncheck.com/xdb/01d749b64ad1não verificadovulncheckvulncheck.com/xdb/a87c371b3f3fnão verificadovulncheckvulncheck.com/xdb/72416db5c445não verificadovulncheckvulncheck.com/xdb/25a7d419158enão verificadovulncheckvulncheck.com/xdb/52f1724c803anão verificadovulncheckvulncheck.com/xdb/56a0d9175e82não verificadovulncheckvulncheck.com/xdb/770693b60910não verificadovulncheckvulncheck.com/xdb/8caaebd2c120não verificadovulncheckvulncheck.com/xdb/18b29d667585não verificadovulncheckvulncheck.com/xdb/77f940bbe0a4não verificadovulncheckvulncheck.com/xdb/421bc3afa1a0não verificadovulncheckvulncheck.com/xdb/177f3ff1c724não verificadovulncheckvulncheck.com/xdb/f9efe15626b2não verificadovulncheckvulncheck.com/xdb/e26232ee0a29não verificadovulncheckvulncheck.com/xdb/996eaef54533não verificadovulncheckvulncheck.com/xdb/edf32f0cb046não verificadocve_referencepacketstormsecurity.com/files/139922/Linux-Kernel-Dirty-COW-PTRACE_POKEDATA-Privilege-Escalation.htmlnão verificadocve_referencepacketstormsecurity.com/files/139923/Linux-Kernel-Dirty-COW-PTRACE_POKEDATA-Privilege-Escalation.htmlnão verificadocve_referencepacketstormsecurity.com/files/142151/Kernel-Live-Patch-Security-Notice-LSN-0021-1.htmlnão verificadocve_referencewww.exploit-db.com/exploits/40616/não verificadocve_referencewww.exploit-db.com/exploits/40839/não verificadocve_referencewww.exploit-db.com/exploits/40847/não verificadovulncheckvulncheck.com/xdb/5a4311b57888não verificadovulncheckvulncheck.com/xdb/6b7028face39não verificadovulncheckvulncheck.com/xdb/9fe4e31741bfnão verificadovulncheckvulncheck.com/xdb/91934bafa64fnão verificadocve_referencepacketstormsecurity.com/files/139286/DirtyCow-Linux-Kernel-Race-Condition.htmlnão verificadovulncheckvulncheck.com/xdb/4275f34a5224não verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.