用途
ClawSec ClawHub Checker 为 clawsec-suite 的受保护安装器增加一层声誉门禁(reputation gate)。它在安装技能之前,先对目标技能在 ClawHub 上的声誉进行评估,从而在原有安全防护之上再增加一道独立检查。
主要能力
- 从 ClawHub 读取技能元数据(inspect --json)。
- 评估扫描器状态,包括在存在时读取 VirusTotal 摘要。
- 应用额外的声誉启发式指标:技能年龄、更新情况、作者历史、下载量。
- 当分数低于阈值时,要求显式传入 --confirm-reputation 才能继续。
使用方式
安装(需在 clawsec-suite 之后安装):
npx clawhub@latest install clawsec-suite
npx clawhub@latest install clawsec-clawhub-checker
也可通过 Vercel Skills CLI 安装:
npx skills add prompt-security/clawsec --skill clawsec-clawhub-checker -a openclaw -y
可选预检(校验本地路径并打印推荐命令):
node ~/.openclaw/skills/clawsec-clawhub-checker/scripts/setup_reputation_hook.mjs
直接运行增强安装器:
node ~/.openclaw/skills/clawsec-clawhub-checker/scripts/enhanced_guarded_install.mjs \
--skill some-skill \
--version 1.0.0
若技能低于阈值,仅在明确批准后重跑:
node ~/.openclaw/skills/clawsec-clawhub-checker/scripts/enhanced_guarded_install.mjs \
--skill some-skill \
--version 1.0.0 \
--confirm-reputation
发布产物校验
对于独立安装,在信任 SKILL.md、skill.json 或归档包之前,应先校验已签名的发布清单。skill.json 是包元数据/SBOM 来源,发布流水线使用 ClawSec 发布密钥对 checksums.json 签名。校验脚本如下:
set -euo pipefail
SKILL_NAME="clawsec-clawhub-checker"
VERSION="0.0.8"
REPO="prompt-security/clawsec"
TAG="${SKILL_NAME}-v${VERSION}"
BASE="https://github.com/${REPO}/releases/download/${TAG}"
ZIP_NAME="${SKILL_NAME}-v${VERSION}.zip"
TMP_DIR="$(mktemp -d)"
trap 'rm -rf "$TMP_DIR"' EXIT
RELEASE_PUBKEY_SHA256="711424e4535f84093fefb024cd1ca4ec87439e53907b305b79a631d5befba9c8"
curl -fsSL "$BASE/checksums.json" -o "$TMP_DIR/checksums.json"
curl -fsSL "$BASE/checksums.sig" -o "$TMP_DIR/checksums.sig"
curl -fsSL "$BASE/signing-public.pem" -o "$TMP_DIR/signing-public.pem"
curl -fsSL "$BASE/$ZIP_NAME" -o "$TMP_DIR/$ZIP_NAME"
curl -fsSL "$BASE/SKILL.md" -o "$TMP_DIR/SKILL.md"
curl -fsSL "$BASE/skill.json" -o "$TMP_DIR/skill.json"
ACTUAL_PUBKEY_SHA256="$(openssl pkey -pubin -in "$TMP_DIR/signing-public.pem" -outform DER | shasum -a 256 | awk '{print $1}')"
if [ "$ACTUAL_PUBKEY_SHA256" != "$RELEASE_PUBKEY_SHA256" ]; then
echo "ERROR: signing-public.pem fingerprint mismatch" >&2
exit 1
fi
openssl base64 -d -A -in "$TMP_DIR/checksums.sig" -out "$TMP_DIR/checksums.sig.bin"
openssl pkeyutl -verify -rawin -pubin \
-inkey "$TMP_DIR/signing-public.pem" \
-sigfile "$TMP_DIR/checksums.sig.bin" \
-in "$TMP_DIR/checksums.json" >/dev/null
hash_file() {
if command -v shasum >/dev/null 2>&1; then
shasum -a 256 "$1" | awk '{print $1}'
else
sha256sum "$1" | awk '{print $1}'
fi
}
verify_manifest_file() {
asset="$1"
path="$2"
expected="$(jq -r --arg asset "$asset" '.files[$asset].sha256 // empty' "$TMP_DIR/checksums.json")"
if [ -z "$expected" ]; then
echo "ERROR: checksums.json missing $asset" >&2
exit 1
fi
actual="$(hash_file "$path")"
if [ "$actual" != "$expected" ]; then
echo "ERROR: checksum mismatch for $asset" >&2
exit 1
fi
}
expected_archive="$(jq -r '.archive.sha256 // empty' "$TMP_DIR/checksums.json")"
if [ -z "$expected_archive" ]; then
echo "ERROR: checksums.json missing archive.sha256" >&2
exit 1
fi
actual_archive="$(hash_file "$TMP_DIR/$ZIP_NAME")"
if [ "$actual_archive" != "$expected_archive" ]; then
echo "ERROR: archive checksum mismatch" >&2
exit 1
fi
verify_manifest_file "SKILL.md" "$TMP_DIR/SKILL.md"
verify_manifest_file "skill.json" "$TMP_DIR/skill.json"
echo "Signed release manifest, archive, SKILL.md, and skill.json verified."
仅在校验成功后再安装或解压归档包。
可选公告钩子接线(手动)
本版本不会自动修补 clawsec-suite 的钩子文件。若依赖包含 reputationWarning / reputationWarnings 的公告告警,需手动接线检查模块:
- 源模块:~/.openclaw/skills/clawsec-clawhub-checker/hooks/clawsec-advisory-guardian/lib/reputation.mjs
- 目标钩子文件:~/.openclaw/skills/clawsec-suite/hooks/clawsec-advisory-guardian/handler.ts
请将该接线视为有意的本地定制,并在启用前进行审查。
退出码
- 0:可安全安装
- 42:需要公告确认(来自 clawsec-suite)
- 43:需要声誉确认
- 1:错误
配置
环境变量:
- CLAWHUB_REPUTATION_THRESHOLD:最低分数(0-100,默认 70)
适用场景与限制
适用于在安装 ClawHub 技能前增加声誉评估与确认环节的场景。运行时需要 node、clawhub、openclaw,并依赖已安装的 clawsec-suite。声誉检查会调用 ClawHub 的 inspect/search 接口。对其他技能无副作用,本包不会重写已安装的套件文件。
安全说明:这是纵深防御,不能替代公告匹配;扫描器输出可能产生误报和漏报;在覆盖警告前应始终审查技能代码。评分属于启发式且需确认。
开发
关键文件:
- scripts/enhanced_guarded_install.mjs
- scripts/check_clawhub_reputation.mjs
- scripts/setup_reputation_hook.mjs
- hooks/clawsec-advisory-guardian/lib/reputation.mjs
许可
GNU AGPL v3.0 或更高版本,属于 ClawSec 安全套件的一部分。