Low Risk — Risk Score 5/100
Last scan:2 days ago Rescan
5 /100
bilibili-all-in-one
Comprehensive Bilibili toolkit integrating hot trending monitoring, video downloading, subtitle downloading, playback/danmaku, and video publishing capabilities
A legitimate Bilibili API toolkit with well-documented credential handling and network endpoints; the pre-scan hardcoded-IP flag is a false positive — all URLs use HTTPS domain names. No malicious patterns detected.
Skill Namebilibili-all-in-one
Duration57.2s
Enginepi
Safe to install
Safe to use. Ensure users provide credentials via environment variables rather than files, and use a test account since SESSDATA/bili_jct are full session cookies.

Findings 4 items

Severity Finding Location
Low
Pre-scan hardcoded-IP flag is a false positive
The pre-scan IOC flagged '120.0.0.0' at src/utils.py:55 as a hardcoded IP address. Inspection of the actual file shows all API endpoints use HTTPS domain names (api.bilibili.com, member.bilibili.com, etc.). The pre-scan may have miscounted line numbers or scanned a different file version. No hardcoded IP addresses exist in the code.
API_SUBTITLE = f"{API_BASE}/x/player/v2"  # Uses domain-based API_BASE
→ No action needed. The hardcoded-IP flag is a false positive.
src/utils.py:55
Info
Subprocess (ffmpeg) not declared in SKILL.md
downloader.py uses asyncio.create_subprocess_exec('ffmpeg') to merge video and audio streams. This shell execution is not declared in the SKILL.md capability declarations.
proc = await asyncio.create_subprocess_exec('ffmpeg', '-y', '-i', video_path, '-i', audio_path, '-c', 'copy', output_path, ...)
→ Add ffmpeg to the install requirements documentation. Consider declaring shell:WRITE capability in SKILL.md.
src/downloader.py:373
Info
Browser opens local captcha page not declared as capability
publisher.py's delete_with_captcha starts a local HTTP server and opens the user's browser via webbrowser.open(). This browser interaction is documented in SKILL.md but not declared in the allowed-tools capability mapping.
webbrowser.open(f"http://127.0.0.1:{port}")
→ This is documented and intentional (Bilibili captcha verification), but the browser:WRITE capability should be added to SKILL.md for completeness.
src/publisher.py:702
Info
Filesystem WRITE not fully declared in capability matrix
SKILL.md declares filesystem:READ but the skill writes downloaded videos, subtitle files, and optionally credentials to disk. These are all documented features, just not reflected in the declared capability level.
Multiple file write operations for downloads, subtitles, and credential files
→ Update SKILL.md to declare filesystem:WRITE since the skill legitimately writes files as part of its core functionality.
src/downloader.py, src/subtitle.py, src/auth.py
ResourceDeclaredInferredStatusEvidence
Network READ READ ✓ Aligned SKILL.md declares HTTPS to Bilibili APIs only; code uses httpx/aiohttp to api.bi…
Filesystem READ WRITE ✓ Aligned SKILL.md lists 'Read' for filesystem but code writes downloaded videos (download…
Environment READ READ ✓ Aligned auth.py reads BILIBILI_SESSDATA, BILIBILI_BILI_JCT, BILIBILI_BUVID3 from os.envi…
Shell NONE WRITE ✓ Aligned downloader.py:373 calls asyncio.create_subprocess_exec('ffmpeg') for video/audio…
Skill Invoke NONE NONE No skill_invoke usage detected
Clipboard NONE NONE No clipboard access detected
Browser NONE WRITE ✓ Aligned publisher.py:delete_with_captcha opens user browser via webbrowser.open() to htt…
Database NONE NONE No database access detected
1 High 29 findings
📡
High IP Address 硬编码 IP 地址
120.0.0.0
src/utils.py:55
🔗
Medium External URL 外部 URL
https://img.shields.io/badge/python-%3E%3D3.8-blue?logo=python&logoColor=white
README.md:8
🔗
Medium External URL 外部 URL
https://img.shields.io/badge/license-MIT-green
README.md:9
🔗
Medium External URL 外部 URL
https://img.shields.io/badge/version-1.0.9-orange
README.md:10
🔗
Medium External URL 外部 URL
https://img.shields.io/badge/platform-Bilibili-pink
README.md:11
🔗
Medium External URL 外部 URL
https://www.bilibili.com
README.md:98
🔗
Medium External URL 外部 URL
https://www.bilibili.com/video/BVxxxxxx
README.md:211
🔗
Medium External URL 外部 URL
https://clawhub.ai/Jacobzwj/bilibili-hot-monitor
README.md:442
🔗
Medium External URL 外部 URL
https://clawhub.ai/caiyundc880518/bililidownloader
README.md:443
🔗
Medium External URL 外部 URL
https://clawhub.ai/donnycui/bilibili-youtube-watcher
README.md:444
🔗
Medium External URL 外部 URL
https://clawhub.ai/DavinciEvans/bilibili-subtitle-download-skill
README.md:445
🔗
Medium External URL 外部 URL
https://clawhub.ai/e421083458/bilibili-player
README.md:446
🔗
Medium External URL 外部 URL
https://clawhub.ai/Johnnyxu820/bilibili-video-publish
README.md:447
🔗
Medium External URL 外部 URL
https://www.bilibili.com/video/BV1xx411c7mD
skill.json:137
🔗
Medium External URL 外部 URL
https://www.bilibili.com/video/
src/downloader.py:102
🔗
Medium External URL 外部 URL
https://member.bilibili.com/preupload
src/publisher.py:19
🔗
Medium External URL 外部 URL
https://upos-sz-upcdnbda2.bilivideo.com
src/publisher.py:20
🔗
Medium External URL 外部 URL
https://member.bilibili.com
src/publisher.py:21
🔗
Medium External URL 外部 URL
https://passport.bilibili.com/x/passport-login/captcha
src/publisher.py:27
🔗
Medium External URL 外部 URL
https://static.geetest.com/static/js/gt.0.4.9.js
src/publisher.py:73
🔗
Medium External URL 外部 URL
https://member.bilibili.com/
src/publisher.py:640
🔗
Medium External URL 外部 URL
http://127.0.0.1:
src/publisher.py:702
🔗
Medium External URL 外部 URL
https://upos-sz-upcdnbda2.bilivideo.com/
src/publisher.py:821
🔗
Medium External URL 外部 URL
https://api.bilibili.com
src/utils.py:13
🔗
Medium External URL 外部 URL
https://b23.tv/BV1xx411c7mD
tests/test_comprehensive.py:143
🔗
Medium External URL 外部 URL
https://www.bilibili.com/video/av12345
tests/test_comprehensive.py:160
🔗
Medium External URL 外部 URL
https://www.example.com/video
tests/test_comprehensive.py:228
🔗
Medium External URL 外部 URL
http://cover.jpg
tests/test_comprehensive.py:447
🔗
Medium External URL 外部 URL
http://face.jpg
tests/test_comprehensive.py:448

File Tree

18 files · 270.0 KB · 7607 lines
Python 13f · 6123L Markdown 3f · 1106L JSON 1f · 372L Text 1f · 6L
├─ 📁 src
│ ├─ 🐍 __init__.py Python 19L · 515 B
│ ├─ 🐍 auth.py Python 158L · 5.0 KB
│ ├─ 🐍 downloader.py Python 443L · 14.5 KB
│ ├─ 🐍 hot_monitor.py Python 241L · 7.2 KB
│ ├─ 🐍 player.py Python 392L · 11.9 KB
│ ├─ 🐍 publisher.py Python 1045L · 36.3 KB
│ ├─ 🐍 subtitle.py Python 730L · 23.7 KB
│ ├─ 🐍 utils.py Python 237L · 6.1 KB
│ └─ 🐍 watcher.py Python 310L · 9.7 KB
├─ 📁 tests
│ ├─ 🐍 __init__.py Python 1L · 16 B
│ ├─ 🐍 test_all_skill_examples.py Python 854L · 34.9 KB
│ └─ 🐍 test_comprehensive.py Python 1537L · 63.6 KB
├─ 🐍 main.py Python 156L · 5.1 KB
├─ 📝 README.md Markdown 480L · 15.4 KB
├─ 📄 requirements.txt Text 6L · 109 B
├─ 📋 skill.json JSON 372L · 13.3 KB
├─ 📝 skill.md Markdown 610L · 21.9 KB
└─ 📝 STRUCTURE.md Markdown 16L · 794 B

Dependencies 6 items

PackageVersionSourceKnown VulnsNotes
httpx >=0.24.0 pip No Version range, not pinned
bilibili-api-python >=16.0.0 pip No Version range, not pinned
aiohttp >=3.8.0 pip No Version range, not pinned
beautifulsoup4 >=4.12.0 pip No Version range, not pinned
lxml >=4.9.0 pip No Version range, not pinned
requests >=2.31.0 pip No Version range, not pinned

Security Positives

✓ All network requests go to documented Bilibili official API domains over HTTPS (api.bilibili.com, member.bilibili.com, upos-sz-upcdnbda2.bilivideo.com)
✓ No base64-encoded payloads, reverse shells, or code injection patterns found
✓ No credential exfiltration — credentials are only sent to Bilibili's own APIs
✓ SKILL.md provides comprehensive security documentation including credential scope, best practices, and network endpoint list
✓ Credentials are not persisted to disk by default (requires explicit save_to_file() call)
✓ Saved credential files use restrictive 0600 permissions
✓ Subprocess (ffmpeg) is used only for legitimate video merging and is documented
✓ No sensitive path access (no ~/.ssh, ~/.aws, .env scanning)
✓ The pre-scan hardcoded-IP flag (120.0.0.0) is confirmed as a false positive — no IP literals in code
✓ All imports are standard PyPI packages with no known malicious indicators
✓ Strong input sanitization: sanitize_filename() removes invalid characters and limits filename length to 200 chars
✓ Local HTTP server for captcha only binds to 127.0.0.1 (not exposed externally) and auto-closes after verification