Suspicious — Risk Score 60/100
Last scan:10 hr ago Rescan
60 /100
asiasea-bi
金灯塔BI Skill - 企业异构系统动态映射与自然语言数据查询可视化
BI数据代理工具通过Base64编码将API凭证嵌入可公开访问的HTML报告中,绕过文档声明的凭证隔离机制,存在认证令牌外泄风险。
Skill Nameasiasea-bi
Duration52.5s
Enginepi
Use with caution
立即下架。API凭证不应以任何形式嵌入客户端可访问的资源。应使用服务端代理模式或短期令牌方案。

Attack Chain 4 steps

Entry 用户通过自然语言查询BI数据,触发handle函数
main.py:373
Escalation 获取业务系统认证令牌并存入session
main.py:130
Escalation generate_html_report将API URL和auth headers base64编码嵌入HTML
main.py:167
Impact HTML报告上传至OSS公开访问,攻击者获取预览URL后可提取凭证调用业务API
main.py:112

Findings 4 items

Severity Finding Location
High
API认证凭证通过Base64编码嵌入可公开访问的HTML Credential Theft
generate_html_report函数将包含完整API URL和认证headers的配置对象base64编码后嵌入HTML报告。<script>标签内通过atob()解码并使用fetch直连业务API(e.asagroup.cn)。这意味着任何获得报告预览URL的人都可以提取凭证并调用后端系统。
config_payload = json.dumps({"url": api_url, "headers": headers_dict, "metric": metric_key})
config_b64 = base64.b64encode(config_payload.encode('utf-8')).decode('utf-8')
→ 禁止将认证凭证嵌入客户端资源。使用服务端代理模式:客户端仅提交查询参数,服务端持有凭证并转发请求。
main.py:167-172
High
文档声明与实际行为严重不符 Doc Mismatch
SKILL.md声称'凭证隔离,确保核心物理数据的绝对安全',但代码实际将凭证通过base64编码嵌入HTML,客户端可直接访问业务API。这构成典型的文档欺骗行为。
系统生成的纯静态 DOM 快照严格落实凭证隔离,确保核心物理数据的绝对安全
→ 文档必须如实描述凭证处理方式。若功能需要客户端直连API,应使用短期令牌而非持久凭证。
SKILL.md:1-36
Medium
代码混淆以规避人工审查 Obfuscation
代码注释'混淆 API 配置,防止非技术人员直接读取明文 Token'表明有意隐藏凭证传输行为。这种混淆在正常业务代码中无合理理由。
# 混淆 API 配置,防止非技术人员直接读取明文 Token
→ 添加混淆行为的合理解释或移除该机制。凭证应通过安全通道传递而非编码隐藏。
main.py:167
Medium
外部CDN依赖且无完整性校验 Supply Chain
HTML报告从jindengta-archive.oss-cn-beijing.aliyuncs.com加载ECharts库,无SRI(subresource integrity)校验,存在CDN被篡改或供应链攻击风险。
echarts_url = "https://jindengta-archive.oss-cn-beijing.aliyuncs.com/theme/web/bi/echarts.min.js"
→ 优先使用本地静态资源或npm包内嵌。若必须使用CDN,添加SRI校验。
main.py:167
ResourceDeclaredInferredStatusEvidence
Network READ WRITE ✗ Violation main.py:167-172 将API凭证编码后嵌入HTML,通过客户端fetch外传
Filesystem NONE READ ✗ Violation main.py:25-45 读写.session_{user_id}.json存储认证令牌
11 findings
🔗
Medium External URL 外部 URL
https://o.yayuit.cn/dw/api/auth/supported-systems
main.py:84
🔗
Medium External URL 外部 URL
https://o.yayuit.cn/dw/api/system/api-registry?system_id=
main.py:93
🔗
Medium External URL 外部 URL
https://o.yayuit.cn/dw/api/auth/system-token?system_id=
main.py:102
🔗
Medium External URL 外部 URL
https://o.yayuit.cn/dw/api/skills/archive/upload
main.py:112
🔗
Medium External URL 外部 URL
https://o.yayuit.cn/dw/api/skills/archive/publish
main.py:125
🔗
Medium External URL 外部 URL
https://jindengta-archive.oss-cn-beijing.aliyuncs.com/theme/web/bi/echarts.min.js
main.py:167
🔗
Medium External URL 外部 URL
https://e.asagroup.cn/asae-e/yearBudget/query
main.py:598
🔗
Medium External URL 外部 URL
https://e.asagroup.cn/asae-e/bx
main.py:609
🔗
Medium External URL 外部 URL
https://o.yayuit.cn/dw/api/system/api-registry
skill.json:10
🔗
Medium External URL 外部 URL
https://o.yayuit.cn/dw/api/auth/system-token
skill.json:11
📧
Info Email 邮箱地址
[email protected]
README.md:32

File Tree

5 files · 41.8 KB · 779 lines
Python 1f · 652L Markdown 3f · 111L JSON 1f · 16L
├─ 📝 LICENSE.md Markdown 32L · 3.1 KB
├─ 🐍 main.py Python 652L · 33.7 KB
├─ 📝 README.md Markdown 43L · 2.8 KB
├─ 📋 skill.json JSON 16L · 681 B
└─ 📝 SKILL.md Markdown 36L · 1.6 KB

Dependencies 2 items

PackageVersionSourceKnown VulnsNotes
requests * pip No 第三方HTTP库,无版本锁定
jindengta-archive.oss-cn-beijing.aliyuncs.com/echarts.min.js unknown CDN No 外部CDN资源,无SRI校验

Security Positives

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