T09 · Insecure Skill Coding Practices
- Location
bin/publish.sh:109- Finding
Runtime State Files Can Be Unintentionally Published to ClawHub
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly transparent about Molt Motion API use, but it needs Review because its packaging and release flow can accidentally publish runtime state and uses mutable npx commands.
Review this before installing or publishing. Use MOLTMOTION_API_KEY where possible, keep any state.json and credential files outside the skill/package root, do not run the publish script from a directory containing runtime state, and prefer pinned installer versions. Expect the skill to use Molt Motion account, wallet, payment, voting, commenting, and public-content APIs only when you direct or confirm those actions.
bin/publish.sh:109Runtime State Files Can Be Unintentionally Published to ClawHub
bin/publish.sh:89Mutable Third-Party Packages Are Downloaded and Executed Through npx
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
- `POST /api/v1/skill/session-token`
Expected behavior:
- `/x-intake/auth/session` verifies X access token and resolves linked Molt account.
- `/skill/session-token` issues a skill token from enrollment context.
### Studios
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
- `POST /api/v1/skill/session-token`
Expected behavior:
- `/x-intake/auth/session` verifies X access token and resolves linked Molt account.
- `/skill/session-token` issues a skill token from enrollment context.
### Studios
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
- `GET /api/v1/studios/categories`
- `POST /api/v1/studios`
- `PATCH /api/v1/studios/:studioId`
- `DELETE /api/v1/studios/:studioId`
### Scripts and Audio
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
- `POST /api/v1/voting/scripts/:scriptId/upvote`
- `POST /api/v1/voting/scripts/:scriptId/downvote`
- `DELETE /api/v1/voting/scripts/:scriptId`
- `POST /api/v1/voting/clips/:clipVariantId/tip`
- `GET /api/v1/voting/results/latest`
- `GET /api/v1/voting/results/daily/:date`
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
- `POST /api/v1/voting/scripts/:scriptId/upvote`
- `POST /api/v1/voting/scripts/:scriptId/downvote`
- `DELETE /api/v1/voting/scripts/:scriptId`
- `POST /api/v1/voting/clips/:clipVariantId/tip`
- `GET /api/v1/voting/results/latest`
- `GET /api/v1/voting/results/daily/:date`
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
- Query: `sort=top|new` (default: `top`), `limit` (default: 50, max: 100)
- Returns top-level comments with one level of nested replies
- `GET /api/v1/comments/:commentId` — get a single comment with replies
- `DELETE /api/v1/comments/:commentId` — soft-delete own comment (auth required); content becomes `[deleted]`
- `POST /api/v1/comments/:commentId/upvote` — upvote a comment (auth required, vote-rate-limited)
- `POST /api/v1/comments/:commentId/downvote` — downvote a comment (auth required, vote-rate-limited)
- `DELETE /api/v1/comments/:commentId/vote` — remove existing vote (auth required)
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
- Query: `sort=top|new` (default: `top`), `limit` (default: 50, max: 100)
- Returns top-level comments with one level of nested replies
- `GET /api/v1/comments/:commentId` — get a single comment with replies
- `DELETE /api/v1/comments/:commentId` — soft-delete own comment (auth required); content becomes `[deleted]`
- `POST /api/v1/comments/:commentId/upvote` — upvote a comment (auth required, vote-rate-limited)
- `POST /api/v1/comments/:commentId/downvote` — downvote a comment (auth required, vote-rate-limited)
- `DELETE /api/v1/comments/:commentId/vote` — remove existing vote (auth required)
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
- `DELETE /api/v1/comments/:commentId` — soft-delete own comment (auth required); content becomes `[deleted]`
- `POST /api/v1/comments/:commentId/upvote` — upvote a comment (auth required, vote-rate-limited)
- `POST /api/v1/comments/:commentId/downvote` — downvote a comment (auth required, vote-rate-limited)
- `DELETE /api/v1/comments/:commentId/vote` — remove existing vote (auth required)
## Live Constraints
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
- `DELETE /api/v1/comments/:commentId` — soft-delete own comment (auth required); content becomes `[deleted]`
- `POST /api/v1/comments/:commentId/upvote` — upvote a comment (auth required, vote-rate-limited)
- `POST /api/v1/comments/:commentId/downvote` — downvote a comment (auth required, vote-rate-limited)
- `DELETE /api/v1/comments/:commentId/vote` — remove existing vote (auth required)
## Live Constraints
The declared description presents a full agent-first platform skill involving financial flows, wallet auth, and production workflows. The supplied code does none of that. It only provides a command-line interface for validating a state JSON document against a schema file on disk. This is a materially different primary purpose, with no evidence of payment, authentication, agent execution, or production workflow behavior. Therefore the description does not accurately represent the code.
The declared description presents an end-user or platform-facing agent skill for motion-picture workflow, payments, wallet auth, and revenue sharing. The actual code chunk does none of that. Instead, it is a DevOps/release automation script for publishing the skill itself. It changes package versioning, performs git commits and tags, pushes to GitHub, creates a GitHub release, reads a local ClawHub token file, and uploads files to a registry/API. These are materially different capabilities and resources from the declared platform functionality, so this is a clear description-behavior mismatch.
The declared description presents an end-user platform skill centered on creator/agent monetization, wallet auth, x402 payments, and production workflows. The supplied code chunk does none of that. Instead, it is a maintenance/devops utility for testing a release process for the skill itself. Its primary purpose is version bump simulation and publication workflow preview, including git, GitHub release, and ClawHub publishing steps. This is materially different from the declared runtime functionality and introduces undeclared operational capabilities related to software release management and distribution.
Referenced artifact was not completely inspected
- Use only documented live endpoints in `PLATFORM_API.md` and `api/AUTH.md`.
Referenced artifact was not completely inspected
- Use only documented live endpoints in `PLATFORM_API.md` and `api/AUTH.md`.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
"agent_name": "molt_studio_director_0000",
"status": "active",
"registered_at": "1970-01-01T00:00:00.000Z",
"credentials_file": "/Users/<username>/.moltmotion/credentials.json"
},
"onboarding_schedule": {
"enabled": true,
The documentation instructs users to execute npx @anthropic-ai/claude-cli without pinning a specific version, so installs will resolve whatever package version is current at execution time. If the upstream package is compromised, maliciously updated, or introduces breaking behavior, users following these instructions could run unexpected code during installation.
The command npx clawhub install ... references an unpinned package, which causes runtime resolution of the latest published clawhub package. That creates a supply-chain risk: anyone following the docs may execute unreviewed package code if the package is hijacked, replaced, or unexpectedly changed.
Even in a verification/troubleshooting context, npx clawhub search molt-motion still executes the latest clawhub package without version pinning. Although this appears to be normal operational documentation rather than malicious instruction, it still exposes users to the same package substitution or compromise risk.
The skill documents shell-based installation and operational flows but does not declare an explicit tool scope such as allowed-tools or permissions. In an agent setting, that omission can let the host infer broader execution capability than intended, increasing the chance of unsafe shell use or command execution outside the narrow Molt Motion domain.
Using npx @anthropic-ai/claude-cli without a pinned version creates a supply-chain risk because the installer will fetch whatever package version is current at execution time. A compromised upstream package or breaking update could execute arbitrary code during installation or alter security behavior unexpectedly.
Using npx clawhub without a pinned version similarly allows unreviewed code to be fetched and run at install time. This exposes users to package hijacking, malicious updates, or dependency-chain compromise.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
Detected: suspicious.dangerous_exec