
This repository contains a lab validation report and detection artefacts for DirtyFrag CVE-2026-43284, a Linux local privilege escalation issue related to the XFRM/ESP page-cache write path. The focus is on auditd telemetry, event correlation, and SOC-oriented detection logic.
Escopo: Validação de Escalação Local de Privilégios (LPE) no Linux focada no caminho XFRM/ESP associado à CVE-2026-43284.
Este repositório contém um relatório em inglês e artefatos de evidência de uma validação controlada em laboratório do PoC público DirtyFrag. O foco não é fornecer um guia de exploração, mas sim documentar o que era visível nos logs de auditoria do Linux e como esses eventos podem ser transformados em lógica prática de detecção para SOC.
Relatório PDF completo:
EN: reports/DirtyFrag_CVE-2026-43284_EN.pdf
PL: reports/DirtyFrag_CVE-2026-43284_PL.pdf
O teste foi realizado para verificar se um usuário local normal poderia obter um shell root em uma VM de laboratório vulnerável e para determinar quais eventos podem ser capturados com auditd.
A CVE-2026-43284 está relacionada ao manuseio inadequado de fragmentos de página compartilhados durante operações ESP/IPsec. Sob condições específicas, um atacante local pode influenciar dados no cache de páginas e escalar privilégios. A Ubuntu Security classifica essa vulnerabilidade como CVSS 3.1: 7.8 Alta.
| Vulnerabilidade | Escopo | Componente | CVSS |
|---|---|---|---|
| CVE-2026-43284 | Escrita no Cache de Páginas XFRM/ESP | XFRM / ESP, esp4/esp6 | 7.8 Alta |
Referências técnicas:
Linha de base completa do sistema: evidence/logs/system-info-table.md
Antes da execução do PoC, o contexto de teste era uma conta de usuário normal. Após executar ./exp, um shell root foi obtido e confirmado com whoami e id.

Após o teste, os logs do auditd e saídas resumidas foram exportados para um diretório de evidências local e copiados para este repositório.






A detecção mais útil não é um único evento. O sinal mais forte é a cadeia completa observada em uma janela de tempo curta:
user namespace -> vmsplice/splice -> ESP/XFRM -> su -> root shell with AUID of a normal user
IF
dirty_frag_unshare by auid>=1000
AND count(dirty_frag_vmsplice + dirty_frag_splice by same exe or pid) >= 3 within 600s
AND MAC_IPSEC_EVENT / XFRM activity within 1200s
AND (dirty_frag_su_exec OR execve with euid=0 and auid>=1000) within 1200s
THEN
alert = "Possible DirtyFrag CVE-2026-43284 Linux LPE"
severity = high/critical
euid=0; isso também captura o uso legítimo de sudo.unshare, vmsplice, splice, atividade XFRM/ESP, su e criação de processo root a partir de uma sessão de usuário normal.kernel.unprivileged_userns_clone onde a compatibilidade de aplicativos permitir.lost deve permanecer 0 durante testes e monitoramento em produção.O status coletado do auditd mostrou lost=2555, o que significa que alguns eventos de auditoria podem ter sido descartados. A cadeia principal ainda está visível, mas testes futuros devem aumentar o backlog de auditoria e confirmar lost=0 antes de executar o PoC.
O relatório foca intencionalmente em CVE-2026-43284 / XFRM/ESP para evitar misturar o escopo de detecção do SOC com outros caminhos relacionados ao DirtyFrag.
| Parâmetro | Valor |
|---|
| Distribuição | Ubuntu 24.04.4 LTS / noble |
| Kernel de teste | 6.17.0-23-generic |
| Arquitetura | x86_64 |
| Virtualização | Oracle VirtualBox |
| CPU | 12th Gen Intel(R) Core(TM) i5-12450H, 1 vCPU |
| RAM | 12 GiB |
| Sistema de arquivos raiz | ext4 |
| Usuário de teste | uid=1000(usuário), gid=1000(usuário), grupos incluem sudo, adm, lpadmin |
| unprivileged_userns_clone | 1 |
| auditd | ativo, regras de auditoria DirtyFrag/LPE carregadas |
| AppArmor | ativo; perfil unprivileged_userns visível nos logs |
| Caminho | Descrição |
|---|
docs/DirtyFrag_CVE-2026-43284_auditd_detection_report.docx | Relatório DOCX em inglês. |
evidence/logs/audit.log | Log completo do auditd contendo eventos brutos. |
evidence/logs/dirtyfrag-filtered.log | Log filtrado contendo eventos relacionados ao DirtyFrag/LPE. |
evidence/logs/dirty_frag_vmsplice.log | Eventos vmsplice do processo PoC. |
evidence/logs/dirty_frag_splice.log | Eventos splice do processo PoC. |
evidence/logs/dirty_frag_execve_su.log | Execução de /usr/bin/su após atividade do PoC. |
evidence/logs/lpe_root_exec_from_user_session.log | Processos executados como root a partir da sessão de usuário original. |
evidence/logs/audit-key-summary.txt | Resumo da contagem de eventos por chave auditd. |
evidence/logs/audit-exec-summary.txt | Resumo executável do aureport. |
evidence/logs/audit-rules-loaded.txt | Regras de detecção ativas do auditd. |
evidence/logs/system-info-table.md | Tabela de linha de base do sistema. |
evidence/screenshots/01-dirtyfrag-root-shell.png | Captura de tela confirmando a transição de shell de usuário para root. |
tools/generate-system-info-table.sh | Script auxiliar usado para gerar a tabela de informações do sistema. |
| Chave | Significado |
|---|
dirty_frag_unshare | unshare executado por um usuário não privilegiado; indica preparação de namespace de usuário. |
dirty_frag_vmsplice | Atividade de vmsplice de um processo de usuário; sinal principal de cache de páginas. |
dirty_frag_splice | Atividade de splice de um processo de usuário; correlacionada com vmsplice. |
dirty_frag_su_exec / dirty_frag_execve_su | Execução de /usr/bin/su após a fase de cache de páginas. |
lpe_root_exec_from_user_session | execve com euid=0 em uma sessão de propriedade de auid>=1000; forte evidência de LPE quando correlacionado. |
| Horário | Evento | Artefato | Significado |
|---|
| 21:10:48 | regras do auditd carregadas | audit-rules-loaded.txt, audit.log | Monitoramento estava ativo antes da execução do PoC. |
| 21:11:32 | unshare por ./exp | dirtyfrag-filtered.log | O processo de usuário entrou em unprivileged_userns. |
| 21:11:32-21:11:39 | vmsplice / splice por ./exp | dirty_frag_vmsplice.log, dirty_frag_splice.log | Comportamento de cache de páginas visível através da telemetria de syscall. |
| 21:11:32-21:11:39 | MAC_IPSEC_EVENT / XFRM ESP | audit.log | Eventos SAD-add e SA-icv-failure em 127.0.0.1 com SPI 0xdeadbeXX. |
| 21:11:39 | su - | dirty_frag_execve_su.log | Tentativa de entrar em um shell root após a execução do PoC. |
| 21:11:39 | sh / dash como root | lpe_root_exec_from_user_session.log | UID=root e EUID=root enquanto AUID=user. |
| 21:11:48 | whoami como root | lpe_root_exec_from_user_session.log, captura de tela | Confirmação manual da escalação bem-sucedida. |
| 21:11:49 | id como root | lpe_root_exec_from_user_session.log, captura de tela | Confirmação manual de uid=0(root). |