Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
DirtyPipe-Exploit — Prova de conceito para CVE-2022-0847 | Kitploit
Ferramentas/GitHubGitHub/karanlvm/dirtypipe-exploit
Escalada de PrivilégiosAnálise de VulnerabilidadesExploraçãoPapers e PesquisaAprendizado e EducaçãoExploração de Binários
GitHubkaranlvm/dirtypipe-exploit

DirtyPipe-Exploit

Prova de conceito para CVE-2022-0847

Ver Repositório
21há 10 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CSE 5380: Trabalho de Segurança da Informação CVE-2022-0847 (Dirty Pipe)

Por

Karan Vasudevamurthy (UTA ID: 1002164438)

O que é CVE?

Common Vulnerabilities and Exposures (CVE) é uma lista de vulnerabilidades e exposições de segurança da informação publicamente divulgadas. A corporação MITRE introduziu o CVE em 1999 para identificar e classificar as vulnerabilidades em software e firmware. A MITRE é uma organização sem fins lucrativos que opera centros de pesquisa e desenvolvimento financiados pelo governo federal dos Estados Unidos. O CVE visa facilitar o compartilhamento de informações sobre vulnerabilidades conhecidas, para que os planos de segurança cibernética possam ser atualizados para refletir os problemas e fraquezas de segurança mais recentes. Para isso, o CVE atribui um identificador único a cada vulnerabilidade ou exposição. Através dos identificadores CVE, que também são conhecidos como nomes CVE ou números CVE. O Common Vulnerability Scoring System (CVSS) é um conjunto de padrões abertos para atribuir um número a uma vulnerabilidade a fim de avaliar sua gravidade. A faixa de uma pontuação CVSS é de 0,0 a 10,0. O grau de gravidade de segurança aumenta com o aumento do número. Cada ID CVE é formatado como CVE-AAAA-NNNNN. A parte AAAA é o ano em que o ID CVE foi atribuído ou o ano em que a vulnerabilidade foi tornada pública.

O que são pipes?

No contexto do CVE-2022-0847, é crucial entender o funcionamento interno dos pipes, particularmente os atributos associados ao buffer do pipe. Pipes no Linux ajudam na transferência de dados entre processos, com a saída de um processo se tornando a entrada para outro. Esse mecanismo facilita a comunicação e coordenação entre diferentes processos em execução no sistema. Pipes são unidirecionais no Linux, o que significa que os dados fluem em apenas uma direção. Um buffer de pipe normalmente consiste em uma estrutura de dados FIFO (first-in, first-out) de tamanho fixo que armazena temporariamente os dados sendo transferidos entre processos. Quando um processo escreve dados em um pipe, eles são armazenados no buffer até que outro processo os leia. Assim que os dados são lidos, eles são removidos do buffer, permitindo que novos dados sejam escritos.

A vulnerabilidade

Para o CVE-2022-0847, é importante entender duas funções dentro do buffer do pipe-

  1. copy_page_to_iter_pipe: Esta função é responsável por copiar dados de uma página para um iterador associado a um buffer de pipe. No contexto da comunicação entre processos via pipes, quando um processo escreve dados em um pipe, eles precisam ser copiados para o buffer do pipe para que possam ser lidos por outro processo. A função "copy_page_to_iter_pipe" facilita esse processo de cópia, garantindo que os dados sejam transferidos corretamente e eficientemente entre os processos. Dentro desta função, o parâmetro "flags" é utilizado para especificar ou controlar certos atributos ou comportamentos relacionados ao processo de cópia. Essas flags podem incluir opções como se deve realizar verificações ou validações adicionais, como lidar com tipos específicos de dados ou se deve aplicar otimizações para eficiência.
  2. push_pipe: A função "push_pipe" está envolvida em empurrar dados para o buffer do pipe. Quando um processo escreve dados em um pipe, os dados precisam ser inseridos no buffer do pipe, onde podem então ser lidos por outro processo. A função "push_pipe" é responsável por lidar com esse processo de inserção, garantindo que os dados sejam colocados corretamente no buffer e disponibilizados para leitura por outros processos.

Página | 1

Max Kellermann descobriu que o kernel Linux lidava incorretamente com pipes Unix. A vulnerabilidade surge devido à inicialização inadequada de certos atributos, especificamente o parâmetro "flags", dentro das funções "copy_page_to_iter_pipe" e "push_pipe". Essa omissão leva à possibilidade de valores obsoletos ou incorretos serem atribuídos às flags, comprometendo potencialmente a segurança e a integridade do sistema. Um usuário local não privilegiado poderia usar essa falha para escrever em páginas no cache de página apoiadas por arquivos somente leitura e, assim, escalar seus privilégios no sistema.

Metodologia de Ataque

É semelhante ao CVE-2016-5195 “Dirty Cow”, mas é mais fácil de explorar. A exploração do CVE-2022-0847 requer acesso local ao sistema alvo e afeta versões do kernel Linux mais recentes que a 5.8. Podemos criar novos buffers de pipe com a flag PIPE_BUF_FLAG_CAN_MERGE incorretamente definida devido à falta de inicialização adequada. Essa flag controla a coalescência de escritas em um buffer de pipe e, portanto, permite escrever em uma página existente emendada no pipe. Se um arquivo permitir essa página emendada, a modificação será vista na visão compartilhada em todo o sistema do arquivo na memória. Qualquer liberação de cache posterior ignorará as configurações atuais de permissões do Linux e copiará os dados alterados para o disco. Isso permitiria que um usuário sem privilégios alterasse conteúdos específicos de um arquivo (seja em disco ou na memória), mesmo que o arquivo esteja protegido contra modificação por controles de acesso somente leitura como SELinux, permissões padrão do Linux, controle de acesso avançado e arquivos imutáveis. Portanto, podemos assumir que o atacante seria qualquer usuário local sem privilégios com conhecimento básico de sistemas Linux e capacidade de executar código malicioso. Tal indivíduo poderia escalar seus privilégios e potencialmente comprometer todo o sistema, representando um risco significativo de segurança.

Prova de conceito

Abaixo estão as etapas que segui para explorar o CVE-2022-0847 em uma máquina virtual rodando Linux.

  1. Verificando se sua Distribuição Linux pode ser explorada-

    Qualquer kernel Linux mais recente que 5.8 é afetado. No entanto, as versões 5.16.11, 5.15.25 e 5.10.102 não podem ser exploradas para o CVE-2022-0847. Para descobrir sua versão do kernel, podemos simplesmente executar *uname -r*. Você também pode executar este script bash se não tiver certeza se um sistema alvo é vulnerável ou não.

  2. Baixando o kernel Linux correto-

    Para a demonstração, decidi usar Ubuntu 20.04.1 LTS. Mas esta versão do Ubuntu atualmente roda no kernel Linux 5.15 e o CVE-2022-0847 não pode ser explorado nesta versão do kernel. Para baixar o kernel Linux 5.8, podemos simplesmente executar *sudo apt install linux-image-5.8.0-63-generic linux-headers-5.8.0-63-generic*

  3. Baixando o exploit-

    O exploit pode ser encontrado no GitHub. Ele demonstra como sobrescrever qualquer conteúdo de arquivo no cache de página, mesmo que o arquivo não tenha permissão para ser escrito, seja imutável ou esteja em um ponto de montagem somente leitura. Você também pode executar *git clone[ https://github.com/karanlvm/Infosec.git* ](https://github.com/karanlvm/Infosec.git%60)*no terminal.

  4. Copiando o arquivo passwd original-

    Podemos executar *cp /etc/passwd /tmp/passwd.bak*. Isso nos ajudará a identificar a diferença no arquivo passwd antes e depois de executar o exploit.

  5. Compilando o exploit-

    Para compilar o exploit com sucesso, você precisará ter o GCC instalado. Você pode instalar o GCC com *sudo apt-get install gcc*. Para compilar o exploit, você pode executar

Limitações

Existem duas limitações principais deste exploit:

  1. O deslocamento não pode estar em um limite de página (é necessário escrever pelo menos um byte antes do deslocamento)
  2. A escrita não pode cruzar um limite de página. Isso significa que a carga útil deve ser menor que 4096 bytes (tamanho da página).

Status Atual e Remediação

Em 12/01/2024, a probabilidade de atividade de exploração nos próximos 30 dias é de 7,58% (Exploit prediction scoring system (EPSS)). Abaixo está o CVSS (Common Vulnerability Scoring System) para o CVE-2022-0487:

Esta vulnerabilidade pode ser explorada em qualquer kernel Linux mais recente que 5.8. No entanto, a vulnerabilidade foi corrigida no Linux 5.16.11, 5.15.25 e 5.10.102. Portanto, podemos simplesmente aplicar os patches ou atualizações fornecidos pelos mantenedores da distribuição Linux para corrigir a vulnerabilidade. Para fazer isso, podemos apenas executar os seguintes comandos *sudo apt update* e *sudo apt upgrade*.

Referências

  1. “2022-0847: Uma falha foi encontrada na maneira como o membro ‘Flags’ da nova estrutura de buffer de pipe estava sem inicialização adequada em Cop.” Detalhes da CVE, www.cvedetails.com/cve/CVE-2022-0847/. Acessado em 24 abr. 2024.
  2. Kellermann, Max. “A Vulnerabilidade Dirty Pipe.” A Vulnerabilidade Dirty Pipe - Documentação da Vulnerabilidade Dirty Pipe, 7 mar. 2022, dirtypipe.cm4all.com/.
  3. MITRE Corporation*. “CVE-2022-0847.”* CVE, 3 mar. 2022, cve.mitre.org/cgi-bin/cvename.cgi?name=CVE- 2022-0847.
  4. National Institute of Standards and Technology.” CVE-2022-0847.” NVD, 3 out. 2022, nvd.nist.gov/vuln/detail/cve-2022-0847.
  5. “Piping no Unix ou Linux.” GeeksforGeeks, GeeksforGeeks, 5 jul. 2023, www.geeksforgeeks.org/piping-in- unix-or-linux/. Página | 5
Baixar ferramenta
*gcc exp.c -o exp*
  • Executando o exploit-

    Para executar o exploit, os parâmetros que precisam ser fornecidos são o arquivo somente leitura, o deslocamento e alguns caracteres que serão inseridos. Neste caso, executaremos *./exp /etc/passwd 1 ootz:* . Se você obtiver uma saída que diz “It worked !”, significa que exploramos com sucesso a vulnerabilidade Dirty Pipe e agora podemos obter acesso root sem a senha.

  • Alternando para acesso root-

    Agora podemos simplesmente executar *su rootz* e devemos ter acesso root. Para confirmar, podemos executar o comando id.