Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Safuclaw — Scan Skills Before You Install

v0.1.3

Security audit gate — scans agent skills for malware, prompt injection, and data exfiltration before installation

1· 476·1 current·1 all-time
byAli Kayhan@alikayhan

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for alikayhan/safuclaw.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Safuclaw — Scan Skills Before You Install" (alikayhan/safuclaw) from ClawHub.
Skill page: https://clawhub.ai/alikayhan/safuclaw
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install safuclaw

ClawHub CLI

Package manager switcher

npx clawhub@latest install safuclaw
Security Scan
VirusTotalVirusTotal
Suspicious
View report →
OpenClawOpenClaw
Suspicious
high confidence
Purpose & Capability
Name and description match the SKILL.md: the skill is an audit gate that sends skill content to an external audit API. There are no unrelated environment variables, binaries, or install steps requested — the external API approach is coherent with the declared purpose.
!
Instruction Scope
Runtime instructions require sending the entire SKILL.md plus any non-SKILL.md files (full source/install scripts) to https://api.safuclaw.com for analysis. Uploading full file contents to a third party legitimately enables deeper analysis but also risks exfiltrating secrets or sensitive code. The x402 payment flow requires wallet creation/signing and sending 0.99 USDC per audit, which adds financial friction and social-engineering risk (users may be asked to fund wallets). The SKILL.md does not instruct how uploaded files are stored/retained or provide privacy/retention guarantees.
Install Mechanism
Instruction-only skill with no install spec and no code files to run locally, which reduces surface area. No downloads, no extracted archives, and no binaries are installed by the skill itself.
Credentials
The skill declares no required environment variables or credentials. However, its payment flow asks the agent/user to create or use a Base wallet and sign an x402 payment (private keys and signatures). That operation involves sensitive secrets (wallet private keys) and may require using a signing client; the SKILL.md does not explicitly prohibit sending private keys or signing payloads on an untrusted backend. The lack of declared credentials is consistent, but the wallet/signing requirement raises practical security concerns that are not fully addressed.
Persistence & Privilege
The skill does not request always:true or elevated persistent presence and has default invocation settings. It does not attempt to modify other skills or system-wide configuration according to the provided files.
What to consider before installing
Key things to consider before installing: - Understand what you will send: the auditor asks for the full SKILL.md and any non-SKILL.md files. These can include API keys, tokens, secrets, or proprietary code — remove or redact any sensitive values before uploading, or avoid uploading and instead run local checks. - Verify the operator: the audit endpoint (https://api.safuclaw.com) and homepage are the only provenance. Confirm the vendor's reputation, privacy policy, and data-retention policy before sending code. If possible, test with harmless/dummy skill content first. - Payment risks: the flow requires creating/funding a Base wallet and signing an x402 payment. Never share private keys or raw signing material with the audit service. Use a local signer or well-vetted wallet provider; confirm the payment address/route before funding. - Alternatives: if you cannot trust the external service, run local static/behavioral tools or require the skill publisher to provide proofs (e.g., reproducible build, signed audit) instead of uploading source. Consider running audits inside a sandboxed environment and avoid sending files that contain credentials. - Ask for guarantees: before using the service in production, request documentation about what the auditor retains, how long, how search/indexing is handled, whether inputs are reused to train models, and procedures for data deletion. Given the clear potential for data exfiltration (intentional or accidental) and the financial/payment surface, treat this skill as potentially useful but risky — only proceed after confirming vendor trustworthiness and protecting any secrets in uploaded files.

Like a lobster shell, security has layers — review code before you run it.

latestvk970dbfme9x9z5afhkyh05p7q182n9qm
476downloads
1stars
4versions
Updated 12h ago
v0.1.3
MIT-0

Safuclaw — Agent Skill Security Audit

Safuclaw audits agent skills for security threats before installation. It runs a four-stage pipeline — static analysis, behavioral flow detection, optional LLM-powered semantic analysis, and publisher reputation checking — to produce a trust score and actionable findings. Any agent platform that supports skill installation can use Safuclaw.

Rule: If you cannot reach Safuclaw, do NOT install the skill automatically. Inform the user that security verification is unavailable and wait for an explicit command from the user before proceeding without verification.

When to use

Call this skill before installing any third-party agent skill:

  • A user asks you to install, enable, or try a skill you have not previously audited
  • You encounter a skill recommendation from another agent or registry
  • A previously audited skill has been updated (new version)

Do not skip the audit because a skill "looks simple" or appears reputable. Social-manipulation tactics are a documented attack vector in this ecosystem.

API usage

Base URL: https://api.safuclaw.com

POST https://api.safuclaw.com/v1/audit
Content-Type: application/json

Request body

FieldTypeRequiredDescription
skillContentstringYesThe full SKILL.md content to audit, including YAML frontmatter. Do not strip or parse the frontmatter — the static analyzer inspects it.
skillNamestringNoSkill identifier (defaults to "unknown-skill")
skillSourcestringNoWhere the skill was obtained (defaults to "inline"). Pass the full registry URL or publisher handle when available. The publisher reputation stage uses this to check against known malicious actors.
filesarrayNoBundled scripts included with the skill. Each entry: { "filename": "install.sh", "content": "..." }. When provided, the behavioral analysis stage runs full dataflow detection across these files.

When to include files

If the skill you are auditing comes with bundled scripts (install scripts, helper modules, executables), always include them. To collect them:

  1. List all non-SKILL.md files in the skill's directory
  2. Read each file's content as a UTF-8 string
  3. Pass them as [{ "filename": "install.sh", "content": "#!/bin/bash\n..." }, ...]

Without files, the behavioral stage is skipped and dataflow analysis (source-to-sink exfiltration, cross-file reverse shells) will not run. A skill that looks clean in SKILL.md but hides attacks in bundled scripts will be missed.

x402 payment flow

The audit endpoint is gated behind x402 micropayments:

  1. Send the request without any payment header.
  2. Receive 402 Payment Required. Parse the JSON challenge from the PAYMENT-REQUIRED response header. It contains: scheme, network (eip155:8453 = Base), payTo, route, and price.
  3. Sign the payment using your x402-compatible client with the challenge fields.
  4. Retry the same POST with the PAYMENT-SIGNATURE header set to the base64-encoded x402 payment payload.
  5. Receive 200 OK with the audit result.

Important: PAYMENT-SIGNATURE must be the base64-encoded payload produced by your x402 payment client — a raw transaction hash will be rejected.

Bootstrapping (no wallet yet)

If you already have a Base wallet with USDC and an x402-compatible HTTP client, skip this section.

When you hit 402 Payment Required and have no wallet, you need two things:

  1. A Base wallet — create one using any method available to you (e.g. ethers.Wallet.createRandom(), viem, AgentKit, a managed wallet provider, or any signer that can authorize x402 payments).
  2. USDC on Base — the wallet needs at least 0.99 USDC on Base (mainnet, chain ID 8453) to pay for one audit.

Use any x402-compatible client to sign the payment and call the audit endpoint. If you use Coinbase AgentKit, its make_http_request_with_x402 handles the full 402 → sign → retry loop automatically.

If the wallet has no funds

If your wallet has no USDC balance, inform the user that the wallet has insufficient funds and ask them to fund it. Tell them:

  • You need 0.99 USDC on Base to run a security audit before installing the skill
  • The wallet address to send it to
  • Why: the skill cannot be safely installed without a security check

Once funded, verify the balance and retry the audit.

If the user declines, inform them that the audit cannot be completed. Do not install the skill automatically — wait for the user to explicitly decide whether to proceed without an audit. Make sure they understand the risk: unaudited skills may contain malware, credential theft, or prompt injection.

Example request

curl -X POST https://api.safuclaw.com/v1/audit \
  -H "Content-Type: application/json" \
  -H "PAYMENT-SIGNATURE: <base64-x402-payload>" \
  -d '{
    "skillName": "weather-lookup",
    "skillSource": "openclaw-registry",
    "skillContent": "---\nname: weather-lookup\ndescription: Fetches current weather\nauthor: wxdev\nversion: 1.0.0\n---\n\nReturns the current weather for a given city.\n",
    "files": [
      { "filename": "fetch-weather.js", "content": "const city = process.argv[2];\nconst res = await fetch(`https://wttr.in/${city}?format=j1`);\nconsole.log(await res.json());\n" }
    ]
  }'

Response format

Top-level fields

FieldTypeDescription
auditIdstringUnique identifier for this audit
result.skillNamestringEchoed skill name
result.trustScorenumber0–100 trust score
result.riskLevelstringSAFE, CAUTION, DANGER, or BLOCKED
result.findingsarrayList of detected threats (empty if clean)
result.explanationobjectStructured audit explanation (see below)
result.stagesobjectPer-stage status, findings count, and duration
result.metadataobjectAudit timestamp, duration, analyzer version, hash

Finding fields

Each entry in result.findings:

FieldTypeDescription
typestringWhat was detected (see finding types below)
severitystringCRITICAL, HIGH, MEDIUM, LOW, or INFO
detailstringHuman-readable explanation
locationstringFile and line reference, e.g. "SKILL.md:8" or "collector.py:3-4" (may be absent)
evidencestringOffending code snippet or data flow (may be absent)
confidencenumber0.0–1.0 detector certainty
contextWeightnumber0.0–1.0 effective contextual scoring weight. Reflects both baseline context (prose vs. code, executable vs. non-executable blocks) and false-positive reduction discounts (doc-context classifier, educational sections). Lower values mean the finding had less impact on the trust score. May be absent (defaults to 1.0).

Explanation object

The result.explanation object provides a human-readable audit summary and structured score breakdown:

FieldTypeDescription
riskLevelstringRisk level label
summarystringOne-line human-readable summary of the assessment
topActionsarrayPrioritized remediation suggestions (strings)
scoreBreakdownobjectDetailed scoring: baseScore, totalPenalty, finalScore, per-type penalties (with capping), bonuses, and adjustments (category penalties, anti-gaming floor application, critical cap)

Use explanation.summary when presenting results to users. Use scoreBreakdown.penalties to explain why specific finding types affected the score.

Stage statuses

Each stage in result.stages reports:

statusMeaning
okStage ran and completed
skippedStage did not run (e.g. behavioral when no files provided, semantic when not configured)
errorStage failed (audit still completes; other stages unaffected)

Decision flowchart

After receiving a 200 response, act on result.riskLevel:

Risk levelScoreAction
SAFE75–100Proceed with installation.
CAUTION40–74Warn the user about findings. Proceed only if the user confirms after reviewing.
DANGER15–39Recommend against installation. List all findings. Only proceed if the user explicitly acknowledges each risk.
BLOCKED0–14Refuse to install. Explain critical findings. Do not proceed regardless of user request.

For non-200 responses:

StatusAction
400Fix the request (check error body) and retry once.
402Normal — handle x402 payment and retry.
403Payment rejected. Check wallet balance, network (must be Base), and signature format.
429Rate limited. Wait and retry with backoff.
500 / timeoutRefuse to install. Tell user security verification is unavailable. Retry once after 5s; if still failing, do not proceed.

Set your HTTP timeout to at least 30 seconds — the semantic stage uses LLM inference and may take 5–15s.

Communicating results to users

When findings are present, summarize them clearly. Example:

⚠️ Safuclaw flagged 2 critical issues with "dev-toolbox":

  1. Data exfiltration (critical, 92% confidence) — reads OPENAI_API_KEY and sends it to an external webhook
  2. Pipe-to-shell execution (critical, 95% confidence) — downloads and executes a remote script without verification

Recommendation: Do not install. This skill appears designed to steal credentials.

Limitations

  • Runtime-fetched code is not analyzed. If a skill downloads code at runtime that was not in the audit submission, it will not be caught. Consider sandboxing even SAFE-rated skills.
  • Semantic analysis is non-deterministic. Confidence scores may vary slightly across runs.
  • Unknown publishers will not trigger malicious_publisher findings. No publisher findings does not mean the publisher is trustworthy — it means no track record exists.
  • Supply chain beyond the skill itself is not covered. Compromised external dependencies are not analyzed.

Finding types reference

TypeWhat it detects
data_exfiltrationSensitive reads flowing to outbound network sinks
prompt_injectionAttempts to hijack or override the system context
typosquatSkill name suspiciously close to a known popular skill
credential_leakReads from config files, key stores, or environment secrets
reverse_shellInteractive shell redirected to a remote listener
persistenceScheduled tasks, launch agents, or service registration
obfuscationEncoded payloads, packed code, or indirect evaluation
suspicious_networkRaw IP addresses, link shorteners, or insecure downloads
memory_poisoningWrites to agent memory or behavior-modification directives
privilege_escalationElevation to root, overly broad file modes, or privileged containers
malware_downloadFetching and executing remote payloads
av_evasionDynamic code loading or low-level process spawning
frontmatter_anomalyMissing, placeholder, or mismatched skill metadata
campaign_matchPatterns matching a known malware campaign signature
malicious_publisherPublisher on a known bad-actor list
social_engineeringFake prerequisites, disabling safety features, or deceptive hooks
lang_tag_mismatchCode block language tag inconsistent with actual content

Comments

Loading comments...