Scan Report
45 /100
castreader
Read any web page aloud with natural AI voices. Extract article text from any URL and convert it to audio (MP3).
CastReader skill has undocumented network behavior, undeclared browser automation with anti-detection flags, and uses base64 audio processing that appears legitimate but warrants scrutiny.
Use with caution
Add explicit network:READ and browser declarations to SKILL.md. Remove --disable-blink-features=AutomationControlled flag. Verify external API endpoint is trustworthy before granting network access.
Findings 5 items
| Severity | Finding | Location |
|---|---|---|
| Medium | Undeclared network requests to external API Doc Mismatch | scripts/read-url.js:51 |
| Medium | Undeclared Puppeteer browser automation Doc Mismatch | scripts/extract.js:42 |
| Medium | Automation detection suppression flag Sensitive Access | scripts/read-aloud.js:51 |
| Low | Base64 audio decoding in multiple scripts Obfuscation | scripts/generate-paragraph.js:94 |
| Low | Shell execution via subprocess not declared Doc Mismatch | scripts/read-url.js:79 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Network | NONE | READ | ✗ Violation | scripts/read-url.js:51 - POST to api.castreader.ai:8123 |
| Filesystem | NONE | WRITE | ✗ Violation | scripts/read-url.js:82 - fs.writeFileSync |
| Shell | NONE | WRITE | ✗ Violation | scripts/read-url.js:79 - execFileSync('node', ...) |
| Browser | NONE | WRITE | ✗ Violation | scripts/read-aloud.js:43 - puppeteer.launch() |
1 Critical 1 High 16 findings
Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(audioBase64, 'base64' scripts/generate-paragraph.js:94 High IP Address 硬编码 IP 地址
131.0.0.0 scripts/extract.js:42 Medium External URL 外部 URL
https://img.shields.io/badge/OpenClaw-Skill-blue README.md:3 Medium External URL 外部 URL
https://clawhub.com/castreader README.md:3 Medium External URL 外部 URL
https://img.shields.io/badge/License-MIT-green.svg README.md:4 Medium External URL 外部 URL
https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey README.md:5 Medium External URL 外部 URL
https://en.wikipedia.org/wiki/Text-to-speech README.md:46 Medium External URL 外部 URL
https://notion.so/my-page README.md:99 Medium External URL 外部 URL
https://chromewebstore.google.com/detail/castreader-tts-reader/foammmkhpbeladledijkdljlechlclpb README.md:102 Medium External URL 外部 URL
http://api.castreader.ai:8123 README.md:134 Medium External URL 外部 URL
https://castreader.ai README.md:161 Medium External URL 外部 URL
https://castreader.ai/openclaw README.md:162 Medium External URL 外部 URL
https://microsoftedge.microsoft.com/addons/detail/niidajfbelfcgnkmnpcmdlioclhljaaj README.md:164 Medium External URL 外部 URL
https://www.patreon.com/feross package-lock.json:248 Medium External URL 外部 URL
https://feross.org/support package-lock.json:252 Medium External URL 外部 URL
https://alistapart.com/blog/post/successful-or-unsuccessful-the-post-good-design-vocabulary/ scripts/demo.js:58 File Tree
11 files · 84.4 KB · 2592 lines JSON 2f · 1222L
JavaScript 6f · 1028L
Markdown 3f · 342L
├─
▾
references
│ └─
castreader-api.md
Markdown
├─
▾
scripts
│ ├─
demo.js
JavaScript
│ ├─
extract.js
JavaScript
│ ├─
generate-paragraph.js
JavaScript
│ ├─
generate-text.js
JavaScript
│ ├─
read-aloud.js
JavaScript
│ └─
read-url.js
JavaScript
├─
package-lock.json
JSON
├─
package.json
JSON
├─
README.md
Markdown
└─
SKILL.md
Markdown
Dependencies 2 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
puppeteer | ^23.0.0 | npm | No | Version not pinned; auto-updates to latest |
crypto | builtin | Node.js | No | Standard library module |
Security Positives
✓ No credential harvesting or environment variable theft detected
✓ No reverse shell, C2 communication, or data exfiltration patterns found
✓ Base64 usage is for legitimate TTS audio processing, not code obfuscation
✓ Hardcoded IP 131.0.0.0 is part of Chrome's internal UA string, not actual network contact
✓ All file operations confined to /tmp and skill directory
✓ No suspicious file downloads or supply chain indicators beyond unpinned versions