Back to skill

Security audit

security scanner

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed remote security-scanning wrapper that sends user-supplied skill data to Claw0x for analysis, with privacy considerations but no evidence of hidden or destructive behavior.

Install this only if you are comfortable sending the selected repo URL, skill slug, or direct source-code payload to Claw0x. Avoid direct-code mode for proprietary code or secrets unless your organization allows external scanning, and rotate the CLAW0X_API_KEY if it is exposed.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
handler.ts:92
Finding

Potentially Sensitive Source Material Is Transmitted to a Third-Party API Without Local Redaction

Content
View full analysis
; skill_md?: string; } ``` ```typescript // Call Claw0x Gateway API const response = await fetch('https://api.claw0x.com/v1/call', { method: 'POST', headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ skill: 'security-scanner', input }) }); ``` ### Technical Analysis The skill accepts source code, dependency information, and SKILL.md content as fields of `ScanInput`. It then serializes the complete input object and sends it to `https://api.claw0x.com/v1/call`. Source material submitted for security scanning may contain API keys, passwords, private endpoints, proprietary algorithms, internal comments, or other confidential information. The local implementation does not inspect the content for secrets, redact likely credentials, restrict transmitted fields, display an upload preview, or require explicit confirmation before direct-code submission. The network request is necessary for the declared API-based scanning functionality and is documented in `SKILL.md`. The documentation also advises using local tools where proprietary code cannot leave the network. Therefore, this behavior is not concealed and does not establish malicious exfiltration. The security concern is that the implementation relies entirely on callers to recognize and remove sensitive content before transmission. The `CLAW0X_API_KEY` is also transmitted in the authorization header, but this is necessary for authentication and is sent only to the documented HTTPS API endpoint. The implementation reads only that named environment variable and does not ...[truncated 1633 chars]
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
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (38)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

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).

Content

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

json
{
  "code": "import os\nos.system('rm -rf /')",
  "dependencies": { "requests": "2.28.0" },
  "skill_md": "---\nname: my-skill\nallowed-tools: Bash(curl *)\n---"
}

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

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).

Content

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

json
{
  "code": "import os\nos.system('rm -rf /')",
  "dependencies": { "requests": "2.28.0" },
  "skill_md": "---\nname: my-skill\nallowed-tools: Bash(curl *)\n---"
}

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 · SKILL.md (reported line 464)May include surrounding context.

  1. Create API key in Dashboard
  2. Set environment variable:
    bash
    # Add to ~/.openclaw/.env or your agent's environment
    CLAW0X_API_KEY=ck_live_...
    

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The manifest declares only an environment requirement and omits any explicit tool/permission scope, while the skill clearly relies on network access and can transmit user-supplied repositories or source code to a third-party API. This mismatch weakens user consent and policy enforcement because operators may assume a local scanner when the skill actually performs remote submission.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest frames the skill as a security scanner, but operationally it is also a wrapper around Claw0x's hosted service for uploading repository URLs or raw code. That difference matters because users may grant it access under the assumption of local inspection, not third-party platform integration.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The trigger guidance is broad enough to activate on common requests like 'is this skill safe?' or 'check skill security' without making clear that such use may upload code or repository details externally. Over-broad invocation increases the chance of accidental use in contexts where the user did not consent to data sharing.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill requires a vendor API key and sends scanned repositories or code to an external service, but its presentation can be read like a generic security scanner rather than a remote data-submission integration. This creates a data handling and trust risk, especially when users may submit proprietary code expecting local analysis.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The high-level description emphasizes scanning benefits but does not clearly warn that submitted code/repository data is sent to a remote API. In a security tool, omission of this fact is especially risky because users are likely to provide sensitive material during assessment.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The bare endpoint reference corroborates that this skill depends on an external Claw0x service. In context, the issue is not the URL alone but the repeated undisguised reliance on remote submission without equally prominent privacy warnings.

Content

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

Step 2: Scan Your First Skill (1 minute)

bash
curl -X POST https://api.claw0x.com/v1/call \
  -H "Authorization: Bearer ck_live_..." \
  -H "Content-Type: application/json" \
  -d '{

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The bare endpoint reference corroborates that this skill depends on an external Claw0x service. In context, the issue is not the URL alone but the repeated undisguised reliance on remote submission without equally prominent privacy warnings.

Content

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

Step 2: Scan Your First Skill (1 minute)

bash
curl -X POST https://api.claw0x.com/v1/call \
  -H "Authorization: Bearer ck_live_..." \
  -H "Content-Type: application/json" \
  -d '{

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

The documentation recommends auto-approving low-risk skills based solely on an automated score. Security scanners are imperfect, so using them as the sole approval authority can allow malicious or privacy-invasive skills through without human review.

Content

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

  1. Automated scan runs on submission
  2. Risk score determines approval workflow
  3. High-risk skills get manual review
  4. Low-risk skills auto-approve

Example:

typescript

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This endpoint reference in the marketplace example again indicates third-party transmission of repository data. Repetition across examples increases likelihood that users copy-paste remote submission patterns without understanding the associated data handling implications.

Content

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

Example:

typescript
async function reviewSkillSubmission(repoUrl) {
  const response = await fetch('https://api.claw0x.com/v1/call', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.CLAW0X_API_KEY}`,

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This endpoint reference in the marketplace example again indicates third-party transmission of repository data. Repetition across examples increases likelihood that users copy-paste remote submission patterns without understanding the associated data handling implications.

Content

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

Example:

typescript
async function reviewSkillSubmission(repoUrl) {
  const response = await fetch('https://api.claw0x.com/v1/call', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.CLAW0X_API_KEY}`,

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

The CI endpoint reference contributes to a pattern of external processing embedded in automation guidance. The main danger is silent normalization of sending build-related repository data to an outside vendor.

Content

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

md
# .github/workflows/security.yml
- name: Security Scan
  run: |
    RESULT=$(curl -X POST https://api.claw0x.com/v1/call \
      -H "Authorization: Bearer $CLAW0X_API_KEY" \
      -d '{"skill":"security-scanner","input":{"repo_url":"${{ github.repository }}"}}')

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

The CI endpoint reference contributes to a pattern of external processing embedded in automation guidance. The main danger is silent normalization of sending build-related repository data to an outside vendor.

Content

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

md
# .github/workflows/security.yml
- name: Security Scan
  run: |
    RESULT=$(curl -X POST https://api.claw0x.com/v1/call \
      -H "Authorization: Bearer $CLAW0X_API_KEY" \
      -d '{"skill":"security-scanner","input":{"repo_url":"${{ github.repository }}"}}')

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

This endpoint reference appears in a recurring audit loop, showing that the service can continuously receive metadata about published skills. That may expose longitudinal intelligence about a platform's inventory and risk trends.

Content

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

md
const skills = await db.skills.findMany({ status: 'published' });
  
  for (const skill of skills) {
    const response = await fetch('https://api.claw0x.com/v1/call', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${process.env.CLAW0X_API_KEY}`,

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

This endpoint reference appears in a recurring audit loop, showing that the service can continuously receive metadata about published skills. That may expose longitudinal intelligence about a platform's inventory and risk trends.

Content

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

md
const skills = await db.skills.findMany({ status: 'published' });
  
  for (const skill of skills) {
    const response = await fetch('https://api.claw0x.com/v1/call', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${process.env.CLAW0X_API_KEY}`,

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

Here the endpoint is part of a pre-commit upload of staged code, which materially raises impact compared with simple URL submission. It can expose unreleased code and secrets before code review or repository protections apply.

Content

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

md
# Scan staged code
CODE=$(cat $FILES)
RESULT=$(curl -s -X POST https://api.claw0x.com/v1/call \
  -H "Authorization: Bearer $CLAW0X_API_KEY" \
  -d "{\"skill\":\"security-scanner\",\"input\":{\"code\":\"$CODE\"}}")

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

Here the endpoint is part of a pre-commit upload of staged code, which materially raises impact compared with simple URL submission. It can expose unreleased code and secrets before code review or repository protections apply.

Content

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

md
# Scan staged code
CODE=$(cat $FILES)
RESULT=$(curl -s -X POST https://api.claw0x.com/v1/call \
  -H "Authorization: Bearer $CLAW0X_API_KEY" \
  -d "{\"skill\":\"security-scanner\",\"input\":{\"code\":\"$CODE\"}}")

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

The install-hook endpoint reference shows remote validation is integrated into control flow for installations. That means a third party can observe attempted installs and related metadata, which may be sensitive in some environments.

Content

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

typescript
// Scan before installing skill
agent.onSkillInstall(async (skillUrl) => {
  const response = await fetch('https://api.claw0x.com/v1/call', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.CLAW0X_API_KEY}`,

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

The install-hook endpoint reference shows remote validation is integrated into control flow for installations. That means a third party can observe attempted installs and related metadata, which may be sensitive in some environments.

Content

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

typescript
// Scan before installing skill
agent.onSkillInstall(async (skillUrl) => {
  const response = await fetch('https://api.claw0x.com/v1/call', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.CLAW0X_API_KEY}`,

External Transmission

Medium
Category
Data Exfiltration
Confidence
92% confidence
Finding

This example performs an HTTP POST to Claw0x with repository information, demonstrating external transmission of potentially sensitive metadata. The behavior appears intended, but it is still security-relevant because the skill's function depends on sending user-controlled inputs to a third party.

Content

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

md
import requests

def vet_skill(repo_url):
    response = requests.post(
        'https://api.claw0x.com/v1/call',
        headers={
            'Authorization': f'Bearer {os.getenv("CLAW0X_API_KEY")}',

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The Python example confirms the same remote submission path via requests.post. It is functionally expected but still a true disclosure risk when used on non-public repositories or proprietary assets.

Content

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

md
def vet_skill(repo_url):
    response = requests.post(
        'https://api.claw0x.com/v1/call',
        headers={
            'Authorization': f'Bearer {os.getenv("CLAW0X_API_KEY")}',
            'Content-Type': 'application/json'

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

This endpoint reference in GitHub Actions contributes to the overall remote-processing risk surface. CI environments often operate on private codebases, so unqualified examples can mislead users into sharing more than intended.

Content

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

md
- name: Scan for vulnerabilities
        run: |
          RESULT=$(curl -X POST https://api.claw0x.com/v1/call \
            -H "Authorization: Bearer ${{ secrets.CLAW0X_API_KEY }}" \
            -H "Content-Type: application/json" \
            -d "{\"skill\":\"security-scanner\",\"input\":{\"repo_url\":\"https://github.com/${{ github.repository }}\"}}")

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

This endpoint reference in GitHub Actions contributes to the overall remote-processing risk surface. CI environments often operate on private codebases, so unqualified examples can mislead users into sharing more than intended.

Content

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

md
- name: Scan for vulnerabilities
        run: |
          RESULT=$(curl -X POST https://api.claw0x.com/v1/call \
            -H "Authorization: Bearer ${{ secrets.CLAW0X_API_KEY }}" \
            -H "Content-Type: application/json" \
            -d "{\"skill\":\"security-scanner\",\"input\":{\"repo_url\":\"https://github.com/${{ github.repository }}\"}}")