
Đồ án môn Bảo mật Web và Ứng dụng — Nhóm 06, lớp NT213.Q21.ANTT
Dự án tái hiện lại (reproduce) một lỗ hổng bảo mật thực tế đã được công bố (CVE-2026-24055) trên nền tảng Langfuse — một endpoint OAuth cho phép kẻ tấn công chiếm quyền kết nối Slack workspace vào project của người khác mà không cần đăng nhập.
Dự án bao gồm: dựng môi trường Docker mô phỏng cả phiên bản có lỗ hổng và phiên bản đã vá, thực hiện khai thác từng bước, và xác minh bản vá hoạt động đúng. Qua đó thực hành phân tích lỗ hổng Access Control trong luồng OAuth, một kỹ năng áp dụng trực tiếp khi xây dựng hoặc audit các hệ thống xác thực web.
Kỹ năng thể hiện: phân tích luồng OAuth2, Docker, đọc security advisory, viết báo cáo kỹ thuật, kiểm thử bảo mật (security testing).
CVE-2026-24055 là lỗ hổng Improper Access Control trong Langfuse từ phiên bản 3.89.0 đến .
3.146.0Endpoint /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 |
| NVD | CVE-2026-24055 |

| 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 |
Slack API cho phép sử dụng
http://localhost:3000làm Redirect URL.
http://localhost:3000
cd vulnerable
cp .env.example .env
Mở file .env, điền các giá trị sau:
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
Kiểm tra các container đã sẵn sàng:
docker compose ps
Chờ khoảng 30–60 giây. Tất cả container phải ở trạng thái
Up (healthy).
Truy cập http://localhost:3000:
Tài khoản Victim
Tài khoản Attacker
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=<victim-project-id>
Luồng diễn ra:
Đăng nhập với tài khoản victim:
Prompt created / updated / deletedSlack → chọn channelcd ../vulnerable
docker compose down
cd ../patched
cp .env.example .env
# Điền các giá trị giống phần vulnerable
docker compose up -d
Thử không đăng nhập:
http://localhost:3000/api/public/slack/install?projectId=<any-project-id>
Kết quả mong đợi — HTTP 401:
{ "error": "Authentication required" }
Thử đăng nhập attacker, dùng projectId của victim:
http://localhost:3000/api/public/slack/install?projectId=<victim-project-id>
Kết quả mong đợi — HTTP 403:
{ "error": "You do not have permission to configure Slack for this project" }
Lỗ hổng đã được vá hoàn toàn.
docker compose down
Nếu muốn xóa toàn bộ data (volumes):
docker compose down -v
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