Scan Report
47 /100
wip-xai-grok
xAI Grok API. Search the web, search X, generate images, generate video.
Skill executes undeclared shell commands via 1Password CLI to resolve credentials without declaring shell:WRITE permission in SKILL.md, creating a doc-to-code mismatch on the most sensitive operation.
Use with caution
Declare the 1Password CLI shell execution in SKILL.md's capabilities section, or use an environment-variable-only credential resolution strategy. The `op read` fallback is a legitimate 1Password integration but must be explicitly declared as it represents shell:WRITE-level access.
Findings 4 items
| Severity | Finding | Location |
|---|---|---|
| High | Undeclared shell:WRITE via 1Password CLI execSync Priv Escalation | core.mjs:28 |
| Medium | SKILL.md declares zero dependencies but code requires 1Password CLI Doc Mismatch | SKILL.md:12 |
| Medium | Silent local filesystem read in edit_image undeclared in docs Sensitive Access | core.mjs:252 |
| Low | process.env cached with the actual API key value Doc Mismatch | core.mjs:33 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Network | READ | READ | ✓ Aligned | core.mjs - all functions call https://api.x.ai/* for legitimate xAI API access |
| Shell | NONE | WRITE | ✗ Violation | core.mjs:28 - execSync('op read "op://Agent Secrets/X API/api key"') |
| Filesystem | NONE | READ | ✗ Violation | core.mjs:252-258 - edit_image reads local file paths and base64-encodes them |
| Environment | NONE | READ | ✓ Aligned | core.mjs:25 - reads XAI_API_KEY from process.env |
| Skill Invoke | NONE | NONE | — | No self-invocation detected |
10 findings
Medium External URL 外部 URL
https://console.x.ai/ README.md:29 Medium External URL 外部 URL
https://clawhub.ai/castanley/grok README.md:122 Medium External URL 外部 URL
https://clawhub.ai README.md:122 Medium External URL 外部 URL
https://api.x.ai/v1 SKILL.md:8 Medium External URL 外部 URL
https://docs.x.ai/developers/tools/web-search SKILL.md:141 Medium External URL 外部 URL
https://docs.x.ai/developers/tools/x-search SKILL.md:142 Medium External URL 外部 URL
https://docs.x.ai/docs/guides/image-generations SKILL.md:143 Medium External URL 外部 URL
https://docs.x.ai/docs/guides/video-generations SKILL.md:144 Medium External URL 外部 URL
https://opencollective.com/express package-lock.json:137 Medium External URL 外部 URL
https://opencollective.com/fastify package-lock.json:448 File Tree
10 files · 74.2 KB · 2243 lines JSON 2f · 1183L
JavaScript 3f · 733L
Markdown 5f · 327L
├─
▾
_trash
│ └─
RELEASE-NOTES-v1-0-3.md
Markdown
├─
▾
ai
│ └─
▾
todos
│ └─
PUNCHLIST.md
Markdown
├─
CHANGELOG.md
Markdown
├─
cli.mjs
JavaScript
├─
core.mjs
JavaScript
├─
mcp-server.mjs
JavaScript
├─
package-lock.json
JSON
├─
package.json
JSON
├─
README.md
Markdown
└─
SKILL.md
Markdown
Dependencies 2 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
@modelcontextprotocol/sdk | ^1.27.1 | npm | No | Version loosely pinned with caret. Contains no known vulnerabilities at this version. |
op (1Password CLI) | any | system binary | No | Not declared in package.json or SKILL.md. Implicit runtime dependency for credential resolution. |
Security Positives
✓ All network requests go to legitimate, declared xAI API endpoints (api.x.ai) only
✓ No obfuscation detected — no base64 eval, no dynamic code generation, no anti-analysis patterns
✓ No credential exfiltration — the 1Password read is only used locally to obtain the API key for xAI
✓ No remote code execution or reverse shell patterns present
✓ No access to sensitive paths like ~/.ssh, ~/.aws, or .env files beyond the declared XAI_API_KEY
✓ No hidden instructions in HTML comments or documentation
✓ Package.json has version-pinned dependencies (except SDK peer deps resolved by host)
✓ Input validation present (max limits on domains, handles, image count, etc.)
✓ No data exfiltration — all API calls are to the legitimate xAI service
✓ No supply-chain concerns — @modelcontextprotocol/sdk is a well-known, widely-used package