Share
## https://sploitus.com/exploit?id=4481B11B-BBBA-51C7-AEFA-5E1BDFDBB9CA
# CVE-2026-24055 — Unauthenticated Slack OAuth Install in Langfuse
> **Đồ án môn Bảo mật Web và Ứng dụng** — Nhóm 06, lớp NT213.Q21.ANTT
---
## Mục lục
- [Mô tả lỗ hổng](#mô-tả-lỗ-hổng)
- [Yêu cầu hệ thống](#yêu-cầu-hệ-thống)
- [Chuẩn bị trước khi chạy](#chuẩn-bị-trước-khi-chạy)
- [Demo khai thác — Vulnerable v3.146.0](#demo-khai-thác--vulnerable-v3146)
- [Verify bản vá — Patched v3.147.0](#verify-bản-vá--patched-v3147)
- [Tắt môi trường](#tắt-môi-trường)
- [Tài liệu tham khảo](#tài-liệu-tham-khảo)
---
## Mô tả lỗ hổng
**CVE-2026-24055** là lỗ hổng **Improper Access Control** trong Langfuse từ phiên bản `3.89.0` đến `3.146.0`.
Endpoint `/api/public/slack/install` **không yêu cầu xác thực**, cho phép attacker bind Slack workspace của mình vào bất kỳ project nào chỉ cần biết `projectId`. Khi victim tạo automation gửi thông báo lên Slack, toàn bộ nội dung prompt sẽ bị rò rỉ sang workspace của attacker.
| Thuộc tính | Chi tiết |
|---|---|
| **CWE** | CWE-284 — Improper Access Control |
| **Phiên bản bị ảnh hưởng** | Langfuse `3.89.0` – `3.146.0` |
| **Phiên bản đã vá** | Langfuse `3.147.0` |
| **GitHub Advisory** | [GHSA-pvq7-vvfj-p98x](https://github.com/langfuse/langfuse/security/advisories/GHSA-pvq7-vvfj-p98x) |
| **NVD** | [CVE-2026-24055](https://nvd.nist.gov/vuln/detail/CVE-2026-24055) |
### Luồng tấn công
```
Attacker Langfuse (v3.146) Slack API
│ │ │
│── GET /api/public/slack/install ────▶│ │
│ ?projectId= │ │
│ (không cần đăng nhập) │ │
│ │── redirect OAuth ────────────▶│
│◀─────────────────────────────────────│ │
│ │ │
│── Allow (Slack workspace attacker) ─────────────────────────────────▶│
│ │◀── OAuth callback ────────────│
│ │ │
│ Bind workspace attacker vào project VICTIM │
│ │ │
╔══════════════════════════════════════╗
║ Victim tạo prompt mới ║
║ → Automation gửi Slack notification ║
║ → Attacker nhận nội dung prompt ✓ ║
╚══════════════════════════════════════╝
```
---
## Yêu cầu hệ thống
| Công cụ | Phiên bản tối thiểu |
|---|---|
| Docker Desktop | 24.0+ |
| Docker Compose | v2 |
| Git | bất kỳ |
| RAM | 8 GB |
---
## Chuẩn bị trước khi chạy
### Tạo Slack App
> Slack API cho phép sử dụng `http://localhost:3000` làm Redirect URL, **không cần ngrok**.
1. Vào [https://api.slack.com/apps](https://api.slack.com/apps) → **Create New App** → **From scratch**
2. Đặt tên app, chọn workspace
3. Vào **OAuth & Permissions** → **Redirect URLs** → thêm:
```
http://localhost:3000
```
4. Lưu lại **Client ID** và **Client Secret**
---
## Demo khai thác — Vulnerable v3.146
### Bước 1 — Cấu hình môi trường
```bash
cd vulnerable
cp .env.example .env
```
Mở file `.env`, điền các giá trị sau:
```env
NEXTAUTH_URL=http://localhost:3000
SLACK_CLIENT_ID=
SLACK_CLIENT_SECRET=
SLACK_STATE_SECRET=any-random-string
```
### Bước 2 — Khởi động Langfuse v3.146.0
```bash
docker compose up -d
```
Kiểm tra các container đã sẵn sàng:
```bash
docker compose ps
```
> Chờ khoảng 30–60 giây. Tất cả container phải ở trạng thái `Up (healthy)`.
### Bước 3 — Tạo tài khoản
Truy cập `http://localhost:3000`:
1. **Tài khoản Victim**
- Đăng ký tài khoản, tạo Organization → tạo Project
- Vào **Settings** → ghi lại **Project ID**
2. **Tài khoản Attacker**
- Mở tab ẩn danh, đăng ký tài khoản khác (hoặc **không đăng nhập**)
### Bước 4 — Thực hiện khai thác
Trên trình duyệt của attacker (**không cần đăng nhập Langfuse**), truy cập:
```
http://localhost:3000/api/public/slack/install?projectId=
```
Luồng diễn ra:
- Server **không kiểm tra xác thực**, redirect thẳng đến Slack OAuth
- Đăng nhập Slack workspace của attacker → click **Allow**
- Workspace của attacker đã được bind vào project của victim
### Bước 5 — Xác nhận dữ liệu bị rò rỉ
Đăng nhập với tài khoản **victim**:
1. Vào **Settings** → **Integrations** → kiểm tra Slack đã kết nối (workspace của attacker)
2. Tạo Automation: **Prompts** → **Automations** → **New**
- Trigger: `Prompt created / updated / deleted`
- Action: `Slack` → chọn channel
3. Victim tạo một prompt mới
4. Slack của attacker nhận thông báo chứa nội dung prompt
---
## Verify bản vá — Patched v3.147
### Bước 1 — Tắt môi trường cũ
```bash
cd ../vulnerable
docker compose down
```
### Bước 2 — Khởi động Langfuse v3.147.0
```bash
cd ../patched
cp .env.example .env
# Điền các giá trị giống phần vulnerable
docker compose up -d
```
### Bước 3 — Chạy lại khai thác
**Thử không đăng nhập:**
```
http://localhost:3000/api/public/slack/install?projectId=
```
Kết quả mong đợi — HTTP `401`:
```json
{ "error": "Authentication required" }
```
**Thử đăng nhập attacker, dùng projectId của victim:**
```
http://localhost:3000/api/public/slack/install?projectId=
```
Kết quả mong đợi — HTTP `403`:
```json
{ "error": "You do not have permission to configure Slack for this project" }
```
Lỗ hổng đã được vá hoàn toàn.
---
## Tắt môi trường
```bash
docker compose down
```
Nếu muốn xóa toàn bộ data (volumes):
```bash
docker compose down -v
```
---
## Cấu trúc thư mục
```
cve-2026-24055/
├── README.md ← file này
├── vulnerable/
│ ├── docker-compose.yml ← Langfuse v3.146.0 (có lỗ hổng)
│ └── .env.example
└── patched/
├── docker-compose.yml ← Langfuse v3.147.0 (đã vá)
└── .env.example
```
---
## Tài liệu tham khảo
- [GitHub Security Advisory — GHSA-pvq7-vvfj-p98x](https://github.com/langfuse/langfuse/security/advisories/GHSA-pvq7-vvfj-p98x)
- [NVD — CVE-2026-24055](https://nvd.nist.gov/vuln/detail/CVE-2026-24055)
- [Commit fix — 3adc89e](https://github.com/langfuse/langfuse/commit/3adc89e4d72729eabef55e46888b8ce80a7e3b0a)