IPBUF安全漏洞报告
English
CVE-2026-29872 CVSS 8.2 高危

CVE-2026-29872 跨会话信息泄露漏洞

披露日期: 2026-03-30

漏洞信息

漏洞编号
CVE-2026-29872
漏洞类型
信息泄露
CVSS评分
8.2 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
awesome-llm-apps

相关标签

信息泄露awesome-llm-appsStreamlitSession IsolationCVE-2026-29872

漏洞概述

awesome-llm-apps项目中存在严重的跨会话信息泄露漏洞。该受影响的基于Streamlit的GitHub MCP Agent在处理用户提供的API令牌时,未能实现适当的会话隔离,直接将其存储在进程级的环境变量中。由于Streamlit框架在单一Python进程中服务多个并发用户,一名用户提供的凭证(如GitHub个人访问令牌或LLM API密钥)会在其会话结束后残留,导致后续未经身份认证的用户能够访问这些敏感信息。攻击者可利用此漏洞窃取凭证,进而导致未授权访问私有资源及潜在的财务滥用风险。

技术细节

该漏洞的根本原因在于应用程序错误地使用了Python的全局环境变量字典来存储敏感的用户凭据,而不是使用Streamlit提供的会话状态管理功能。在Streamlit的默认架构中,所有用户共享同一个Python后端进程。当受害者用户A在应用中输入API Token时,应用程序调用`os.environ`将该令牌设置为环境变量。由于这些变量存储在进程的全局命名空间中,它们在用户A的会话结束后并不会自动清除。此时,如果用户B(攻击者)访问该应用,他们可以通过读取环境变量或触发相关功能,检索到用户A留下的凭证。由于无需身份认证(PR:N)且无需用户交互(UI:N),攻击者可以自动化地扫描并窃取活跃会话中的敏感令牌。

攻击链分析

STEP 1
1. 发现目标
攻击者识别出运行了特定版本commit e46690f的awesome-llm-apps Streamlit应用程序。
STEP 2
2. 等待受害者操作
合法用户(受害者)访问该应用并输入敏感的API Token(如GitHub Token或LLM Key),应用将其存储在全局环境变量中。
STEP 3
3. 发起无认证访问
攻击者在受害者操作后,无需登录即可向同一应用发起请求。
STEP 4
4. 读取环境变量
由于Streamlit进程复用,攻击者通过应用功能或直接读取环境变量,获取到受害者留下的凭证。
STEP 5
5. 利用凭证
攻击者使用窃取的令牌访问受害者的私有仓库或消耗LLM API配额。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Conceptual PoC demonstrating the vulnerable logic import os import streamlit as st # Vulnerable: Storing user input in process-wide environment variable def store_user_token(token): os.environ['USER_API_TOKEN'] = token # Attacker's simple retrieval code (conceptual) def retrieve_leaked_token(): # Accessing the global environment variable leaked by a previous user return os.environ.get('USER_API_TOKEN') # Example usage in the vulnerable app user_input = st.text_input("Enter your API Key") if user_input: store_user_token(user_input) # Vulnerability occurs here

影响范围

awesome-llm-apps commit e46690f99c3f08be80a9877fab52acacf7ab8251

防御指南

临时缓解措施
建议立即停止在公网环境部署受影响版本的应用程序。如果必须使用,应确保通过容器化技术为每个用户会话提供独立的运行环境,防止进程级数据共享。

参考链接

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