Back to skill

Security audit

AVI Assess

Security checks for vulnerabilities and agentic risk

Overview

This autonomy scoring skill is related to its stated purpose, but it reads sensitive workspace/config files and modifies workspaces during supposedly read-only assessments.

Install only if you are comfortable with the skill scanning an agent workspace and local OpenClaw configuration, including memory files and credential-bearing JSON files. Do not run it against another agent's or sensitive production workspace unless the directory is isolated and backed up. Treat readOnly as incomplete, and do not publish generated reports to IPFS or registries without reviewing and redacting identifiers such as hostname, wallet address, email, channels, and provider inventory.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (3)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/assess.js:116
Finding

Excessive Inspection of Credentials, Agent Memory, and Global Configuration

Content
View full analysis
0) { evidence.proof.walletFiles = walletFiles.map(f => path.basename(f)); points += 10; } // Check for Bankr credentials const bankrCreds = this.safeReadJson(path.join(this.config.workspace, 'bankr-credentials.json')); if (bankrCreds?.api_key) { evidence.proof.bankrConfigured = true; points += 15; } // Check for x402 wallet const x402Wallet = this.safeReadJson(path.join(this.config.workspace, 'x402-wallet.json')); if (x402Wallet?.address) { evidence.proof.x402Wallet = x402Wallet.address; points += 10; } // Check for on-chain identity const memoryPath = path.join(this.config.workspace, 'MEMORY.md'); if (memoryPath && fs.existsSync(memoryPath)) { const memory = fs.readFileSync(memoryPath, 'utf8'); if (memory.includes('ERC-8004') && memory.includes('0x')) { evidence.proof.onChainIdentity = 'ERC-8004 registered'; points += 20; } const txMatches = memory.match(/transaction|transfer|swap|bridge/gi); if (txMatches && txMatches.length > 5) { evidence.proof.transactionHistory = `${txMatches.length} TX references`; points += 15; } } ``` ```javascript // Check gateway config for channels const gatewayConfig = this.safeReadJson(this.config.openclawConfig); const channels = gatewayConfig?.channels || {}; const activeChannels = Object.keys(channels).filter(k => channels[k]?.enabled !== false); evidence.proof.channels = activeChannels; points += Math.min(25, activeChannels.length * 8); // Check for email capability const protonCreds = this.safeReadJson(path.join(this.config.workspa ...[truncated 3591 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/assess.js:353
Finding

Read-Only Assessment Still Writes to and Deletes a Target Workspace File

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/assess.js:84
Finding

Sensitive Identity and Host Metadata Is Persisted and May Be Published Through the Documented Workflow

Content
View full analysis
Remediation
View remediation
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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (22)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The documented purpose says the skill measures five autonomy dimensions, but the detected behavior includes host probing, system metadata collection, filesystem write/delete tests, and writing reports by default. That mismatch is dangerous because users may authorize what seems like a scoring utility without realizing it performs environment reconnaissance and persistent writes, which can expose sensitive host details and modify data unexpectedly.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 60)May include surrounding context.

md
const { assess_autonomy } = require('./scripts/assess.js');

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 100)May include surrounding context.

md
const { assess_autonomy } = require('./scripts/assess.js');

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 107)May include surrounding context.

md
node scripts/cli.js

Credential Access

High
Category
Privilege Escalation
Confidence
94% confidence
Finding

The code reads wallet and API credential files from the workspace to score financial capability. For an autonomy assessment skill, inspecting secrets is contextually more dangerous because the task can be accomplished by checking declared capabilities or presence of config metadata rather than opening sensitive credential stores.

Content

Scanner excerpt · scripts/assess.js (reported line 124)May include surrounding context.

js
}

    // Check for Bankr credentials
    const bankrCreds = this.safeReadJson(path.join(this.config.workspace, 'bankr-credentials.json'));
    if (bankrCreds?.api_key) {
      evidence.proof.bankrConfigured = true;
      points += 15;

Credential Access

High
Category
Privilege Escalation
Confidence
92% confidence
Finding

The skill reads proton-credentials.json and extracts the email field to include in the report evidence. This unnecessarily accesses sensitive account configuration and may expose identifiers in generated output, increasing privacy and targeting risk.

Content

Scanner excerpt · scripts/assess.js (reported line 286)May include surrounding context.

js
}

    // Check for email capability
    const protonCreds = this.safeReadJson(path.join(this.config.workspace, 'proton-credentials.json'));
    if (protonCreds?.email) {
      evidence.proof.email = protonCreds.email;
      points += 15;

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The operational assessment verifies filesystem access by creating and deleting a file in the target workspace. This is an active modification of user data space that is not necessary for a scoring tool and can cause integrity issues, trigger watchers/automation, or fail in sensitive directories.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

The findApiKeys routine enumerates known credential files and inspects secret-bearing keys to determine which services are configured. This establishes a broad secret-discovery behavior that is disproportionate to the stated purpose and could be repurposed to inventory high-value services present in the workspace.

Content

Scanner excerpt · scripts/assess.js (reported line 389)May include surrounding context.

js
findApiKeys() {
    const keys = [];
    const patterns = [
      { file: 'bankr-credentials.json', key: 'api_key', name: 'Bankr' },
      { file: 'xai-credentials.json', key: 'api_key', name: 'xAI' },
      { file: 'chainalysis-credentials.json', key: 'api_key', name: 'Chainalysis' },
      { file: 'proton-credentials.json', key: 'password', name: 'ProtonMail' }

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

Including xAI credential file inspection as part of routine assessment broadens the set of secrets the skill probes. In the context of a marketplace or reputation-oriented assessment tool, this is especially risky because users may not expect the tool to inspect and infer their integrated providers from secret files.

Content

Scanner excerpt · scripts/assess.js (reported line 390)May include surrounding context.

js
const keys = [];
    const patterns = [
      { file: 'bankr-credentials.json', key: 'api_key', name: 'Bankr' },
      { file: 'xai-credentials.json', key: 'api_key', name: 'xAI' },
      { file: 'chainalysis-credentials.json', key: 'api_key', name: 'Chainalysis' },
      { file: 'proton-credentials.json', key: 'password', name: 'ProtonMail' }
    ];

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

The code also probes for chainalysis credentials, contributing to a pattern of secret inventorying across multiple providers. Such enumeration can reveal sensitive operational relationships and security posture even if raw secrets are not exfiltrated.

Content

Scanner excerpt · scripts/assess.js (reported line 391)May include surrounding context.

js
const patterns = [
      { file: 'bankr-credentials.json', key: 'api_key', name: 'Bankr' },
      { file: 'xai-credentials.json', key: 'api_key', name: 'xAI' },
      { file: 'chainalysis-credentials.json', key: 'api_key', name: 'Chainalysis' },
      { file: 'proton-credentials.json', key: 'password', name: 'ProtonMail' }
    ];

Credential Access

High
Category
Privilege Escalation
Confidence
96% confidence
Finding

Checking proton-credentials.json for a password field is direct inspection of a sensitive secret store. Even though the code only records the provider name, reading password-bearing files for scoring is an unjustified access to credentials and increases exposure if the code is later modified, logged, or reused.

Content

Scanner excerpt · scripts/assess.js (reported line 392)May include surrounding context.

js
{ file: 'bankr-credentials.json', key: 'api_key', name: 'Bankr' },
      { file: 'xai-credentials.json', key: 'api_key', name: 'xAI' },
      { file: 'chainalysis-credentials.json', key: 'api_key', name: 'Chainalysis' },
      { file: 'proton-credentials.json', key: 'password', name: 'ProtonMail' }
    ];

    for (const pattern of patterns) {

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill advertises executable examples that reference environment-derived paths like OPENCLAW_WORKSPACE but does not declare any explicit tool or permission scope. This creates unclear execution boundaries for a skill that appears to inspect a workspace and potentially infer host capabilities, increasing the risk of overbroad access or unintended data exposure when run by an agent framework.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill explicitly describes submitting assessment data to a registry and uploading proof to IPFS, but it provides no warning that this transmits potentially sensitive assessment and system-derived data to external, possibly immutable destinations. In the context of a skill that may collect workspace and host metadata, this omission can lead to unintentional disclosure and permanent publication of operational details.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill writes a report to disk by default unless readOnly is set, causing persistent filesystem modification without strong disclosure at the API boundary. In assessment tooling, unexpected writes can leak environment details, clutter workspaces, and violate expectations of read-only analysis.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest explicitly defines the AVI framework dimensions as Decision, Financial, Information, Communication, and Temporal. The code never implements a decision dimension and substitutes operational/social categories instead, so the produced score does not match the claimed framework semantics.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The assessment invokes local shell commands via execSync to probe for installed tools, which expands the skill's authority beyond passive scoring into command execution on the host. Even though the commands are fixed strings, this still creates unnecessary execution side effects, depends on PATH resolution, and increases risk in a skill whose stated purpose is assessment rather than system interrogation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The write/delete test modifies the workspace without explicit disclosure, which is unsafe for a skill presented as an assessor. Even if the file is removed, the side effect can trigger build hooks, file monitors, backups, or audit trails and therefore exceeds expected read-only behavior.

Content

No source excerpt is available for this finding.

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.

Content

No source excerpt is available for this finding.

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.

Content

No source excerpt is available for this finding.

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.

Content

No source excerpt is available for this finding.

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.

Content

No source excerpt is available for this finding.

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.

Content

No source excerpt is available for this finding.