Back to skill

Security audit

dca-decision-calculator

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed finance calculator skill that gives investment and currency-exchange calculations, with notable caution needed because its triggers are broad and its outputs can sound like actionable financial guidance.

Install only if you want a calculator-style aid for DCA and exchange-cost scenarios. Treat all outputs as informational, verify the inputs and formulas yourself, and do not rely on it as personalized financial advice. Be aware that its broad triggers may cause it to appear in ordinary finance conversations unless the platform requires explicit invocation.

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

Error
Location
.github/workflows/clawhub-publish.yml:16
Finding

Mutable npm Dependency Executes with Access to a Publishing Token

Content
View full analysis

Vulnerability Details

File Location: .github/workflows/clawhub-publish.yml, lines 16–24
Vulnerability Type: Supply-chain risk from an unpinned third-party dependency
Risk Level: High

Vulnerable Code

yaml
- name: Install ClawHub CLI
  run: npm install -g clawhub@latest

- name: Publish to ClawHub
  env:
    CLAWHUB_TOKEN: ${{ secrets.CLAWHUB_TOKEN }}
  run: |
    mkdir -p "$HOME/.config/clawhub"
    echo "{\"registry\":\"https://clawhub.ai\",\"token\":\"$CLAWHUB_TOKEN\"}" > "$HOME/.config/clawhub/config.json"
    clawhub skill publish . --owner 987618350-cmd

Technical Analysis

The workflow installs clawhub@latest, which is a mutable reference rather than a reviewed and immutable package version. Consequently, the code executed by this workflow can change without any corresponding repository change or review.

npm installation can execute package lifecycle scripts. The installed CLI is then invoked in a later step after CLAWHUB_TOKEN has been written in plaintext to $HOME/.config/clawhub/config.json. A compromised npm package, malicious maintainer release, or compromised package-publishing account could execute arbitrary code on the GitHub-hosted runner and read that configuration file.

Although step-level environment variables are not automatically inherited by earlier steps, both steps run within the same job and filesystem. The installed package's CLI later executes while the token-bearing configuration file exists, giving malicious CLI code direct access to the credential.

Attack Path

  1. An attacker compromises the clawhub npm package, its maintainer account, or its publishing pipeline.
  2. The attacker publishes a malicious release that becomes the version resolved by clawhub@latest.
  3. A push to main or a manual workflow dispatch starts the publishing job.
  4. The workflow globally installs the malicious package without an immutable version or integrity constraint.
  5. The workflow writes CLAWHUB_TOKEN t ...[truncated 917 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace clawhub@latest with an audited exact version, for example:

    yaml
    run: npm install -g clawhub@1.2.3
    
  2. Prefer declaring the CLI as a project dependency, committing a lockfile, using npm ci, and invoking the locked binary with npx --no-install clawhub.

  3. Verify package provenance and integrity before execution. Where supported, require npm provenance attestations and use an approved internal registry or dependency allowlist.

  4. Configure explicit least-privilege workflow permissions, such as:

    yaml
    permissions:
      contents: read
    
  5. Pin GitHub Actions dependencies to reviewed commit SHAs rather than mutable major-version tags.

  6. Restrict the ClawHub token to only the publication permissions and owner scope required by this workflow, rotate it periodically, and rotate it immediately if compromise is suspected.

  7. Avoid persisting the token longer than necessary. Create the configuration with restrictive permissions, execute publication, and delete it in an always() cleanup step:

    yaml
    - name: Configure and publish
      env:
        CLAWHUB_TOKEN: ${{ secrets.CLAWHUB_TOKEN }}
      run: |
        umask 077
        mkdir -p "$HOME/.config/clawhub"
        printf '%s\n' "{\"registry\":\"https://clawhub.ai\",\"token\":\"$CLAWHUB_TOKEN\"}" \
          > "$HOME/.config/clawhub/config.json"
        npx --no-install clawhub skill publish . --owner 987618350-cmd
    
    - name: Remove publishing credentials
      if: always()
      run: rm -f "$HOME/.config/clawhub/config.json"
    
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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
Findings (20)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README says the skill outputs whether to trigger investment purchases, position-sizing multiples, and currency conversion suggestions, but it does not include any disclaimer that results are informational rather than financial advice. Because the skill directly influences investment and exchange decisions, users may over-trust the output and act on it without understanding the model's limits, risking financial loss or unsuitable actions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger list is broad and maps to very common finance terms such as 投资, 指数, 成本, 买入, 涨了, 跌了, and 汇率, making accidental invocation plausible during ordinary financial conversations. In an agent ecosystem, unintended invocation can cause the skill to inject unsolicited investment or FX recommendations into unrelated user flows, increasing the chance of inappropriate financial guidance being surfaced without clear user intent.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill declares a very broad set of finance-related triggers in its metadata, so ordinary discussion about investing, costs, exchange rates, or market moves could invoke it unintentionally. In a finance skill, accidental activation is risky because the skill produces action-oriented buy/add-position/exchange suggestions, which could steer users into unsuitable financial decisions without explicit intent to use this calculator.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The standalone trigger entries are individually vague and cover common finance vocabulary, making scope control weak and increasing the chance the skill activates during normal market conversation. Because the skill can output trading cadence, position-sizing multipliers, and currency-exchange guidance, unintended invocation can lead to unrequested financial recommendations being surfaced as if they were procedurally justified.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
90% confidence
Finding

The trigger '定投' is a common term in Chinese investment discussions and is too broad to safely scope activation. Since this skill outputs operational investing parameters, matching on such a generic term can expose users to unintended action suggestions in casual conversation.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
89% confidence
Finding

The trigger '基金' is a generic topic word that appears in many harmless discussions unrelated to this skill. Its use as a standalone activator raises the chance of accidental invocation and unsolicited finance guidance.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
88% confidence
Finding

The trigger '指数' is a broad financial term that can appear in news, education, or casual discussion, not just requests for this tool. This weak scoping can cause unrequested decision-calculation behavior in a sensitive finance context.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
90% confidence
Finding

The trigger '加仓' is an action term commonly used in ordinary trading discussions and is too short to define safe activation. In this skill, accidental matching can lead directly to position-sizing recommendations, which is risky in an investment context.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
90% confidence
Finding

The trigger '换汇' is broad and may match routine discussion about currency exchange without the user intending to invoke this calculator. Because the skill can produce recommendations on whether to exchange now or wait, unintended activation may influence financial behavior.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
87% confidence
Finding

The trigger '汇率' is an extremely common term in finance and travel-related conversations, making accidental activation likely. In context, this broad match is more dangerous because the skill turns general rate discussion into prescriptive exchange suggestions.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
86% confidence
Finding

The trigger '投资' is a highly generic topic label that spans countless benign conversations. In a skill that generates tactical investing outputs, such breadth creates avoidable risk of unsolicited or contextually inappropriate recommendations.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
70% confidence
Finding

Overly Broad Trigger: '贬买' is too short and may match unintended inputs

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
88% confidence
Finding

The trigger '买入' is a common verb in investment conversations and can easily match generic user discussion. In this skill's context, accidental activation is risky because it can surface buy-related calculations as actionable guidance without explicit request.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
88% confidence
Finding

The trigger '持仓' is a common portfolio-discussion term and too vague to safely define activation. Because the skill includes diagnostic and strategy outputs, generic mention of holdings may unintentionally trigger analysis and recommendations.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
85% confidence
Finding

The trigger '成本' is extremely broad and can appear in many financial and non-financial contexts. Using it as a standalone activator substantially increases false activations and can route unrelated conversations into financial advice-like outputs.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
84% confidence
Finding

The trigger '跌了' is conversational and likely to appear in ordinary chat about many assets or markets. In this skill, such a vague trigger can convert general market commentary into unsolicited DCA recommendations.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
84% confidence
Finding

The trigger '涨了' is a common conversational phrase and does not uniquely indicate a request for this skill. In a financial skill that outputs tactical guidance, this creates unnecessary activation risk from casual discussion.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
87% confidence
Finding

The trigger '跌幅' is a common analytical term in market conversations and is too generic to safely scope skill execution. Since the skill computes position sizing from drawdown, accidental invocation can produce unrequested trading instructions.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
80% confidence
Finding

The trigger '缩水' is colloquial and can be used broadly when discussing losses or depreciation, not necessarily as a request for this calculator. That ambiguity increases the chance of accidental activation into sensitive finance decision support.

Content

No source excerpt is available for this finding.

Overly Broad Trigger

Low
Category
Trigger Abuse
Confidence
86% confidence
Finding

The trigger '估值' is a broad finance-analysis term that can occur in educational or informational discussion without any intent to invoke a strategy tool. In this skill, matching on it may cause the model to provide investment-style diagnostic outputs unexpectedly.

Content

No source excerpt is available for this finding.