Trusted — Risk Score 5/100
Last scan:2 days ago Rescan
5 /100
shiyi
拾遗 · 通用考试备考追踪 Skill — image-based wrong answer tracker with free tagging, review reminders, and Excel export
A legitimate exam preparation tracking skill with no malicious indicators. The pre-scan IOC for base64 decoding is a false positive — it's standard image export functionality.
Skill Nameshiyi
Duration32.5s
Enginepi
Safe to install
No action needed. Skill is safe for deployment.

Findings 3 items

Severity Finding Location
Info
Base64 decoding is legitimate export feature
The pre-scan flagged Buffer.from(q.raw_image_b64, 'base64') as 'base64 encoded execution (code obfuscation)'. This is a false positive — raw_image_b64 is the base64-encoded screenshot stored by the skill itself in wrong_questions.json, and decoding it to a temp .jpg file is the standard mechanism to embed images in Excel via openpyxl.
fs.writeFileSync(tmpPath, Buffer.from(q.raw_image_b64, 'base64'));
→ No action. This is documented image export behavior.
scripts/export_xlsx.js:140
Info
Python subprocess documented in package.json
The skill uses execFile to run python3 for openpyxl-based Excel generation. This is declared via the 'export' npm script and the buildPythonScript() function, with no hidden execution paths.
execFile(cmd, args, { timeout }, (err, stdout, stderr) => {...})
→ No action. Documented Excel export mechanism.
scripts/export_xlsx.js:28
Info
Dependencies declared and reasonable
xlsx@^0.18.5 for Excel generation, optional sharp@^0.33.0 for image processing. No undeclared packages. Versions loosely pinned (caret range), but no supply chain risk given the benign nature of the dependencies.
dependencies: { "xlsx": "^0.18.5" }
→ Consider pinning exact versions ([email protected]) for reproducible builds.
package.json:1
ResourceDeclaredInferredStatusEvidence
Filesystem READ+WRITE WRITE ✓ Aligned All file operations scoped to ~/.openclaw/skills/shiyi/data/
Shell WRITE WRITE ✓ Aligned execFile(python3) in export_xlsx.js:28, declared as Excel export mechanism
1 Critical 6 findings
🔒
Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(q.raw_image_b64, 'base64'
scripts/export_xlsx.js:140
🔗
Medium External URL 外部 URL
https://openclaw.ai
README.md:16
🔗
Medium External URL 外部 URL
https://img.shields.io/badge/OpenClaw-Skill-orange?style=for-the-badge
README.md:17
🔗
Medium External URL 外部 URL
https://img.shields.io/badge/License-MIT-blue?style=for-the-badge
README.md:20
🔗
Medium External URL 外部 URL
https://nodejs.org
README.md:22
🔗
Medium External URL 外部 URL
https://img.shields.io/badge/node-%3E%3D18-green?style=for-the-badge
README.md:23

File Tree

12 files · 54.5 KB · 1525 lines
JavaScript 8f · 1172L Markdown 2f · 319L JSON 1f · 27L Ignore 1f · 7L
├─ 📁 assets
│ └─ 📜 exam_prompts.js JavaScript 182L · 9.6 KB
├─ 📁 scripts
│ ├─ 📜 daily_summary.js JavaScript 66L · 2.1 KB
│ ├─ 📜 export_xlsx.js JavaScript 182L · 6.6 KB
│ ├─ 📜 onboarding.js JavaScript 89L · 2.9 KB
│ ├─ 📜 parse_input.js JavaScript 270L · 9.6 KB
│ ├─ 📜 review_reminder.js JavaScript 139L · 4.9 KB
│ ├─ 📜 tag_library.js JavaScript 133L · 4.2 KB
│ └─ 📜 update_daily.js JavaScript 111L · 4.0 KB
├─ 📄 .gitignore Ignore 7L · 60 B
├─ 📋 package.json JSON 27L · 696 B
├─ 📝 README.md Markdown 165L · 4.6 KB
└─ 📝 SKILL.md Markdown 154L · 5.2 KB

Dependencies 2 items

PackageVersionSourceKnown VulnsNotes
xlsx ^0.18.5 npm No Excel generation library, benign dependency
sharp ^0.33.0 npm No Optional image processing, not loaded in any script

Security Positives

✓ All file operations scoped strictly to ~/.openclaw/skills/shiyi/data/ with no drift to sensitive paths
✓ No network egress — no curl, wget, fetch, or HTTP calls of any kind
✓ No credential access — does not read ~/.ssh, ~/.aws, .env, or iterate os.environ for secrets
✓ SKILL.md documentation is comprehensive and accurately describes all implemented features
✓ No obfuscation, no hidden instructions, no eval() or Function() calls
✓ Image data (raw_image_b64) originates from the skill's own storage, not external sources
✓ Python script written to os.tmpdir() and immediately cleaned up after execution
✓ Automated backup rotation (10 versions) for wrong_questions.json prevents data loss