← voltar
CVE-2022-0847highsob ataqueCWE-665

CVE-2022-0847

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA, tem exploit funcional público e 1 grupo(s) de ameaça a utilizam.

ssvc Actcvss 7.8epss 89%
da publicação à arma0 dias
Publicada no NVD7 de mar.
1ª PoC30 de mar.
metasploit20 de fev.
CISA KEV+49d
probabilidade de exploração
89%top 1% das CVEs
exploração observada
simCISA + VulnCheck
1 grupo(s)175 exploit(s) público(s)
Quem explora1

Grupos conhecidos por explorar esta vulnerabilidade (atribuição MITRE ATT&CK).

Ação exigida pela CISAprazo federal: 2022-05-16

Apply updates per vendor instructions.

Resumo

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.

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

Como é explorada

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.

Versões

Afetadas
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).
Corrigidas em
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.

Como se proteger

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

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

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.
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
Produtos afetados
n/a · kernel
PoCs públicas encontradas175
exploitdbwww.exploit-db.com/exploits/50808não verificadogithubgithub.com/Arinerron/CVE-2022-0847-DirtyPipe-Exploit1129githubgithub.com/AlexisAhmed/CVE-2022-0847-DirtyPipe-Exploits728githubgithub.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/xndpxs/CVE-2022-08479githubgithub.com/crowsec-edtech/Dirty-Pipe9githubgithub.com/rexpository/linux-privilege-escalation9githubgithub.com/h4ckm310n/CVE-2022-0847-eBPF8githubgithub.com/qwert419/linux-7githubgithub.com/drapl0n/dirtypipe7githubgithub.com/Mustafa1986/CVE-2022-0847-DirtyPipe-Exploit6githubgithub.com/arttnba3/CVE-2022-08476githubgithub.com/4luc4rdr5290/CVE-2022-08476githubgithub.com/KianaBin/CVE-2022-0847-Container-Escape5githubgithub.com/nanaao/dirtyPipe-automaticRoot4githubgithub.com/DanaEpp/pwncat_dirtypipe4githubgithub.com/gyaansastra/CVE-2022-08473githubgithub.com/Shotokhan/cve_2022_0847_shellcode3githubgithub.com/EagleTube/CVE-2022-08473githubgithub.com/sa-infinity8888/Dirty-Pipe-CVE-2022-08473githubgithub.com/bluedragonsecurity/Linux-Kernel-Dirty-Pipe-Exploitation-Logic-Bug-3githubgithub.com/eduquintanilha/CVE-2022-0847-DirtyPipe-Exploits3githubgithub.com/MrP1xel/CVE-2022-0847-dirty-pipe-kernel-checker3githubgithub.com/mhanief/dirtypipe2githubgithub.com/rabomen/Dirty-Pipe2githubgithub.com/Gustavo-Nogueira/Dirty-Pipe-Exploits2githubgithub.com/puckiestyle/CVE-2022-08472githubgithub.com/mutur4/CVE-2022-08472githubgithub.com/JlSakuya/CVE-2022-0847-container-escape2githubgithub.com/0xeremus/dirty-pipe-poc2githubgithub.com/dadhee/CVE-2022-0847_DirtyPipeExploit2githubgithub.com/zzzchuu/Dirty-Pipe2githubgithub.com/karanlvm/DirtyPipe-Exploit2githubgithub.com/byteReaper77/Dirty-Pipe2githubgithub.com/CYB3RK1D/CVE-2022-0847-POC2githubgithub.com/jpts/CVE-2022-0847-DirtyPipe-Container-Breakout2githubgithub.com/tmoneypenny/CVE-2022-08472githubgithub.com/cspshivam/CVE-2022-0847-dirty-pipe-exploit2githubgithub.com/VinuKalana/DirtyPipe-CVE-2022-08472githubgithub.com/ihenakaarachchi/debian11-dirty_pipe-patcher2githubgithub.com/xiaoLvChen/CVE-2022-08471githubgithub.com/muhammad1596/CVE-2022-0847-dirty-pipe-checker1githubgithub.com/mattlloyddavies/ps-lab-cve-2022-08471githubgithub.com/pashayogi/DirtyPipe1githubgithub.com/joeymeech/CVE-2022-0847-Exploit-Implementation1githubgithub.com/mrchucu1/CVE-2022-0847-Docker1githubgithub.com/b4dboy17/Dirty-Pipe-Oneshot1githubgithub.com/lucksec/CVE-2022-08471githubgithub.com/ITMarcin2211/CVE-2022-0847-DirtyPipe-Exploit1githubgithub.com/realbatuhan/dirtypipetester1githubgithub.com/Mephierr/DirtyPipe_exploit1githubgithub.com/scopion/dirty-pipe1githubgithub.com/gladiator-07/CVE-2022-08470githubgithub.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/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/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/CPT-Jack-A-Castle/CVE-2022-08470githubgithub.com/isaiahsimeone/COMP3320-VAPT0githubgithub.com/jxpsx/CVE-2022-0847-DirtyPipe-Exploits0githubgithub.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/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/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/JustinYe377/CTF-CVE-2022-08470githubgithub.com/mithunmadhukuttan/Dirty-Pipe-Exploit0githubgithub.com/RogelioPumajulca/CVE-2022-08470githubgithub.com/cypherlobo/DirtyPipe-BSI0githubgithub.com/morgenm/dirtypipe0githubgithub.com/Scouserr/cve-2022-0847-poc-dockerimage0githubgithub.com/Shadow-Spinner/CVE-2022-08470githubgithub.com/honeyvig/CVE-2022-0847-DirtyPipe-Exploit0githubgithub.com/stfnw/reproducer-poc-CVE-2022-08470githubgithub.com/SimoesCTT/Chrono-Drip-Temporal-Viscosity-Exploitation-Framework-CVE-2022-08470githubgithub.com/real-tim-johnston/megaquagga-pentest-report0githubgithub.com/JeevanAnand1202/Penetration-Test0githubgithub.com/gaganhm3018-art/CVE-2022-0847-Dirty-Pipe-0githubgithub.com/t1ckprivate/CVE-2022-0847-Dirty-Pipe0vulncheckvulncheck.com/xdb/fd2f2968f48cnão verificadovulncheckvulncheck.com/xdb/2d68d5611e4bnão verificadovulncheckvulncheck.com/xdb/138c1f528926não verificadocve_referencepacketstormsecurity.com/files/166229/Dirty-Pipe-Linux-Privilege-Escalation.htmlnão verificadovulncheckvulncheck.com/xdb/e2dbb982b5danão verificadovulncheckvulncheck.com/xdb/5753c6aff2e2não verificadovulncheckvulncheck.com/xdb/df0bacb0b7bcnão verificadovulncheckvulncheck.com/xdb/4a62a2a669benão verificadovulncheckvulncheck.com/xdb/11089b6096c2não verificadovulncheckvulncheck.com/xdb/8d1294672787não verificadovulncheckvulncheck.com/xdb/bef271559611não verificadovulncheckvulncheck.com/xdb/a3b3ce85d0a5não verificadovulncheckvulncheck.com/xdb/5a77169c0797não verificadovulncheckvulncheck.com/xdb/42ba5e95ff5bnão verificadovulncheckvulncheck.com/xdb/c4258f9dc626não verificadovulncheckvulncheck.com/xdb/57ffde1c1df6não verificadovulncheckvulncheck.com/xdb/5e1cd4381cd2não verificadovulncheckvulncheck.com/xdb/8fecaa2db7c9não verificadovulncheckvulncheck.com/xdb/7681898c4d58não verificadovulncheckvulncheck.com/xdb/e4ea692dc95enão verificadovulncheckvulncheck.com/xdb/bc3dc26b7001não verificadovulncheckvulncheck.com/xdb/a76c9b8da62anão verificadovulncheckvulncheck.com/xdb/46be9d6ea639não verificadovulncheckvulncheck.com/xdb/86e89699a34anão verificadovulncheckvulncheck.com/xdb/4876d153c69anão verificadovulncheckvulncheck.com/xdb/54b99f9179fbnão verificadovulncheckvulncheck.com/xdb/c735aeb744eanão verificadovulncheckvulncheck.com/xdb/d6a71047f04cnão verificadovulncheckvulncheck.com/xdb/d34eb7cc4235não verificadovulncheckvulncheck.com/xdb/79c51557e8e7não verificadovulncheckvulncheck.com/xdb/b7ade02a3da0não verificadovulncheckvulncheck.com/xdb/830e350bd642não verificadovulncheckvulncheck.com/xdb/6c64ccbb8d52não verificadovulncheckvulncheck.com/xdb/27ac660f03denão verificadovulncheckvulncheck.com/xdb/96d8ebedfe2fnão verificadovulncheckvulncheck.com/xdb/6651072dd4a6não verificadovulncheckvulncheck.com/xdb/610fa05f7ec4não verificadovulncheckvulncheck.com/xdb/a77a7570c91bnão verificadovulncheckvulncheck.com/xdb/b665c30d7b05não verificadovulncheckvulncheck.com/xdb/17eac3a8349dnão verificadovulncheckvulncheck.com/xdb/de3da6925a66não verificadovulncheckvulncheck.com/xdb/e74c2b6094acnão verificadovulncheckvulncheck.com/xdb/d542c059ef55não verificadovulncheckvulncheck.com/xdb/d3a70ff7bafdnão verificadovulncheckvulncheck.com/xdb/370b7021f8a9não verificadovulncheckvulncheck.com/xdb/d3ad03153f6enão verificadovulncheckvulncheck.com/xdb/0ff57a4fbafcnão verificadovulncheckvulncheck.com/xdb/39fa7f44daa8não verificadovulncheckvulncheck.com/xdb/82740f737207não verificadovulncheckvulncheck.com/xdb/a83519a93931não verificadovulncheckvulncheck.com/xdb/cbca31fa2346não verificadovulncheckvulncheck.com/xdb/986760f90254não verificadovulncheckvulncheck.com/xdb/7f2dbb1be2fanão verificadovulncheckvulncheck.com/xdb/7a4fbe4458fbnão verificadovulncheckvulncheck.com/xdb/f44fe86cdbd8não verificadocve_referencepacketstormsecurity.com/files/176534/Linux-4.20-KTLS-Read-Only-Write.htmlnão verificadocve_referencepacketstormsecurity.com/files/166258/Dirty-Pipe-Local-Privilege-Escalation.htmlnão verificadovulncheckvulncheck.com/xdb/3b34006b6ed8não verificadocve_referencepacketstormsecurity.com/files/166230/Dirty-Pipe-SUID-Binary-Hijack-Privilege-Escalation.htmlnão verificadovulncheckvulncheck.com/xdb/8700be3bde3fnão verificadovulncheckvulncheck.com/xdb/d2e7f7cbb621nã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.