link-resolver-engine
合法的 Bilibili/抖音视频下载工具,包含未声明的 Playwright/Chromium 安装行为和 ffmpeg 自动下载,属于中等供应链风险,但未发现恶意行为。
Why this conclusion was reached
2/4 dimensions flagged2 undeclared or violating capabilities were inferred.
3 high-risk artifacts or egress signals were extracted.
There is no explicit malicious chain in the report.
6 dependency or supply-chain issues need attention.
What drove the risk score up
bilibili_video.py:56 和 douyin_video.py:42 均调用 subprocess 安装 playwright chromium,SKILL.md 仅声明 python 二进制
video_snapper.py 通过 ffmpeg-downloader 从 gyan.dev/johnvansickle/evermeet.cx 下载二进制,未在文档中声明
ensure_package.py 安装 requests、playwright、yt-dlp 等均使用通配符版本
Most important evidence
未声明的 Playwright/Chromium 运行时安装
bilibili_video.py 和 douyin_video.py 在导入时均调用 subprocess.check_call 安装 playwright chromium,SKILL.md 仅声明 python 依赖,未提及浏览器内核下载。Chromium 二进制约 100-300MB,从 Google 官方 CDN 下载,存在供应链劫持风险。
scripts/bilibili_video.py:56 未声明的 ffmpeg 自动下载
video_snapper.py 调用 ffmpeg-downloader 从 gyan.dev(Windows)、johnvansickle(Linux)、evermeet.cx(macOS)下载约 100MB 便携版 ffmpeg,SKILL.md 未声明此依赖。
scripts/video_snapper.py:46 pip 依赖无版本锁定
ensure_package.py 对 requests、playwright、yt-dlp、tf-playwright-stealth 等包使用无版本约束的 pip install,可能安装到存在已知漏洞的版本。
scripts/ensure_package.py:1 硬编码占位 IP 地址
预扫描发现 bilibili_video.py:131/278 和 douyin_video.py:85 存在硬编码占位 IP(120.0.0.0、125.0.0.0、134.0.0.0),经审查这些 IP 均未被用于实际网络请求,可能是开发期占位符代码。
scripts/bilibili_video.py:131 fix_setuptools_for_legacy_packages 强制重装打包工具
ensure_package.py:27 强制降级重装 packaging、setuptools、wheel,可能影响系统其他 Python 工具的稳定性。
scripts/ensure_package.py:27 Declared capability vs actual capability
bilibili_video.py:102-179 bilibili API 请求; douyin_video.py:77-142 douyin API/页面请求 bilibili_video.py:220-260 写入 downloads 目录; douyin_video.py:157 写入文件 bilibili_video.py:56 subprocess 安装 chromium; douyin_video.py:42 同; video_snapper.py:46 subprocess ffmpeg-downloader douyin_video.py:71-142 使用 playwright.chromium 无头浏览器 Suspicious artifacts and egress
120.0.0.0 scripts/bilibili_video.py:131
125.0.0.0 scripts/bilibili_video.py:278
134.0.0.0 scripts/douyin_video.py:85
https://api.bilibili.com/x/web-interface/nav scripts/bilibili_video.py:102
https://www.bilibili.com/ scripts/bilibili_video.py:132
https://www.bilibili.com scripts/bilibili_video.py:133
https://api.bilibili.com/x/web-interface/view?bvid= scripts/bilibili_video.py:144
https://api.bilibili.com/x/player/wbi/playurl scripts/bilibili_video.py:177
https://www.bilibili.com/video/BV1GYXKBzEvM/ scripts/bilibili_video.py:479
https://www.douyin.com/video/ scripts/douyin_video.py:77
https://www.douyin.com/ scripts/douyin_video.py:138
https://v.douyin.com/ezOqxZPY3kc/ scripts/douyin_video.py:224
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| playwright | * | pip | No | 无版本锁定;安装时自动下载 chromium(约 100-300MB) |
| tf-playwright-stealth | * | pip | No | 无版本锁定 |
| yt-dlp | * | pip | No | 无版本锁定 |
| requests | * | pip | No | 无版本锁定 |
| pydub | * | pip | No | 无版本锁定 |
| ffmpeg-downloader | * | pip | No | 无版本锁定;运行时从 gyan.dev/johnvansickle/evermeet.cx 下载 ffmpeg 二进制 |
File composition
scripts/bilibili_video.py scripts/douyin_video.py scripts/video_snapper.py scripts/ensure_package.py scripts/env_manager.py