T09 · Insecure Skill Coding Practices
- Location
references/agent-packaging.md:259- Finding
Linux/macOS packaging may include and upload private keys and certificates
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly coherent Uandai automation, but its Linux/macOS packaging steps can accidentally include and upload private key or certificate files from a workspace.
Review the packaging commands before installing or using this skill. On Linux/macOS, add missing exclusions for id_rsa, id_dsa, *.p12, and *.crt, and verify the final ZIP contains no secrets before uploading. Also treat the persisted Uandai API key as a sensitive local credential and only use delete or publishing actions when you explicitly intend them.
references/agent-packaging.md:259Linux/macOS packaging may include and upload private keys and certificates
Referenced artifact was not completely inspected
2. Install the **full skill folder** (`SKILL.md` + `references/`) under `~/.openclaw/skills/uandai-ai/` (preferred) or `<workspace>/skills/uandai-ai/` for local
Referenced artifact was not completely inspected
2. Install the **full skill folder** (`SKILL.md` + `references/`) under `~/.openclaw/skills/uandai-ai/` (preferred) or `<workspace>/skills/uandai-ai/` for local
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
--------------------------------------------------
Exclude recursively:
• .env (exact name only — NOT .env.example / .env.template)
• secrets.json
• credentials.json
• id_rsa
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
--------------------------------------------------
Exclude recursively:
• .env (exact name only — NOT .env.example / .env.template)
• secrets.json
• credentials.json
• id_rsa
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
--------------------------------------------------
Exclude recursively:
• .env (exact name only — NOT .env.example / .env.template)
• secrets.json
• credentials.json
• id_rsa
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
--------------------------------------------------
Exclude recursively:
• .env (exact name only — NOT .env.example / .env.template)
• secrets.json
• credentials.json
• id_rsa
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Exclude recursively:
• .env (exact name only — NOT .env.example / .env.template)
• secrets.json
• credentials.json
• id_rsa
• id_dsa
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Exclude recursively:
• .env (exact name only — NOT .env.example / .env.template)
• secrets.json
• credentials.json
• id_rsa
• id_dsa
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Exclude recursively:
• .env (exact name only — NOT .env.example / .env.template)
• secrets.json
• credentials.json
• id_rsa
• id_dsa
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Exclude recursively:
• .env (exact name only — NOT .env.example / .env.template)
• secrets.json
• credentials.json
• id_rsa
• id_dsa
• *.pem
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Exclude recursively:
• .env (exact name only — NOT .env.example / .env.template)
• secrets.json
• credentials.json
• id_rsa
• id_dsa
• *.pem
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Exclude recursively:
• .env (exact name only — NOT .env.example / .env.template)
• secrets.json
• credentials.json
• id_rsa
• id_dsa
• *.pem
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# C) Remove any .env files that slipped in (keep .env.example)
Get-ChildItem $Staging -Recurse -Force -File |
Where-Object {
$_.Name -eq '.env' -or (
$_.Name -like '*.env' -and
$_.Name -notlike '*.example' -and
$_.Name -notlike '*.template'
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# C) Remove any .env files that slipped in (keep .env.example)
Get-ChildItem $Staging -Recurse -Force -File |
Where-Object {
$_.Name -eq '.env' -or (
$_.Name -like '*.env' -and
$_.Name -notlike '*.example' -and
$_.Name -notlike '*.template'
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# C) Remove any .env files that slipped in (keep .env.example)
Get-ChildItem $Staging -Recurse -Force -File |
Where-Object {
$_.Name -eq '.env' -or (
$_.Name -like '*.env' -and
$_.Name -notlike '*.example' -and
$_.Name -notlike '*.template'
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
t URL, gateway base, and session key (also on Workspace → agent → **Integration**)
- Readiness states (provisioning / failed)
- JWT vs raw API key on `/openclaw`
- What is blocked for subscribers
Read bundled `references/openclaw-integration.md` in the `uandai-ai` skill folder before acting. Live `{API_ORIGIN}/docs/openclaw-integration` is for humans unless pasted in chat.
**Postman (Hydra API):** trainer gallery folders `agent-media/` (`01` proxy; `01c`–`01e` direct upload) and public `listings-public/` under `hydra_mvp/postman/collections/Hydra MVP/` — see `hydra_mvp/docs/api-testing.md`.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Response: `{ "access_token", "refresh_token", "user" }` — **no cookie**.
Access tokens include a `sid` (session id) claim. If the API key or bound session is revoked, access tokens fail **immediately** — not after expiry.
### Token lifecycle
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Response: `{ "access_token", "refresh_token", "user" }` — **no cookie**.
Access tokens include a `sid` (session id) claim. If the API key or bound session is revoked, access tokens fail **immediately** — not after expiry.
### Token lifecycle
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).
6. Complete price, model, provider URL (when required), invocation settings via **uandai.ai app** or `POST /agents/{id}/proposals` — **do not** ask for provider API keys (`{PROVIDER}_KEY`); subscribers supply those at subscribe/invoke
7. `PATCH /agents/{id}/proposals/{proposal_id}` with `status=submitted` when ready for review (Step 4 in create wizard, or manage **For Approval** tab)
8. After admin approval, subscribers can invoke
9. Optional: `DELETE /agents/{agent_id}` when the trainer wants to remove an agent they own (see [Delete agent](#delete-agent-trainer))
**Full ZIP upload (all metadata at POST):**
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).
6. Complete price, model, provider URL (when required), invocation settings via **uandai.ai app** or `POST /agents/{id}/proposals` — **do not** ask for provider API keys (`{PROVIDER}_KEY`); subscribers supply those at subscribe/invoke
7. `PATCH /agents/{id}/proposals/{proposal_id}` with `status=submitted` when ready for review (Step 4 in create wizard, or manage **For Approval** tab)
8. After admin approval, subscribers can invoke
9. Optional: `DELETE /agents/{agent_id}` when the trainer wants to remove an agent they own (see [Delete agent](#delete-agent-trainer))
**Full ZIP upload (all metadata at POST):**
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).
Permanently remove a trainer-owned agent when it has no active operational dependencies.
DELETE /agents/{agent_id}
Authorization: Bearer <access_token>
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).
Authorization: Bearer <access_token>
Legacy path: `DELETE /api/agents/{agent_id}` (same contract).
#### Prerequisites — collect before DELETE
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 /agents/{agent_id}/media PATCH /agents/{agent_id}/media/{media_id} PUT /agents/{agent_id}/media/reorder DELETE /agents/{agent_id}/media/{media_id} Authorization: Bearer <access_token>
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
"duration_sec": 28 }
`null` when no video in the published set.
#### Approve semantics
On admin approve: **copy/replace** — new `scope=published` rows with **new** `media_id`s; **reuse** `storage_ref_json` verbatim (pointer copy); delete superseded published blobs only when refcount → 0. Draft proposal rows remain for admin diff.
#### Postman
Folders: `postman/collections/Hydra MVP/agent-media/` (`01` proxy upload; `01c`–`01e` direct session → PUT → complete) and `listings-public/` (see `hydra_mvp/docs/api-testing.md`).
### List subscriptions
```http
GET /v1/me/subscriptions?agent_id={id}&limit=20
Authorization: Bearer <access_token>
Optional query: agent_id (filter), limit (max 100).
Renew toggle (subscriber): PATCH /v1/me/subscriptions/{subscription_id} with JSON { "is_renew_enabled": true|false }.
Subscription checkout (POST /v1/me/subscription-requests) and Stripe flows remain browser/app only — not API-key au
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).
| `is_invokable` | `false` when archived, expired, or not entitled |
| `revision_no` | Current revision when live; needed for invoke |
**Archived activations:** After trainer `DELETE /agents/{agent_id}`, past subscriptions stay listed with `agent_removed: true` and `is_invokable: false`. Invoke, config PATCH, and OpenClaw readiness for that agent stop working; run history remains queryable via executions.
### Activation detail (subscriber)
No suspicious patterns detected.