Back to skill

Security audit

Repo Kanban PM

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its repo-management purpose, but its optional cron helper creates persistent agent automation and embeds a hardcoded unpinned npx command that should be reviewed before use.

Install only if you want this skill to change repo PM files and possibly add a recurring OpenClaw task. Review both scripts first, avoid the cron helper unless you understand which agent credentials it will use, remove or replace the hardcoded `apps/telegram && npx tsc --noEmit` check, and choose your own timezone, agent, and schedule.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
scripts/add_daily_pm_cron.sh:30
Finding
Unpinned Package Execution in a Recurring Agent Task<![CDATA[ ## Vulnerability Details **File Location**: `scripts/add_daily_pm_cron.sh`, lines 30–39 **Vulnerability Type**: Unpinned third-party package execution **Risk Level**: Medium ### Vulnerable Code ```bash openclaw cron add \ --name "${NAME}" \ --agent "${AGENT_ID}" \ --cron "${CRON_EXPR}" \ --tz "${TZ}" \ --announce \ --description "Daily PM audit for repo: ${REPO_PATH}" \ --message "Run daily PM review for repo: ${REPO_PATH}\n\nProcess:\n1) Read docs/roadmap/ROADMAP.md\n2) Read docs/features/*/KANBAN.md\n3) Scan docs/pm/bugs/*.md and ensure each open bug is linked from a feature KANBAN\n4) gh pr list + check recent commits\n5) Ensure KANBAN + ROADMAP reflect reality\n6) Run lightweight checks (if applicable): cd apps/telegram && npx tsc --noEmit\n7) Post report: Done/In progress/Open bugs/Blocked/Risks/Next" ``` ### Technical Analysis The script embeds `npx tsc --noEmit` in the instructions of a persistent daily OpenClaw task. The command does not require a repository-local, lockfile-backed compiler and does not prohibit network package retrieval. If a trusted local `tsc` binary is unavailable, `npx` may resolve or download a package from the configured package registry, depending on the installed npm version and configuration. The requested executable name is also not version-pinned. Consequently, the code executed by the scheduled agent may differ from the code originally reviewed. The hardcoded `apps/telegram` path is unrelated to the generic repository-management purpose of the skill. This makes it more likely that the command will run in a repository without the expected local TypeScript dependency, increasing the chance of external package resolution or an unintended package being selected. ### Attack Path 1. A user invokes `add_daily_pm_cron.sh` and creates the daily OpenClaw task. 2. The task later runs under the configured agent identity. 3. The agent follows the embedded instruction and enters `apps/telegram`. 4. The tar ...[truncated 1215 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the repository-specific `apps/telegram` command from this generic skill. 2. Prefer a repository-defined, lockfile-backed script: ```bash npm run typecheck --if-present ``` 3. If direct compiler execution is required, install dependencies from a committed lockfile first and require offline resolution: ```bash npm ci --ignore-scripts npm exec --offline -- tsc --noEmit ``` 4. Verify that the expected executable exists locally before invoking it: ```bash test -x node_modules/.bin/tsc && node_modules/.bin/tsc --noEmit ``` 5. Do not permit `npx` to download missing packages during an unattended scheduled task. 6. Pin the approved TypeScript version in the repository manifest and lockfile, and review dependency integrity before enabling the recurring job. 7. Run the scheduled agent with least privilege, restricted credentials, and limited outbound network access to reduce the impact of dependency compromise. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (5)

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The skill explicitly tells users to execute local shell scripts that modify repository state and may install a recurring cron job, but it does not clearly foreground that these actions change files and system scheduling. In a security-sensitive agent setting, hidden or underexplained side effects can lead users to run automation without reviewing what will be changed, increasing the risk of persistence, unwanted task execution, or policy violations if the scripts are altered or unsafe.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
This script creates a persistent scheduled job immediately via `openclaw cron add` with no confirmation, dry-run, or explicit opt-in beyond invoking the script. In the context of a repo-management skill, that means a user or agent can unintentionally install ongoing automation that repeatedly inspects repository state and posts reports, creating lasting side effects and possible privacy or operational issues.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
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.

Natural-Language Policy Violations

Low
Confidence
84% confidence
Finding
The documentation's example uses `--tz Europe/Minsk`, which imposes a locale-specific setting in the natural-language usage guidance. The file does not explicitly frame timezone selection as user-configurable guidance or prompt the user to choose their own locale, so it can be read as forcing a specific locale by default.

Natural-Language Policy Violations

Low
Confidence
95% confidence
Finding
The script defaults to `Europe/Minsk`, which imposes a specific locale-related setting unless the user notices and overrides it. This can violate language/locale policy expectations because the locale choice is preselected rather than explicitly opted into.

Static analysis

No suspicious patterns detected.