← volver
CVE-2016-5195highbajo ataqueCWE-362

CVE-2016-5195

100Vexday Risk Score

Prioriza la corrección. Ella está bajo explotación confirmada por CISA y tiene prueba de concepto pública.

ssvc Actcvss 7epss 83%
de la publicación al arma0 días
Publicada en NVD10 nov
1ª PoC19 oct
CISA KEV+1939d
probabilidad de explotación
83%top 1% de las CVE
explotación observada
CISA + VulnCheck
127 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2022-03-24

Apply updates per vendor instructions.

Resumen

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.

Detalle 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.

Cómo se explota

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.

Versiones

Afectadas
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).
Corregidas en
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.

Cómo protegerse

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.

Cómo 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.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
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
Productos afectados
n/a · n/a
PoCs públicas encontradas127 VexDay Proof
exploitdbVexDay Proofwww.exploit-db.com/exploits/40616exploitdbVexDay Proofwww.exploit-db.com/exploits/40611exploitdbVexDay Proofwww.exploit-db.com/exploits/40839exploitdbVexDay Proofwww.exploit-db.com/exploits/40847exploitdbwww.exploit-db.com/exploits/40838no verificadogithubgithub.com/timwr/CVE-2016-51951008githubgithub.com/firefart/dirtycow937githubgithub.com/scumjr/dirtycow-vdso512githubgithub.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/whu-enjoy/CVE-2016-519510githubgithub.com/pgporada/ansible-role-cve10githubgithub.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/LiEnby/PSSRoot2githubgithub.com/FloridSleeves/os-experiment-42githubgithub.com/0x3n19m4/CVE-2016-51951githubgithub.com/ASRTeam/CVE-2016-51951githubgithub.com/arbll/dirtycow1githubgithub.com/titanhp/Dirty-COW-CVE-2016-5195-Testing1githubgithub.com/th3-5had0w/DirtyCOW-PoC1githubgithub.com/TotallyNotAHaxxer/CVE-2016-51951githubgithub.com/malinthag62/The-exploitation-of-Dirty-Cow-CVE-2016-51951githubgithub.com/ndobson/inspec_CVE-2016-51950githubgithub.com/KasunPriyashan/Y2S1-Project-Linux-Exploitaion-using-CVE-2016-5195-Vulnerability0githubgithub.com/sribaba/android-CVE-2016-51950githubgithub.com/acidburnmi/CVE-2016-5195-master0githubgithub.com/vinspiert/scumjrs0githubgithub.com/pardhu045/linux-privilege-escalation0githubgithub.com/passionchenjianyegmail8/scumjrs0githubgithub.com/h1n4mx0/Research-CVE-2016-51950githubgithub.com/1equeneRise/scumjr90githubgithub.com/fei9747/CVE-2016-51950githubgithub.com/xpcmdshell/derpyc0w0githubgithub.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/KosukeShimofuji/CVE-2016-51950githubgithub.com/ldenevi/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-51950githubgithub.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/istenrot/centos-dirty-cow-ansible0vulncheckvulncheck.com/xdb/31a0aa69cf4cno verificadovulncheckvulncheck.com/xdb/9125928f7603no verificadovulncheckvulncheck.com/xdb/5c3c3322474dno verificadovulncheckvulncheck.com/xdb/b81caecd21a0no verificadovulncheckvulncheck.com/xdb/f2204b41dd21no verificadovulncheckvulncheck.com/xdb/b05a18448174no verificadovulncheckvulncheck.com/xdb/3c59fbbe4941no verificadovulncheckvulncheck.com/xdb/277a1d4bf8a2no verificadovulncheckvulncheck.com/xdb/10e422584e38no verificadovulncheckvulncheck.com/xdb/2f99e74166aeno verificadovulncheckvulncheck.com/xdb/cd262e482af1no verificadovulncheckvulncheck.com/xdb/9ab30651140cno verificadovulncheckvulncheck.com/xdb/c702394e39a9no verificadovulncheckvulncheck.com/xdb/0f54259ef0a3no verificadovulncheckvulncheck.com/xdb/26759f64e421no verificadovulncheckvulncheck.com/xdb/5a4311b57888no verificadovulncheckvulncheck.com/xdb/0eca479a0f12no verificadovulncheckvulncheck.com/xdb/a84cc3ab3f48no verificadovulncheckvulncheck.com/xdb/26aa72694109no verificadovulncheckvulncheck.com/xdb/91934bafa64fno verificadovulncheckvulncheck.com/xdb/9fe4e31741bfno verificadovulncheckvulncheck.com/xdb/6b7028face39no verificadovulncheckvulncheck.com/xdb/bbc108f0e2d3no verificadovulncheckvulncheck.com/xdb/a73a45d1e2d2no verificadovulncheckvulncheck.com/xdb/a87c371b3f3fno verificadovulncheckvulncheck.com/xdb/01d749b64ad1no verificadovulncheckvulncheck.com/xdb/72416db5c445no verificadovulncheckvulncheck.com/xdb/25a7d419158eno verificadovulncheckvulncheck.com/xdb/52f1724c803ano verificadovulncheckvulncheck.com/xdb/56a0d9175e82no verificadovulncheckvulncheck.com/xdb/770693b60910no verificadovulncheckvulncheck.com/xdb/8caaebd2c120no verificadovulncheckvulncheck.com/xdb/18b29d667585no verificadovulncheckvulncheck.com/xdb/77f940bbe0a4no verificadovulncheckvulncheck.com/xdb/421bc3afa1a0no verificadovulncheckvulncheck.com/xdb/177f3ff1c724no verificadovulncheckvulncheck.com/xdb/f9efe15626b2no verificadovulncheckvulncheck.com/xdb/e26232ee0a29no verificadovulncheckvulncheck.com/xdb/996eaef54533no verificadovulncheckvulncheck.com/xdb/edf32f0cb046no verificadocve_referencepacketstormsecurity.com/files/139277/Kernel-Live-Patch-Security-Notice-LSN-0012-1.htmlno verificadocve_referencepacketstormsecurity.com/files/139286/DirtyCow-Linux-Kernel-Race-Condition.htmlno verificadocve_referencepacketstormsecurity.com/files/139287/DirtyCow-Local-Root-Proof-Of-Concept.htmlno verificadocve_referencepacketstormsecurity.com/files/139922/Linux-Kernel-Dirty-COW-PTRACE_POKEDATA-Privilege-Escalation.htmlno verificadocve_referencepacketstormsecurity.com/files/139923/Linux-Kernel-Dirty-COW-PTRACE_POKEDATA-Privilege-Escalation.htmlno verificadocve_referencepacketstormsecurity.com/files/142151/Kernel-Live-Patch-Security-Notice-LSN-0021-1.htmlno verificadocve_referencewww.exploit-db.com/exploits/40611/no verificadocve_referencewww.exploit-db.com/exploits/40616/no verificadocve_referencewww.exploit-db.com/exploits/40839/no verificadocve_referencewww.exploit-db.com/exploits/40847/no verificadovulncheckvulncheck.com/xdb/4275f34a5224no verificadovulncheckvulncheck.com/xdb/3259770b0ff4no verificadovulncheckvulncheck.com/xdb/bbdb7a7979dano verificadovulncheckvulncheck.com/xdb/4d43856ec877no verificadovulncheckvulncheck.com/xdb/94c11c970613no verificadovulncheckvulncheck.com/xdb/d1c17c081d03no verificadovulncheckvulncheck.com/xdb/db0cfa39ee2eno verificadovulncheckvulncheck.com/xdb/cecbca9ee49fno verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.