安全决策报告
tingdong-skill
文章转播客 API 客户端工具,功能正常,隐私外传已声明,缺少依赖锁定为轻微瑕疵
为什么得出这个结论
1/4 个维度触发 通过
声明与实际能力
声明资源与推断能力基本一致。
阻止
隐藏执行与外联
提取到 1 个高危 IOC 或外联信号。
通过
攻击链与高危发现
没有形成明确的恶意路径。
复核
依赖与供应链卫生
发现 1 项需要关注的依赖或供应链线索。
风险分是怎么被拉高的
数据外传至第三方服务器 +10
用户文章内容发送至 111.229.22.145,但已在隐私说明中声明
缺少依赖锁定 +5
monitor.py 使用 requests 库但无 requirements.txt,pip install 无版本锁定
HTTP 非 HTTPS +5
API 通信使用 HTTP 明文传输,存在中间人攻击风险
最关键的证据
低危 数据外泄
文章内容外传至第三方服务器
用户提交的文章链接/内容会被发送至第三方服务器 111.229.22.145:8092 进行 AI 分析和语音合成。虽然 SKILL.md:158-161 隐私说明中有声明,但用户可能未充分注意此风险。
SKILL.md:54 在触发时再次提醒用户数据将发送至外部服务器
低危 供应链
缺少依赖锁定文件
monitor.py 使用 requests 库但项目缺少 requirements.txt 或 Pipfile,pip install 无版本锁定,可能引入依赖漏洞。
scripts/monitor.py:4 添加 requirements.txt 或 pyproject.toml 锁定依赖版本
提示 敏感访问
硬编码第三方 IP 地址
111.229.22.145 为中国境内 IP,代码中多处硬编码该地址。用户无法轻易审计该服务器的安全性和数据处理政策。
SKILL.md:54 考虑支持 HTTPS 并提供服务器域名而非 IP,提高可审计性
声明能力 vs 实际能力
文件系统 通过
声明 NONE
→ 推断 NONE
generate_podcast.py:1-102, monitor.py:1-86 - 无文件写入操作,仅读取环境变量 网络访问 通过
声明 WRITE
→ 推断 WRITE
SKILL.md:54 声明调用外部 REST API,代码通过 urllib/requests 发送 HTTP 请求 环境变量 通过
声明 READ
→ 推断 READ
generate_podcast.py:18-19 读取 TINGDONG_API_URL 和 TINGDONG_API_TOKEN 命令执行 通过
声明 NONE
→ 推断 NONE
代码仅使用 urllib 和 requests,无 shell 执行 可疑产物与外联
高危 IP 地址
111.229.22.145 SKILL.md:54
中危 外部 URL
http://111.229.22.145:8092 SKILL.md:54
中危 外部 URL
https://mp.weixin.qq.com/s/xxxxx SKILL.md:61
中危 外部 URL
http://111.229.22.145:8092/api/v1/podcast/submit SKILL.md:66
中危 外部 URL
http://111.229.22.145:8092/api/v1/podcast/td_20260820_103528_d9ea7fd1 SKILL.md:82
中危 外部 URL
http://111.229.22.145:8092/tingdongle/audio/xxx.mp3 SKILL.md:88
中危 外部 URL
http://111.229.22.145:8092/api/v1/podcast/batch SKILL.md:111
中危 外部 URL
https://zhuanlan.zhihu.com/p/xxxxx SKILL.md:124
中危 外部 URL
http://111.229.22.145:8092/tingdongle/audio/ SKILL.md:163
中危 外部 URL
http://111.229.22.145:8092/api/v1 references/api_docs.md:5
中危 外部 URL
http://111.229.22.145:8092/tingdongle/audio/13178f73201e.mp3 references/api_docs.md:95
中危 外部 URL
https://mp.weixin.qq.com/s/xxxxxxxx references/content_sources.md:9
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| requests | * | pip | 否 | monitor.py 依赖 requests 库但无版本锁定,建议添加 requirements.txt |
文件构成
7 个文件 · 648 行
Markdown 4 个文件 · 455 行Python 2 个文件 · 188 行JSON 1 个文件 · 5 行
需关注文件 · 4
SKILL.md 文章内容外传至第三方服务器 · 硬编码第三方 IP 地址 · 111.229.22.145 · http://111.229.22.145:8092 · https://mp.weixin.qq.com/s/xxxxx · http://111.229.22.145:8092/api/v1/podcast/submit · http://111.229.22.145:8092/api/v1/podcast/td_20260820_103528_d9ea7fd1 · http://111.229.22.145:8092/tingdongle/audio/xxx.mp3 · http://111.229.22.145:8092/api/v1/podcast/batch · https://zhuanlan.zhihu.com/p/xxxxx · http://111.229.22.145:8092/tingdongle/audio/
references/api_docs.md http://111.229.22.145:8092/api/v1 · http://111.229.22.145:8092/tingdongle/audio/13178f73201e.mp3
scripts/monitor.py 缺少依赖锁定文件
references/content_sources.md https://mp.weixin.qq.com/s/xxxxxxxx · https://mp.weixin.qq.com/s?__biz=xxx&mid=xxx · https://www.zhihu.com/question/xxx/answer/xxx · https://zhuanlan.zhihu.com/p/xxx
其他文件 · generate_podcast.py · TODO.md · _meta.json
安全亮点
纯 API 客户端,无本地恶意代码
代码逻辑清晰,无 shell 执行、凭证收割等危险操作
文档与代码行为一致,无影子功能
环境变量读取用于配置而非凭证收割
未访问敏感路径如 ~/.ssh、~/.aws、.env