Back to skill

Security audit

Technical Eval

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent technical evaluation workflow, but it has review-worthy risks around broad secret loading, automatic persistent file writes, unsanitized output paths, and remote scripts in generated HTML.

Review before installing. Use this only for non-confidential evaluation topics unless you are comfortable sending those topics to external research sources. Do not keep unrelated secrets in ~/.openclaw/.env when using this skill, or patch it to read only TAVILY_API_KEY. Sanitize or slug evaluation topics before they become folder names, and inspect generated presentation HTML because it pulls remote browser resources.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
tavily-config.sh:3
Finding

Shared credential file is imported with excessive scope

Content
View full analysis
~/.openclaw/.env" exit 1 fi ``` ### Technical Analysis The Skill only requires `TAVILY_API_KEY`, but the command at line 7 reads every non-comment entry from the shared `~/.openclaw/.env` file and exports all of them into the process environment. This violates least privilege because unrelated API keys, tokens, passwords, and service credentials stored in the same file are made available to every subsequently launched child process. The `export $(grep ... | xargs)` construction is also not a safe `.env` parser. It relies on shell word splitting and `xargs` tokenization, so values containing whitespace, quoting, backslashes, or malformed assignments can be altered or interpreted incorrectly. File paths are also inconsistently quoted in the pipeline. No code in the audited project was found to transmit these credentials directly. The vulnerability is the unnecessary expansion of credential exposure and the resulting opportunity for another invoked component to read them. ### Attack Path 1. The shared `~/.openclaw/.env` contains `TAVILY_API_KEY` and one or more unrelated secrets. 2. The helper is sourced or executed as part of the technical-evaluation workflow. 3. Line 7 exports every non-comment entry rather than selecting only `TAVILY_API_KEY`. 4. A later tool, presentation generator, shell command, or compromised child pro ...[truncated 587 chars]
Remediation
View remediation
&2 exit 1 fi ``` If file-based loading is mandatory, use a dedicated file and parse only the exact key with strict validation. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:314
Finding

User-controlled evaluation topic can escape the intended output directory

Content
View full analysis
Remediation
View remediation
&2 exit 1 fi mkdir -p "$BASE_DIR" BASE_REAL="$(realpath "$BASE_DIR")" OUTPUT_DIR="$(realpath -m "$BASE_DIR/$EVAL_TOPIC")" case "$OUTPUT_DIR/" in "$BASE_REAL"/*) ;; *) echo "Error: Output path escapes the approved directory" >&2 exit 1 ;; esac ``` ]]>

T03 · Remote Payload Retrieval and Execution

Warning
Location
assets/template.html:7
Finding

Generated presentation executes mutable remote JavaScript

Content
View full analysis
``` ### Technical Analysis The presentation template loads JavaScript directly from an external, unversioned URL whenever the generated HTML is opened. The browser executes the response as code in the presentation's origin and document context. Because the asset is not bundled, pinned to an immutable version, or protected by Subresource Integrity, the effective code can change after the Skill package has been reviewed. A compromise of the remote distribution service, an unauthorized upstream change, or a failure in transport trust could therefore introduce code that was not present during the audit. Loading the Tailwind browser script is not necessary for a static generated presentation. The required CSS can be produced at build time and embedded or shipped as a local asset. ### Attack Path 1. A presentation is generated from `assets/template.html`. 2. The user opens the generated HTML while network access is available. 3. The browser requests `https://cdn.tailwindcss.com`. 4. The external service returns JavaScript that is different from the code expected during the Skill audit, whether through compromise or upstream modification. 5. The browser executes the returned payload in the presentation page. 6. The payload can read or modify presentation content, misrepresent evaluation results, and initiate outbound browser requests subject to browser security controls. ### Impact Assessment The obtained privileges are those of JavaScript executing in the generated presentation's browser context. A malicious payload could access the presentation DOM, alter displayed recommendations, capture data rendered into the page, and attempt network communication. Browser sandboxing and same-origin policy s ...[truncated 213 chars]
Remediation
View remediation
``` The exact policy should be tightened further after inline scripts and styles are moved to local hashed assets. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (28)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill is presented as a technical evaluation workflow, but the documented behavior includes environment setup, fixed-path filesystem writes, external data collection, and references to secret handling that are not clearly disclosed as part of the user-facing purpose. This mismatch is dangerous because it can cause users or calling agents to authorize broader capabilities than expected, including local state changes and possible secret exposure during bootstrap operations.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · README.md (reported line 18)May include surrounding context.

md
#!/bin/bash
# Technical Eval - Tavily API Configuration
# Unified configuration using ~/.openclaw/.env

# Load Tavily API Key from unified config
if [ -f "$HOME/.openclaw/.env" ]; then

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · tavily-config.sh (reported line 3)May include surrounding context.

sh
#!/bin/bash
# Technical Eval - Tavily API Configuration
# Unified configuration using ~/.openclaw/.env

# Load Tavily API Key from unified config
if [ -f "$HOME/.openclaw/.env" ]; then

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · tavily-config.sh (reported line 7)May include surrounding context.

sh
#!/bin/bash
# Technical Eval - Tavily API Configuration
# Unified configuration using ~/.openclaw/.env

# Load Tavily API Key from unified config
if [ -f "$HOME/.openclaw/.env" ]; then

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · tavily-config.sh (reported line 13)May include surrounding context.

sh
#!/bin/bash
# Technical Eval - Tavily API Configuration
# Unified configuration using ~/.openclaw/.env

# Load Tavily API Key from unified config
if [ -f "$HOME/.openclaw/.env" ]; then

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

Using export $(grep -v '^#' $HOME/.openclaw/.env | xargs) unsafely parses and exports every entry from the .env file, which can mis-handle special characters and can execute unintended shell behavior depending on file contents and environment. It also broadens secret exposure by exporting all variables to child processes rather than only the required key.

Content

Scanner excerpt · tavily-config.sh (reported line 6)May include surrounding context.

sh
# Unified configuration using ~/.openclaw/.env

# Load Tavily API Key from unified config
if [ -f "$HOME/.openclaw/.env" ]; then
    export $(grep -v '^#' $HOME/.openclaw/.env | xargs)
    if [ -z "$TAVILY_API_KEY" ]; then
        echo "Error: TAVILY_API_KEY not found in ~/.openclaw/.env"

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · tavily-config.sh (reported line 9)May include surrounding context.

sh
if [ -f "$HOME/.openclaw/.env" ]; then
    export $(grep -v '^#' $HOME/.openclaw/.env | xargs)
    if [ -z "$TAVILY_API_KEY" ]; then
        echo "Error: TAVILY_API_KEY not found in ~/.openclaw/.env"
        exit 1
    fi
else

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · tavily-config.sh (reported line 42)May include surrounding context.

sh
if [ -f "$HOME/.openclaw/.env" ]; then
    export $(grep -v '^#' $HOME/.openclaw/.env | xargs)
    if [ -z "$TAVILY_API_KEY" ]; then
        echo "Error: TAVILY_API_KEY not found in ~/.openclaw/.env"
        exit 1
    fi
else

Credential Access

High
Category
Privilege Escalation
Confidence
72% confidence
Finding

Suggesting echo 'TAVILY_API_KEY=your_key' > ~/.openclaw/.env encourages storing a long-lived secret in plaintext without any mention of file permissions. In a shell-history-preserving environment, users may also expose setup commands and normalize insecure secret handling practices.

Content

Scanner excerpt · tavily-config.sh (reported line 14)May include surrounding context.

sh
fi
else
    echo "Error: ~/.openclaw/.env file not found"
    echo "Please create it with: echo 'TAVILY_API_KEY=your_key' > ~/.openclaw/.env"
    exit 1
fi

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The document is written entirely in Chinese and presents the skill's workflow and outputs in that language, with no indication that users may choose another language or that the skill is intentionally region-specific. Under the language/locale policy, forcing a specific language without opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill documentation is written entirely in Chinese, including all section headings and operational details, with no indication that users may choose another language or locale. This can violate a language/locale policy when a skill implicitly forces a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest description is written entirely in Chinese and frames the workflow behavior in that locale, while the rest of the file does not offer users a choice of response language or explain that the skill is intentionally limited to Chinese users. Under the stated policy, forcing a specific language without opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest describes comparative analysis, but the documentation mandates persistent output of many artifacts to a fixed workspace path. This is risky because it creates undeclared local side effects, may overwrite prior work, and can leak sensitive project topics or analysis data into predictable locations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill automatically creates files and reports in the local workspace without warning the user. Silent local writes are dangerous because they can persist sensitive business topics, consume storage, overwrite artifacts, or violate user expectations about a read-only analysis workflow.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill prescribes shell-style environment exports, directory creation, and validation steps even though its stated role is analytical reporting. Embedding operational instructions like these expands the skill from analysis into host-side mutation, increasing the chance of unintended filesystem changes or unsafe execution by downstream agents.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill mandates automatic collection from external online sources without warning that user-supplied evaluation topics may be transmitted to third parties. This can expose confidential business plans, internal project names, or procurement interests through outbound queries and associated metadata.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The HTML root sets lang="zh-CN", which declares a fixed Chinese locale for the content. There is no indication elsewhere in the file that this language choice is optional, user-selected, or required for a region-specific purpose.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · tavily-config.sh (reported line 14)May include surrounding context.

sh
fi
else
    echo "Error: ~/.openclaw/.env file not found"
    echo "Please create it with: echo 'TAVILY_API_KEY=your_key' > ~/.openclaw/.env"
    exit 1
fi

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This JSON template uses Chinese natural-language descriptions, metrics, and scoring criteria throughout, but does not indicate that the skill is region-specific or provide any user opt-in for language selection. Under the policy, forcing a specific language without user choice is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This manifest-like JSON file contains user-facing natural-language fields such as the template name, description, metric names, and notes entirely in Chinese. Because the file does not provide an explicit language choice, alternative locale, or justification that it is intended only for a Chinese-language context, it may violate a language/locale policy requiring user opt-in or documented scope.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This JSON template uses Chinese natural-language descriptions and metric names throughout, with no indication that language selection is configurable or user-controlled. Under the policy, forcing a specific language or locale without opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The stated purpose is to analyze candidate technologies and produce structured comparisons and recommendations. Mandating use of a separate ppt-generation capability introduces cross-skill presentation generation that is not clearly justified by the manifest's core evaluation scope.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The template loads Tailwind CSS from a CDN and imports Google Fonts, which creates external network dependencies and causes client requests to third parties without disclosure. This can expose user metadata such as IP address and User-Agent, and it also introduces supply-chain and availability risk if the remote resources change or become unavailable.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The package description is written entirely in Chinese, which implies the skill is intended to operate in Chinese without indicating that users may choose another language. Under the language/locale policy, a fixed language requirement should be explicitly optional or justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

This markdown file includes language-specific typography guidance for Chinese and English, but it presents those language choices as fixed design requirements rather than user-selectable options. Under the policy rule for natural-language violations, prescribing a specific language/locale without opt-in can be a concern unless clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.