安全决策报告

asiasea-bi

BI数据代理工具通过Base64编码将API凭证嵌入可公开访问的HTML报告中,绕过文档声明的凭证隔离机制,存在认证令牌外泄风险。

安装决策优先 来源: 手动上传 扫描时间: 2026/4/5
文件 5
IOC 11
越权项 2
发现 4
最直接的威胁证据
01
用户通过自然语言查询BI数据,触发handle函数 初始入口 · main.py
02
获取业务系统认证令牌并存入session 权限提升 · main.py
03
generate_html_report将API URL和auth headers base64编码嵌入HTML 权限提升 · main.py

为什么得出这个结论

2/4 个维度触发
阻止
声明与实际能力

发现 2 项声明之外的能力或越权行为。

复核
隐藏执行与外联

提取到 11 个一般风险产物,需要结合上下文判断。

阻止
攻击链与高危发现

报告包含 4 步攻击链,另有 2 项高危或严重发现。

复核
依赖与供应链卫生

发现 1 项需要关注的依赖或供应链线索。

攻击链

01
用户通过自然语言查询BI数据,触发handle函数

初始入口 · main.py:373

02
获取业务系统认证令牌并存入session

权限提升 · main.py:130

03
generate_html_report将API URL和auth headers base64编码嵌入HTML

权限提升 · main.py:167

04
HTML报告上传至OSS公开访问,攻击者获取预览URL后可提取凭证调用业务API

最终危害 · main.py:112

风险分是怎么被拉高的

凭证混淆编码 +25

main.py:167-170 使用base64编码API配置,注释称'防止非技术人员读取',实际目的是隐藏凭证传输

凭证外泄HTML报告 +25

main.py:172 将包含auth headers的完整配置base64编码后嵌入可公开访问的HTML报告,任何人可通过预览URL获取凭证

阴影功能-文档未声明 +10

SKILL.md声称'凭证隔离'和'静态DOM快照安全',但代码将凭证嵌入HTML并通过fetch直连业务API

最关键的证据

高危 凭证窃取

API认证凭证通过Base64编码嵌入可公开访问的HTML

generate_html_report函数将包含完整API URL和认证headers的配置对象base64编码后嵌入HTML报告。<script>标签内通过atob()解码并使用fetch直连业务API(e.asagroup.cn)。这意味着任何获得报告预览URL的人都可以提取凭证并调用后端系统。

main.py:167-172
禁止将认证凭证嵌入客户端资源。使用服务端代理模式:客户端仅提交查询参数,服务端持有凭证并转发请求。
高危 文档欺骗

文档声明与实际行为严重不符

SKILL.md声称'凭证隔离,确保核心物理数据的绝对安全',但代码实际将凭证通过base64编码嵌入HTML,客户端可直接访问业务API。这构成典型的文档欺骗行为。

SKILL.md:1-36
文档必须如实描述凭证处理方式。若功能需要客户端直连API,应使用短期令牌而非持久凭证。
中危 代码混淆

代码混淆以规避人工审查

代码注释'混淆 API 配置,防止非技术人员直接读取明文 Token'表明有意隐藏凭证传输行为。这种混淆在正常业务代码中无合理理由。

main.py:167
添加混淆行为的合理解释或移除该机制。凭证应通过安全通道传递而非编码隐藏。
中危 供应链

外部CDN依赖且无完整性校验

HTML报告从jindengta-archive.oss-cn-beijing.aliyuncs.com加载ECharts库,无SRI(subresource integrity)校验,存在CDN被篡改或供应链攻击风险。

main.py:167
优先使用本地静态资源或npm包内嵌。若必须使用CDN,添加SRI校验。

声明能力 vs 实际能力

网络访问 阻止
声明 READ
推断 WRITE
main.py:167-172 将API凭证编码后嵌入HTML,通过客户端fetch外传
文件系统 阻止
声明 NONE
推断 READ
main.py:25-45 读写.session_{user_id}.json存储认证令牌

可疑产物与外联

中危 外部 URL
https://o.yayuit.cn/dw/api/auth/supported-systems

main.py:84

中危 外部 URL
https://o.yayuit.cn/dw/api/system/api-registry?system_id=

main.py:93

中危 外部 URL
https://o.yayuit.cn/dw/api/auth/system-token?system_id=

main.py:102

中危 外部 URL
https://o.yayuit.cn/dw/api/skills/archive/upload

main.py:112

中危 外部 URL
https://o.yayuit.cn/dw/api/skills/archive/publish

main.py:125

中危 外部 URL
https://jindengta-archive.oss-cn-beijing.aliyuncs.com/theme/web/bi/echarts.min.js

main.py:167

中危 外部 URL
https://e.asagroup.cn/asae-e/yearBudget/query

main.py:598

中危 外部 URL
https://e.asagroup.cn/asae-e/bx

main.py:609

中危 外部 URL
https://o.yayuit.cn/dw/api/system/api-registry

skill.json:10

中危 外部 URL
https://o.yayuit.cn/dw/api/auth/system-token

skill.json:11

提示 邮箱
[email protected]

README.md:32

依赖与供应链

包名版本来源漏洞备注
requests * pip 第三方HTTP库,无版本锁定
jindengta-archive.oss-cn-beijing.aliyuncs.com/echarts.min.js unknown CDN 外部CDN资源,无SRI校验

文件构成

5 个文件 · 779 行
Python 1 个文件 · 652 行Markdown 3 个文件 · 111 行JSON 1 个文件 · 16 行
需关注文件 · 4
main.py Python · 652 行
API认证凭证通过Base64编码嵌入可公开访问的HTML · 代码混淆以规避人工审查 · 外部CDN依赖且无完整性校验 · https://o.yayuit.cn/dw/api/auth/supported-systems · https://o.yayuit.cn/dw/api/system/api-registry?system_id= · https://o.yayuit.cn/dw/api/auth/system-token?system_id= · https://o.yayuit.cn/dw/api/skills/archive/upload · https://o.yayuit.cn/dw/api/skills/archive/publish · https://jindengta-archive.oss-cn-beijing.aliyuncs.com/theme/web/bi/echarts.min.js · https://e.asagroup.cn/asae-e/yearBudget/query · https://e.asagroup.cn/asae-e/bx
README.md Markdown · 43 行
SKILL.md Markdown · 36 行
文档声明与实际行为严重不符
skill.json JSON · 16 行
https://o.yayuit.cn/dw/api/system/api-registry · https://o.yayuit.cn/dw/api/auth/system-token
其他文件 · LICENSE.md

安全亮点

会话管理采用用户隔离,session文件名经过sanitize处理
时间解析支持多种自然语言表达,覆盖常用场景
错误处理较完善,有try-except和业务层code校验
使用类型提示增加代码可读性