← volver
CVE-2022-0847highbajo ataqueCWE-665

CVE-2022-0847

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA, tiene exploit funcional público y 1 grupo(s) de amenaza la utilizan.

ssvc Actcvss 7.8epss 89%
de la publicación al arma0 días
Publicada en NVD7 mar
1ª PoC30 mar
metasploit20 feb
CISA KEV+49d
probabilidad de explotación
89%top 1% de las CVE
explotación observada
CISA + VulnCheck
1 grupo(s)178 exploit(s) público(s)
Quién la explota1

Grupos conocidos por explotar esta vulnerabilidad (atribución MITRE ATT&CK).

Acción exigida por CISAplazo federal: 2022-05-16

Apply updates per vendor instructions.

Resumen

Dirty Pipe é uma falha de inicialização incompleta no subsistema de pipes do kernel Linux que permite a um usuário local sem privilégios sobrescrever dados em páginas do page cache de arquivos somente leitura — incluindo arquivos pertencentes a root, binários SUID e montagens read-only. O impacto prático é escalada de privilégios trivial e confiável, sem necessidade de condição de corrida, o que a torna mais fácil de explorar que a Dirty COW (CVE-2016-5195), sua prima espiritual de 2016.

Detalle técnico

A falha está nas funções copy_page_to_iter_pipe e push_pipe, usadas quando o kernel cria novos buffers dentro de um pipe. O campo "flags" da struct pipe_buffer não era reinicializado ao alocar um novo buffer nessas rotinas, herdando valores obsoletos de um uso anterior do mesmo buffer. Especificamente, a flag PIPE_BUF_FLAG_CAN_MERGE — que indica que dados podem ser "mesclados" (escritos) diretamente numa página já existente no pipe — podia permanecer ativa por engano.

O problema (CWE-665, Improper Initialization) foi introduzido no kernel 5.8, quando a lógica de splice/pipe foi reescrita para usar referências de página em vez de cópias, uma mudança de performance que eliminou uma verificação implícita de permissão de escrita. Como a flag CAN_MERGE não distingue se a página no pipe é uma cópia interna ou uma referência direta a uma página do page cache de um arquivo em disco, o kernel aceita uma escrita nessa página sem validar se o arquivo subjacente é gravável pelo processo chamador.

O atacante controla o conteúdo escrito e o deslocamento dentro do arquivo-alvo (dentro dos limites do que splice() permite manipular), desde que consiga fazer com que uma página do arquivo termine referenciada dentro de um pipe cujo buffer tenha a flag indevidamente setada. Não há uso de memória fora de limites nem corrupção de estruturas do kernel — é puramente um erro de controle de acesso disfarçado de bug de inicialização.

Cómo se explota

A exploração é local, não requer autenticação privilegiada (PR:L no vetor reflete apenas a necessidade de uma conta local qualquer) e não exige interação de outro usuário. O pré-requisito real é: acesso de shell (ou execução de código) na máquina, kernel dentro da faixa vulnerável, e permissão de leitura sobre o arquivo-alvo — não é necessário poder escrever nele, essa é justamente a garantia que a falha quebra. Mecanicamente, o ataque usa uma sequência de chamadas envolvendo pipes e splice() para forçar um buffer de pipe a referenciar uma página do page cache do arquivo-alvo com a flag de merge indevidamente ativa, e então escrever nesse buffer — a escrita se propaga para a página real do arquivo em disco/cache.

Na prática documentada por pesquisadores e por provas de conceito públicas, isso foi usado para modificar arquivos de sistema protegidos (como /etc/passwd), sequestrar binários SUID substituindo seu conteúdo por um payload controlado pelo atacante, e obter shell como root. A CISA lista a falha no catálogo KEV por exploração confirmada in-the-wild, e existe módulo Metasploit e múltiplos PoCs funcionais publicados poucos dias após a divulgação — a barreira técnica para exploração é baixa uma vez que se tem qualquer acesso local, incluindo containers mal isolados e ambientes Android (que usam kernels Linux e frequentemente ficam atrás no patch level).

A falha não afeta arquivos que o kernel bloqueia por outros mecanismos (ex.: proteções de imutabilidade via chattr +i, ou montagens com opções específicas que impedem mmap gravável), mas a maioria dos sistemas em produção não usa essas proteções como padrão.

Versiones

Afectadas
Linux kernel a partir da versão 5.8 até, mas não incluindo, 5.16.11, 5.15.25 e 5.10.102 (a falha foi introduzida na reescrita do subsistema de pipe/splice na série 5.8 e permaneceu presente em todos os ramos estáveis subsequentes até a correção).
Corregidas en
5.16.11, 5.15.25 e 5.10.102 (mainline). Ramos anteriores ao 5.10 (ex.: LTS mais antigos) não são afetados por não conterem a reescrita introduzida na 5.8. Distribuições realizaram backports próprios para seus kernels empacotados — verificar o changelog de segurança da distribuição específica para a versão de pacote corrigida.

Cómo protegerse

A correção definitiva é atualizar o kernel. O fornecedor (mantenedores do kernel Linux) corrigiu a falha nas versões 5.16.11, 5.15.25 e 5.10.102, com backports subsequentes feitos por cada distribuição (RHEL, Ubuntu, Debian, SUSE, e fabricantes de dispositivos Android via boletins de segurança). Não existe flag de configuração, parâmetro de sysctl ou opção de montagem que neutralize a falha sem patch — é um bug de lógica no caminho de código do pipe, não um recurso que pode ser desativado seletivamente.

Como paliativo real na ausência de patch imediato, é possível restringir a superfície reduzindo quem pode executar splice()/vmsplice() via seccomp-bpf ou perfis de LSM (AppArmor/SELinux) customizados, mas isso tem custo operacional alto: splice é usado por ferramentas comuns (netcat, proxies, containers) e bloqueá-lo pode quebrar funcionalidade. Monitoramento de integridade de arquivos (AIDE, Tripwire) sobre binários SUID e arquivos críticos de sistema serve como detecção compensatória, não como prevenção.

Mito a descartar: reiniciar serviços, remontar filesystems como read-only no nível de bloco, ou usar contêineres sem privilégios não elimina o risco — a falha está no kernel do host e afeta qualquer processo com acesso de leitura ao arquivo, independentemente de namespaces, exceto quando o isolamento de kernel entre host e convidado é real (máquinas virtuais completas, não apenas containers compartilhando kernel).

Cómo detectar

Como o vetor é puramente local e a exploração ocorre inteiramente em memória via chamadas de sistema padrão (pipe, splice, vmsplice, write), não há assinatura de rede e a maioria dos PoCs não deixa rastro óbvio em logs de aplicação. O sinal mais confiável é comportamental: monitoramento de syscalls via auditd/eBPF observando sequências atípicas de splice()/vmsplice() por processos não privilegiados seguidas de escrita em arquivos aos quais o processo não deveria ter permissão de gravação, e verificação de integridade (hash) de binários SUID e arquivos de sistema críticos para detectar modificação retroativa.

Na ausência dessas instrumentações, não há sinal confiável — é preciso assumir exposição com base na versão do kernel em uso, não em evidência de log.

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.
A flaw was found in the way the "flags" member of the new pipe buffer structure was lacking proper initialization in copy_page_to_iter_pipe and push_pipe functions in the Linux kernel and could thus contain stale values. An unprivileged local user could use this flaw to write to pages in the page cache backed by read only files and as such escalate their privileges on the system.
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Productos afectados
n/a · kernel
PoCs públicas encontradas178
exploitdbwww.exploit-db.com/exploits/50808no verificadogithubgithub.com/Arinerron/CVE-2022-0847-DirtyPipe-Exploit1130githubgithub.com/AlexisAhmed/CVE-2022-0847-DirtyPipe-Exploits727githubgithub.com/r1is/CVE-2022-0847282githubgithub.com/Al1ex/CVE-2022-084791githubgithub.com/DataDog/dirtypipe-container-breakout-poc77githubgithub.com/basharkey/CVE-2022-0847-dirty-pipe-checker70githubgithub.com/ZZ-SOCMAP/CVE-2022-084758githubgithub.com/bbaranoff/CVE-2022-084750githubgithub.com/febinrev/dirtypipez-exploit49githubgithub.com/knqyf263/CVE-2022-084746githubgithub.com/greenhandatsjtu/CVE-2022-0847-Container-Escape37githubgithub.com/airbus-cert/dirtypipe-ebpf_detection29githubgithub.com/chenaotian/CVE-2022-084725githubgithub.com/ahrixia/CVE_2022_084721githubgithub.com/breachnix/dirty-pipe-poc15githubgithub.com/0xIronGoat/dirty-pipe14githubgithub.com/LudovicPatho/CVE-2022-0847_dirty-pipe10githubgithub.com/crusoe112/DirtyPipePython10githubgithub.com/rexpository/linux-privilege-escalation9githubgithub.com/xndpxs/CVE-2022-08479githubgithub.com/crowsec-edtech/Dirty-Pipe9githubgithub.com/h4ckm310n/CVE-2022-0847-eBPF8githubgithub.com/qwert419/linux-7githubgithub.com/drapl0n/dirtypipe7githubgithub.com/Mustafa1986/CVE-2022-0847-DirtyPipe-Exploit6githubgithub.com/4luc4rdr5290/CVE-2022-08476githubgithub.com/arttnba3/CVE-2022-08476githubgithub.com/KianaBin/CVE-2022-0847-Container-Escape5githubgithub.com/DanaEpp/pwncat_dirtypipe4githubgithub.com/nanaao/dirtyPipe-automaticRoot4githubgithub.com/EagleTube/CVE-2022-08473githubgithub.com/sa-infinity8888/Dirty-Pipe-CVE-2022-08473githubgithub.com/gyaansastra/CVE-2022-08473githubgithub.com/MrP1xel/CVE-2022-0847-dirty-pipe-kernel-checker3githubgithub.com/eduquintanilha/CVE-2022-0847-DirtyPipe-Exploits3githubgithub.com/bluedragonsecurity/Linux-Kernel-Dirty-Pipe-Exploitation-Logic-Bug-3githubgithub.com/Shotokhan/cve_2022_0847_shellcode3githubgithub.com/zzzchuu/Dirty-Pipe2githubgithub.com/puckiestyle/CVE-2022-08472githubgithub.com/dadhee/CVE-2022-0847_DirtyPipeExploit2githubgithub.com/0xeremus/dirty-pipe-poc2githubgithub.com/mutur4/CVE-2022-08472githubgithub.com/ihenakaarachchi/debian11-dirty_pipe-patcher2githubgithub.com/VinuKalana/DirtyPipe-CVE-2022-08472githubgithub.com/CYB3RK1D/CVE-2022-0847-POC2githubgithub.com/byteReaper77/Dirty-Pipe2githubgithub.com/karanlvm/DirtyPipe-Exploit2githubgithub.com/jpts/CVE-2022-0847-DirtyPipe-Container-Breakout2githubgithub.com/mhanief/dirtypipe2githubgithub.com/rabomen/Dirty-Pipe2githubgithub.com/Gustavo-Nogueira/Dirty-Pipe-Exploits2githubgithub.com/JlSakuya/CVE-2022-0847-container-escape2githubgithub.com/tmoneypenny/CVE-2022-08472githubgithub.com/cspshivam/CVE-2022-0847-dirty-pipe-exploit2githubgithub.com/mattlloyddavies/ps-lab-cve-2022-08471githubgithub.com/xiaoLvChen/CVE-2022-08471githubgithub.com/lucksec/CVE-2022-08471githubgithub.com/mrchucu1/CVE-2022-0847-Docker1githubgithub.com/ITMarcin2211/CVE-2022-0847-DirtyPipe-Exploit1githubgithub.com/pashayogi/DirtyPipe1githubgithub.com/joeymeech/CVE-2022-0847-Exploit-Implementation1githubgithub.com/b4dboy17/Dirty-Pipe-Oneshot1githubgithub.com/scopion/dirty-pipe1githubgithub.com/realbatuhan/dirtypipetester1githubgithub.com/muhammad1596/CVE-2022-0847-dirty-pipe-checker1githubgithub.com/Mephierr/DirtyPipe_exploit1githubgithub.com/real-tim-johnston/megaquagga-pentest-report0githubgithub.com/si1ent-le/CVE-2022-08470githubgithub.com/bohr777/cve-2022-0847dirtypipe-exploit0githubgithub.com/Greetdawn/CVE-2022-0847-DirtyPipe0githubgithub.com/nanaao/Dirtypipe-exploit0githubgithub.com/AyoubNajim/cve-2022-0847dirtypipe-exploit0githubgithub.com/pentestblogin/pentestblog-CVE-2022-08470githubgithub.com/Greetdawn/CVE-2022-0847-DirtyPipe-0githubgithub.com/githublihaha/DirtyPIPE-CVE-2022-08470githubgithub.com/stfnw/Debugging_Dirty_Pipe_CVE-2022-08470githubgithub.com/0xr1l3s/CVE-2022-08470githubgithub.com/tufanturhan/CVE-2022-0847-L-nux-PrivEsc0githubgithub.com/isaiahsimeone/COMP3320-VAPT0githubgithub.com/jxpsx/CVE-2022-0847-DirtyPipe-Exploits0githubgithub.com/orsuprasad/CVE-2022-0847-DirtyPipe-Exploits0githubgithub.com/jonathanbest7/cve-2022-08470githubgithub.com/ayushx007/CVE-2022-0847-dirty-pipe-checker0githubgithub.com/ayushx007/CVE-2022-0847-DirtyPipe-Exploits0githubgithub.com/JustinYe377/CTF-CVE-2022-08470githubgithub.com/mithunmadhukuttan/Dirty-Pipe-Exploit0githubgithub.com/RogelioPumajulca/CVE-2022-08470githubgithub.com/cypherlobo/DirtyPipe-BSI0githubgithub.com/morgenm/dirtypipe0githubgithub.com/stfnw/reproducer-poc-CVE-2022-08470githubgithub.com/SimoesCTT/Chrono-Drip-Temporal-Viscosity-Exploitation-Framework-CVE-2022-08470githubgithub.com/JeevanAnand1202/Penetration-Test0githubgithub.com/gaganhm3018-art/CVE-2022-0847-Dirty-Pipe-0githubgithub.com/t1ckprivate/CVE-2022-0847-Dirty-Pipe0githubgithub.com/babyshen/CVE-2022-08470githubgithub.com/edsonjt81/CVE-2022-0847-Linux0githubgithub.com/V0WKeep3r/CVE-2022-0847-DirtyPipe-Exploit0githubgithub.com/osungjinwoo/CVE-2022-0847-Dirty-Pipe0githubgithub.com/CPT-Jack-A-Castle/CVE-2022-08470githubgithub.com/notl0cal/dpipe0githubgithub.com/edsonjt81/CVE-2022-0847-DirtyPipe-0githubgithub.com/DataFox/CVE-2022-08470githubgithub.com/pmihsan/Dirty-Pipe-CVE-2022-08470githubgithub.com/ajith737/Dirty-Pipe-CVE-2022-0847-POCs0githubgithub.com/solomon12354/LockingGirl-----CVE-2022-0847-Dirty_Pipe_virus0githubgithub.com/letsr00t/CVE-2022-08470githubgithub.com/xsxtw/CVE-2022-08470githubgithub.com/muhammad1596/CVE-2022-0847-DirtyPipe-Exploits0githubgithub.com/aswanepo/DirtyPipe0githubgithub.com/Scouserr/cve-2022-0847-poc-dockerimage0githubgithub.com/Shadow-Spinner/CVE-2022-08470githubgithub.com/honeyvig/CVE-2022-0847-DirtyPipe-Exploit0githubgithub.com/gladiator-07/CVE-2022-08470vulncheckvulncheck.com/xdb/79c51557e8e7no verificadovulncheckvulncheck.com/xdb/b7ade02a3da0no verificadovulncheckvulncheck.com/xdb/830e350bd642no verificadovulncheckvulncheck.com/xdb/6c64ccbb8d52no verificadovulncheckvulncheck.com/xdb/27ac660f03deno verificadovulncheckvulncheck.com/xdb/96d8ebedfe2fno verificadovulncheckvulncheck.com/xdb/6651072dd4a6no verificadovulncheckvulncheck.com/xdb/610fa05f7ec4no verificadovulncheckvulncheck.com/xdb/a77a7570c91bno verificadovulncheckvulncheck.com/xdb/b665c30d7b05no verificadovulncheckvulncheck.com/xdb/17eac3a8349dno verificadovulncheckvulncheck.com/xdb/de3da6925a66no verificadovulncheckvulncheck.com/xdb/e74c2b6094acno verificadovulncheckvulncheck.com/xdb/d542c059ef55no verificadovulncheckvulncheck.com/xdb/d3a70ff7bafdno verificadovulncheckvulncheck.com/xdb/370b7021f8a9no verificadovulncheckvulncheck.com/xdb/d3ad03153f6eno verificadovulncheckvulncheck.com/xdb/0ff57a4fbafcno verificadovulncheckvulncheck.com/xdb/39fa7f44daa8no verificadovulncheckvulncheck.com/xdb/82740f737207no verificadovulncheckvulncheck.com/xdb/a83519a93931no verificadovulncheckvulncheck.com/xdb/cbca31fa2346no verificadovulncheckvulncheck.com/xdb/986760f90254no verificadovulncheckvulncheck.com/xdb/7f2dbb1be2fano verificadovulncheckvulncheck.com/xdb/7a4fbe4458fbno verificadovulncheckvulncheck.com/xdb/f44fe86cdbd8no verificadovulncheckvulncheck.com/xdb/3b34006b6ed8no verificadovulncheckvulncheck.com/xdb/8700be3bde3fno verificadovulncheckvulncheck.com/xdb/d2e7f7cbb621no verificadovulncheckvulncheck.com/xdb/fd2f2968f48cno verificadovulncheckvulncheck.com/xdb/2d68d5611e4bno verificadovulncheckvulncheck.com/xdb/42ba5e95ff5bno verificadovulncheckvulncheck.com/xdb/5a77169c0797no verificadovulncheckvulncheck.com/xdb/138c1f528926no verificadovulncheckvulncheck.com/xdb/a3b3ce85d0a5no verificadovulncheckvulncheck.com/xdb/bef271559611no verificadovulncheckvulncheck.com/xdb/8d1294672787no verificadocve_referencepacketstormsecurity.com/files/166258/Dirty-Pipe-Local-Privilege-Escalation.htmlno verificadovulncheckvulncheck.com/xdb/4221c9725688no verificadovulncheckvulncheck.com/xdb/11089b6096c2no verificadovulncheckvulncheck.com/xdb/4a62a2a669beno verificadocve_referencepacketstormsecurity.com/files/166230/Dirty-Pipe-SUID-Binary-Hijack-Privilege-Escalation.htmlno verificadovulncheckvulncheck.com/xdb/53f491f20736no verificadovulncheckvulncheck.com/xdb/39d930add800no verificadovulncheckvulncheck.com/xdb/df0bacb0b7bcno verificadovulncheckvulncheck.com/xdb/5753c6aff2e2no verificadovulncheckvulncheck.com/xdb/e2dbb982b5dano verificadocve_referencepacketstormsecurity.com/files/176534/Linux-4.20-KTLS-Read-Only-Write.htmlno verificadocve_referencepacketstormsecurity.com/files/166229/Dirty-Pipe-Linux-Privilege-Escalation.htmlno verificadovulncheckvulncheck.com/xdb/c4258f9dc626no verificadovulncheckvulncheck.com/xdb/57ffde1c1df6no verificadovulncheckvulncheck.com/xdb/5e1cd4381cd2no verificadovulncheckvulncheck.com/xdb/8fecaa2db7c9no verificadovulncheckvulncheck.com/xdb/7681898c4d58no verificadovulncheckvulncheck.com/xdb/e4ea692dc95eno verificadovulncheckvulncheck.com/xdb/bc3dc26b7001no verificadovulncheckvulncheck.com/xdb/a76c9b8da62ano verificadovulncheckvulncheck.com/xdb/46be9d6ea639no verificadovulncheckvulncheck.com/xdb/86e89699a34ano verificadovulncheckvulncheck.com/xdb/4876d153c69ano verificadovulncheckvulncheck.com/xdb/54b99f9179fbno verificadovulncheckvulncheck.com/xdb/c735aeb744eano verificadovulncheckvulncheck.com/xdb/d6a71047f04cno verificadovulncheckvulncheck.com/xdb/d34eb7cc4235no verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.