Skill flagged — suspicious patterns detected

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

Skill Validator

小三万技能验证工具,自动测试新安装 Skill 的功能完整性、边界情况、潜在问题,并提供完善建议。触发词:验证skill、测试新技能、skill能用吗、检查skill功能。

MIT-0 · Free to use, modify, and redistribute. No attribution required.
0 · 21 · 0 current installs · 0 all-time installs
MIT-0
Security Scan
VirusTotalVirusTotal
Suspicious
View report →
OpenClawOpenClaw
Suspicious
high confidence
Purpose & Capability
名称和说明称为“Skill 验证器”,脚本确实实现了检查、静态搜索、运行被测 Skill 的脚本并生成报告——总体上与目的对齐。但实现细节有不一致:SKILL.md 示例使用 ~/.openclaw/... 路径,而脚本硬编码 SKILL_DIR="/root/.openclaw/workspace/skills",SKILL.md 提到的 validate-all.sh 在包清单中缺失。读取并执行目标 Skill 的脚本是验证器需要做的事情,但路径和文件清单的不一致是设计/部署上的问题。
!
Instruction Scope
validate.sh 会直接执行目标 skill 的脚本(例如 output=$($first_script 2>&1) 和 bash "$SKILL_PATH/scripts/diagnose.sh" | head -5),并对目标目录做广泛的 grep/读取操作。脚本执行没有沙箱、没有 timeout/ulimit(虽然 SECURITY.md 建议了这些修复),因此在验证未知或不受信任的 skills 时可能导致任意删除、数据泄露或后门植入。脚本还会遍历并读取目标 skill 的所有文件(grep -r),扩大了读取敏感数据的可能性。
Install Mechanism
这是 instruction + bundled scripts 的技能(无外部 install spec、无下载),不会在安装阶段从不可信 URL 拉取代码;这降低了供应链下载风险。
Credentials
技能声明不需要任何环境变量或凭据,但运行时会检查目标 Skill 的环境变量并可能 report(例如 EMAIL_*)。脚本硬编码了对 /root/.openclaw/workspace/skills 的访问,这要求对该路径的读取/列出权限(在多用户或非-root 环境中不合适)。总体上没有请求外部凭据,但对主机文件系统(尤其 root 路径)的访问权是隐含且可能不必要或过宽的。
!
Persistence & Privilege
技能没有设置 always:true,也不修改其他技能配置,但能在运行时直接执行目标技能的脚本,这赋予它在执行期间执行任意代码的能力(高影响面)。尽管不是持久化特权,但该执行能力结合无沙箱/无资源限制构成重大运行时风险。
Scan Findings in Context
[exec-external-skill-scripts] expected: validate.sh 和 validate-recent.sh 明确执行被测 skill 中的脚本(直接运行 first_script、bash "$SKILL_PATH/scripts/diagnose.sh")。执行被测脚本是验证器的预期行为, 但应当与强隔离/超时/静态分析搭配;当前实现缺少这些保护。
[hardcoded-root-skill-dir] unexpected: 脚本将 SKILL_DIR 设为 /root/.openclaw/...,而 SKILL.md 示例使用 ~/.openclaw/…,路径不一致并且硬编码为 root 可能导致权限或 multi-user 问题,并使该技能在非-root 环境下行为异常。
What to consider before installing
这套工具确实做了你期望的验证工作(检查文档、找脚本、运行示例、生成报告),但实现有明显风险。不要在主机的常规环境上直接用它来验证来自不受信任来源的 skills。具体建议: - 在隔离环境中运行:把验证器放到容器或沙箱(Docker、firejail 等),并在容器中挂载一个只含待测 skill 的临时目录。SECURITY.md 已建议使用沙箱;请遵循该建议。 - 先做静态审查:在执行任何目标脚本前,先用静态检测(grep 危险命令、查找网络调用、base64+eval 模式等)决定是否允许执行。SECURITY.md 提供了示例检测函数。 - 添加 runtime 限制:如果必须执行,给每次执行加上 timeout(timeout/ulimit)、内存/文件限制,并记录审计日志。 - 修正路径与脚本差异:注意 SKILL.md 与脚本中的路径不一致(~/.openclaw vs /root/.openclaw),并确认 validate-all.sh、validate-all.sh 在清单是否缺失。 - 手工审查关键点:重点检查 validate.sh 中对 first_script 的直接执行和对 diagnose.sh 的调用(这些位置能运行任意代码)。在确认安全前,不要对生产主机运行 validate-recent 或对所有 skills 执行批量验证。 综上:该技能“看起来是它所声称的验证器”,但目前实现缺乏必要的隔离与防护措施——在不受信任的环境下使用前请先改进或只在隔离环境中运行。

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

Current versionv1.1.0
Download zip
latestvk97d58xaz6ad8jhnzt42007c7h836e0c

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

Runtime requirements

🧪 Clawdis

SKILL.md

🧪 Skill 功能验证工具

一句话描述:验证新安装 Skill 的功能是否正常,发现潜在问题,提供完善建议。


🎯 设计思路

验证方法论

方法说明适用场景
举例法提供正常输入,验证功能正确性基础功能验证
反证法提供错误/边界输入,验证容错能力异常处理验证
破解法提供极端/恶意输入,测试稳定性安全性验证
对比法与预期输出对比,评估准确性质量评估

验证流程

┌─────────────────┐
│  读取 SKILL.md  │ ← 获取功能描述、依赖
└────────┬────────┘
         ▼
┌─────────────────┐
│  检查依赖项     │ ← bins、env、files
└────────┬────────┘
         ▼
┌─────────────────┐
│  举例法验证     │ ← 正常场景测试
└────────┬────────┘
         ▼
┌─────────────────┐
│  反证法验证     │ ← 边界/异常测试
└────────┬────────┘
         ▼
┌─────────────────┐
│  破解法验证     │ ← 压力/安全测试
└────────┬────────┘
         ▼
┌─────────────────┐
│  生成验证报告   │ ← 结果 + 建议
└─────────────────┘

📋 验证清单

1️⃣ 基础验证(举例法)

检查项说明通过标准
文件完整性SKILL.md、scripts 存在文件存在
依赖可用bins/env 满足依赖可获取
基本功能核心功能正常输出符合预期
文档清晰用法说明完整用户可理解

2️⃣ 异常验证(反证法)

检查项说明通过标准
空输入无参数调用不崩溃,有提示
错误输入非法参数有错误提示
边界值极端值输入正确处理
缺失依赖未满足依赖有明确提示

3️⃣ 安全验证(破解法)

检查项说明通过标准
注入测试特殊字符输入无安全漏洞
权限检查敏感操作权限正确拒绝
资源限制大量输入不耗尽资源
并发测试多次调用无竞态条件

4️⃣ 质量验证(对比法)

检查项说明通过标准
输出格式结果格式一致符合预期格式
性能表现响应时间合理< 预期时间
准确性结果正确率> 90%

💻 使用方法

命令行

# 验证指定 Skill(功能 + 安全 + UX)
bash ~/.openclaw/workspace/skills/skill-validator/scripts/validate.sh <skill-name>

# UX 用户体验专项验证
bash ~/.openclaw/workspace/skills/skill-validator/scripts/validate-ux.sh <skill-name>

# 验证最近安装的 Skill
bash ~/.openclaw/workspace/skills/skill-validator/scripts/validate-recent.sh

# 验证所有 Skill
bash ~/.openclaw/workspace/skills/skill-validator/scripts/validate-all.sh

对话触发

用户:验证一下我新安装的 email 技能
AI:让我帮你验证 openclaw-email 技能...
    [执行验证脚本]
    
    ✅ 基础验证通过
      - SKILL.md 存在
      - Python3 可用
    
    ⚠️ 发现问题
      - EMAIL_ADDRESS 未设置
      - EMAIL_PASSWORD 未设置
    
    📋 建议
      1. 设置环境变量: export EMAIL_ADDRESS="your@email.com"
      2. 生成应用密码并设置: export EMAIL_PASSWORD="xxx"

📊 验证报告示例

╔══════════════════════════════════════════════════════════╗
║           🧪 Skill 验证报告: openclaw-email            ║
╚══════════════════════════════════════════════════════════╝

📅 验证时间: 2026-03-19 20:00

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✅ 基础验证 (4/4 通过)
  ✓ SKILL.md 文件存在
  ✓ scripts/ 目录存在  
  ✓ Python3 可用
  ✓ IMAP 连接正常

⚠️ 配置验证 (2/4 通过)
  ✓ EMAIL_ADDRESS 已设置
  ✓ EMAIL_IMAP_SERVER 已设置
  ✗ EMAIL_PASSWORD 未设置
  ✗ EMAIL_SMTP_SERVER 未设置

❌ 功能验证 (0/2 通过)
  ✗ 发送邮件失败(缺少密码)
  ✗ 接收邮件失败(缺少密码)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📋 完善建议

1. [必须] 设置邮箱应用密码
   export EMAIL_PASSWORD="your_app_password"

2. [建议] 设置 SMTP 服务器
   export EMAIL_SMTP_SERVER="smtp.gmail.com"

3. [优化] 添加错误重试机制

4. [文档] 补充常见错误码说明

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

总体评分: 60/100
状态: ⚠️ 部分可用(需配置)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🔧 验证脚本结构

skill-validator/
├── SKILL.md                    # 本文件
├── scripts/
│   ├── validate.sh             # 主验证脚本
│   ├── validate-recent.sh      # 验证最近安装
│   ├── validate-all.sh         # 验证所有 Skill
│   ├── test-basic.sh           # 基础验证
│   ├── test-edge.sh            # 边界验证
│   └── test-security.sh        # 安全验证
└── templates/
    ├── report.md               # 报告模板
    └── suggestions.md          # 建议模板

🎨 验证策略(按 Skill 类型)

API 类 Skill

  • 测试 API 连接
  • 验证认证流程
  • 检查错误处理
  • 测试限流处理

工具类 Skill

  • 测试核心命令
  • 验证参数解析
  • 检查输出格式
  • 测试异常情况

内容生成类 Skill

  • 测试生成质量
  • 验证格式正确
  • 检查多样性
  • 评估准确性

自动化类 Skill

  • 测试触发条件
  • 验证执行流程
  • 检查状态管理
  • 测试并发情况

📝 验证结果状态

状态图标说明
通过功能正常
警告⚠️部分问题,可使用
失败无法使用,需修复
跳过无法验证(如需外部服务)

🔄 与其他 Skill 配合

配合技能场景
config-diagnose验证后诊断配置问题
clawhub验证新安装的 Skill
healthcheck系统健康 + Skill 验证

📈 评分标准

分数等级说明
90-100🌟 优秀功能完整,文档清晰
70-89✅ 良好核心功能正常,小问题
50-69⚠️ 可用需配置或有改进空间
0-49❌ 不可用需修复或重写

🎨 用户体验验证(UX Testing)

验证维度

维度检查项通过标准
可视化输出格式清晰有颜色/表格/图标
时区时间处理正确使用 UTC 或明确时区
语言多语言支持无硬编码文本
交互用户引导清晰有提示和帮助
错误错误信息友好无技术术语

🌍 国际化验证

时区检查

# 检查是否正确处理时区
check_timezone() {
    local skill_path=$1
    
    echo "🌍 时区处理检查..."
    
    # 检查是否使用 TZ 环境变量
    if grep -rq "TZ=" "$skill_path"; then
        echo "✅ 使用 TZ 环境变量"
    fi
    
    # 检查是否使用 UTC
    if grep -rq "UTC\|utc\|ISO 8601" "$skill_path"; then
        echo "✅ 使用 UTC 或 ISO 8601 格式"
    fi
    
    # 检查是否硬编码时区
    if grep -rqE "CST|PST|EST|GMT\+[0-9]" "$skill_path" 2>/dev/null; then
        echo "⚠️ 发现硬编码时区,建议使用用户本地时区"
    fi
    
    # 检查时间格式化
    if grep -rq "date.*format\|strftime\|moment\|dayjs" "$skill_path"; then
        echo "✅ 使用时间格式化库"
    fi
}

多语言检查

# 检查国际化支持
check_i18n() {
    local skill_path=$1
    
    echo "🗣️ 多语言支持检查..."
    
    # 检查是否有语言配置
    if [ -f "$skill_path/locales" ] || [ -d "$skill_path/i18n" ]; then
        echo "✅ 包含语言资源目录"
    fi
    
    # 检查硬编码文本
    local hardcoded=$(grep -rE "(错误|成功|失败|提示|Error|Success|Failed)" "$skill_path"/*.md 2>/dev/null | wc -l)
    if [ $hardcoded -gt 5 ]; then
        echo "⚠️ 发现 $hardcoded 处硬编码文本"
        echo "   建议:使用 i18n 函数或语言文件"
    fi
    
    # 检查字符编码
    if grep -rq "UTF-8\|utf8" "$skill_path"; then
        echo "✅ 声明 UTF-8 编码"
    fi
}

🎯 可视化验证

输出格式检查

# 检查输出可读性
check_visualization() {
    local skill_path=$1
    
    echo "🎨 可视化检查..."
    
    local scripts="$skill_path/scripts"
    local score=0
    
    # 检查颜色输出
    if grep -rq "\\033\[" "$scripts" 2>/dev/null; then
        echo "✅ 使用颜色输出"
        ((score+=20))
    else
        echo "⚠️ 无颜色输出"
    fi
    
    # 检查表格格式
    if grep -rqE "\|.*\||printf.*%|column" "$scripts" 2>/dev/null; then
        echo "✅ 使用表格格式"
        ((score+=20))
    fi
    
    # 检查图标/Emoji
    if grep -rqE "✅|❌|⚠️|🔴|🟢|📋|🔍" "$scripts" 2>/dev/null; then
        echo "✅ 使用图标/Emoji"
        ((score+=20))
    fi
    
    # 检查进度指示
    if grep -rq "spinner\|progress\|loading" "$scripts" 2>/dev/null; then
        echo "✅ 包含进度指示"
        ((score+=20))
    fi
    
    # 检查分隔线
    if grep -rqE "^[-=]{10,}|━|─" "$scripts" 2>/dev/null; then
        echo "✅ 使用分隔线"
        ((score+=20))
    fi
    
    echo ""
    echo "可视化评分: $score/100"
}

💡 最佳实践建议生成

建议规则引擎

# 根据验证结果生成建议
generate_best_practices() {
    local skill_path=$1
    local results=$2
    
    echo "💡 最佳实践建议"
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
    
    # 时区建议
    echo ""
    echo "【时区处理】"
    if grep -rq "date" "$skill_path" 2>/dev/null; then
        echo "  ✅ 建议:所有时间使用 ISO 8601 格式 (YYYY-MM-DDTHH:mm:ssZ)"
        echo "  ✅ 建议:显示时转换为用户本地时区"
        echo "  ✅ 示例:date -u +%Y-%m-%dT%H:%M:%SZ"
    fi
    
    # 多语言建议
    echo ""
    echo "【国际化】"
    echo "  ✅ 建议:将文本提取到语言文件"
    echo "  ✅ 建议:支持环境变量 LANG 或 LOCALE"
    echo "  ✅ 示例:"
    echo "     # en_US.json"
    echo '     { "error": "Configuration not found" }'
    echo "     # zh_CN.json"
    echo '     { "error": "配置未找到" }'
    
    # 用户体验建议
    echo ""
    echo "【用户体验】"
    echo "  ✅ 建议:提供 --help 参数"
    echo "  ✅ 建议:错误信息包含解决方法"
    echo "  ✅ 建议:长时间操作显示进度"
    echo "  ✅ 建议:输出使用颜色区分状态"
    
    # 安全建议
    echo ""
    echo "【安全最佳实践】"
    echo "  ✅ 建议:敏感信息使用环境变量"
    echo "  ✅ 建议:不记录密码/token 到日志"
    echo "  ✅ 建议:输入验证和过滤"
    echo "  ✅ 建议:使用 timeout 限制外部调用"
    
    echo ""
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
}

📊 UX 验证报告示例

╔══════════════════════════════════════════════════════════╗
║           🎨 UX 验证报告: config-diagnose               ║
╚══════════════════════════════════════════════════════════╝

📅 验证时间: 2026-03-19 20:50

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✅ 可视化 (80/100)
  ✅ 使用颜色输出
  ✅ 使用表格格式
  ✅ 使用图标/Emoji
  ✅ 使用分隔线
  ⚠️ 无进度指示

🌍 时区处理 (60/100)
  ✅ 使用 UTC 时间
  ⚠️ 发现硬编码时区 "CST"
  建议:改用 TZ 环境变量

🗣️ 多语言 (40/100)
  ⚠️ 发现 15 处硬编码中文
  ✅ 声明 UTF-8 编码
  建议:添加英文支持

🎯 用户引导 (70/100)
  ✅ 有使用帮助
  ✅ 错误信息清晰
  ⚠️ 缺少示例输出

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📊 UX 综合评分: 62/100

💡 改进建议
1. [高优先] 添加英文语言支持
2. [中优先] 修复时区硬编码问题
3. [低优先] 添加进度指示器

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

👤 作者

小帽 (OpenClaw)

📅 创建时间

2026-03-19

📜 许可证

MIT

Files

6 total
Select a file
Select a file to preview.

Comments

Loading comments…