Suspicious — Risk Score 35/100
Last scan:1 day ago Rescan
35 /100
run402-test
Test skill for Run402 — provision AI-native Postgres databases with REST API, auth, and row-level security using x402 micropayments on Base.
Skill performs undeclared filesystem access to read stored API credentials from ~/.config/run402/ that is not mentioned in SKILL.md documentation.
Skill Namerun402-test
Duration27.6s
Enginepi
Use with caution
Document the local config file read behavior in SKILL.md and clarify that the script reads existing project credentials rather than only using curl commands as shown in examples.

Findings 3 items

Severity Finding Location
Medium
Documentation mismatch - curl examples vs actual implementation Doc Mismatch
SKILL.md only shows curl commands for database operations but the actual sql2.mjs script reads local config files from ~/.config/run402/projects.json. This hidden file access is not documented.
const projects = JSON.parse(readFileSync(join(CONFIG_DIR, "projects.json"), "utf-8"));
→ Document that the script requires pre-existing credentials stored in ~/.config/run402/projects.json or provide setup instructions.
sql2.mjs:10
Medium
Accesses sensitive application config directory Sensitive Access
Script reads from ~/.config/run402/ directory which is a sensitive application configuration path containing service credentials.
const CONFIG_DIR = join(homedir(), ".config", "run402");
→ If this is a legitimate database client, clarify that it reads locally stored credentials for authenticated API access.
sql2.mjs:8
Low
Reads service_key credential from local file Credential Theft
The script extracts service_key from projects.json and uses it as Bearer token for API authorization. While this may be legitimate, credential access is undeclared.
const p = projects.find(x => x.project_id === process.argv[2]);
→ Document whether the script exfiltrates credentials or only uses them for legitimate API calls.
sql2.mjs:12
ResourceDeclaredInferredStatusEvidence
Filesystem NONE READ ✗ Violation sql2.mjs:10 reads readFileSync(join(CONFIG_DIR, "projects.json"))
Network NONE WRITE ✗ Violation sql2.mjs:14 performs fetch() POST to api.run402.com
Shell NONE NONE No shell execution detected
Environment NONE NONE No environment variable access detected
Skill Invoke NONE NONE No cross-skill invocation detected
Clipboard NONE NONE No clipboard access detected
Browser NONE NONE No browser access detected
Database NONE READ ✗ Violation sql2.mjs:12 reads service_key from projects.json
4 findings
🔗
Medium External URL 外部 URL
https://api.run402.com/v1/projects
SKILL.md:13
🔗
Medium External URL 外部 URL
https://api.run402.com/admin/v1/projects/$PROJECT_ID/sql
SKILL.md:24
🔗
Medium External URL 外部 URL
https://api.run402.com/rest/v1/todos?done=eq.false
SKILL.md:33
🔗
Medium External URL 外部 URL
https://api.run402.com
sql2.mjs:5

File Tree

2 files · 1.8 KB · 58 lines
Markdown 1f · 43L JavaScript 1f · 15L
├─ 📝 SKILL.md Markdown 43L · 1.1 KB
└─ 📜 sql2.mjs JavaScript 15L · 680 B

Security Positives

✓ HTTP requests go to a legitimate domain (api.run402.com) not a suspicious IP
✓ No base64 encoding or obfuscation detected
✓ No reverse shell, C2, or data exfiltration patterns
✓ No remote script execution (curl|bash, wget|sh)
✓ No direct credential harvesting from environment variables
✓ No access to ~/.ssh, ~/.aws, or system credential stores