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<![CDATA[ ## Vulnerability Details **File Location**: `handler.ts:14-18`, `handler.ts:92-101` **Vulnerability Type**: Unredacted third-party transmission of potentially sensitive data **Risk Level**: Medium ### Vulnerable Code ```typescript interface ScanInput { repo_url?: string; skill_slug?: string; code?: string; dependencies?: Record<string, string>; 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
<![CDATA[ ## Remediation Suggestions 1. Require explicit user confirmation before uploading direct source code, clearly identifying the destination hostname and the fields that will be transmitted. 2. Add local secret detection and redact common credential formats, private keys, authorization tokens, connection strings, and password assignments before serialization. 3. Provide an upload preview showing the exact files, fields, and approximate payload size that will leave the local environment. 4. Support field and file allowlists so callers can submit only the minimum data required for a scan. 5. Reject or warn on high-confidence secret findings unless the user explicitly overrides the warning. 6. Offer a local or self-hosted scanning mode for proprietary repositories and environments where source code cannot cross the network boundary. 7. Document the external service's retention, access-control, encryption, logging, deletion, and model-training policies. 8. Minimize API-key privileges, support key rotation, and avoid including request authorization data in logs or propagated error messages. ]]>
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
Content
```json
{
  "code": "import os\nos.system('rm -rf /')",
  "dependencies": { "requests": "2.28.0" },
  "skill_md": "---\nname: my-skill\nallowed-tools: Bash(curl *)\n---"
}
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).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
```json
{
  "code": "import os\nos.system('rm -rf /')",
  "dependencies": { "requests": "2.28.0" },
  "skill_md": "---\nname: my-skill\nallowed-tools: Bash(curl *)\n---"
}
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).

Credential Access

High
Category
Privilege Escalation
Content
2. **Create API key** in Dashboard
3. **Set environment variable**:
   ```bash
   # Add to ~/.openclaw/.env or your agent's environment
   CLAW0X_API_KEY=ck_live_...
   ```
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Lp3

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.

Description-Behavior Mismatch

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

Vague Triggers

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

Context-Inappropriate Capability

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

Missing User Warnings

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

External Transmission

Medium
Category
Data Exfiltration
Content
### 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 '{
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.

External Transmission

Medium
Category
Data Exfiltration
Content
### 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 '{
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.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
2. Automated scan runs on submission
3. Risk score determines approval workflow
4. High-risk skills get manual review
5. Low-risk skills auto-approve

**Example**:
```typescript
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.

External Transmission

Medium
Category
Data Exfiltration
Content
**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}`,
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.

External Transmission

Medium
Category
Data Exfiltration
Content
**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}`,
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.

External Transmission

Medium
Category
Data Exfiltration
Content
# .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 }}"}}')
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.

External Transmission

Medium
Category
Data Exfiltration
Content
# .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 }}"}}')
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.

External Transmission

Medium
Category
Data Exfiltration
Content
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}`,
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.

External Transmission

Medium
Category
Data Exfiltration
Content
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}`,
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.

External Transmission

Medium
Category
Data Exfiltration
Content
# 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\"}}")
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.

External Transmission

Medium
Category
Data Exfiltration
Content
# 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\"}}")
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.

External Transmission

Medium
Category
Data Exfiltration
Content
```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}`,
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.

External Transmission

Medium
Category
Data Exfiltration
Content
```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}`,
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.

External Transmission

Medium
Category
Data Exfiltration
Content
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")}',
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.

External Transmission

Medium
Category
Data Exfiltration
Content
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'
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.

External Transmission

Medium
Category
Data Exfiltration
Content
- 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 }}\"}}")
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.

External Transmission

Medium
Category
Data Exfiltration
Content
- 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 }}\"}}")
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.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
handler.ts:9