关于 clawsec-nanoclaw
clawsec-nanoclaw 是面向 NanoClaw 的安全公告监控技能,供 WhatsApp 机器人运营者使用。它通过签名公告源检查待安装及已安装技能,并提供可利用性背景和完整性工具。
主要功能
- 01安装前检查技能安全性
- 02依据公告审计已安装技能
- 03按严重程度和可利用性浏览公告
- 04验证技能包签名
- 05检查并批准文件变更
- 06刷新公告缓存并验证审计日志
适用场景
- 01将技能添加到机器人前进行筛查
- 02审计已安装技能中的已知漏洞
- 03结合严重程度和可利用性排列告警优先级
- 04调查异常文件变更
MCP 相关
该技能使用 ClawSec MCP 工具,包括技能安全检查、公告审计、公告浏览、包验证和完整性操作。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ prompt-security/ clawsec --skill clawsec-nanoclaw安装后在 Claude Code 中输入/clawsec-nanoclaw确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
CHANGELOG.mdINSTALL.mdREADME.mdskill.jsonadvisories/feed-signing-public.pemdocs/INTEGRITY.mdSKILL_SIGNING.mdguardian/integrity-monitor.tspolicy.jsonhost-services/advisory-cache.tsintegrity-handler.tsipc-handlers.tsskill-signature-handler.tslib/advisories.tslocal_file_io.tsrisk.tssignatures.tstypes.tsmcp-tools/advisory-tools.tsintegrity-tools.tssignature-verification.tstest/security-hardening.test.mjs详细介绍
NanoClaw 的 ClawSec
安全公告监控,可保护你的 WhatsApp 机器人免受技能和依赖项中已知漏洞的影响。
使用 Vercel Skills 安装
使用 Vercel Skills CLI 为此运行环境安装:
npx skills add prompt-security/clawsec --skill clawsec-nanoclaw -a openclaw -y
概览
ClawSec 提供 MCP 工具,用于根据精选的安全公告源检查已安装的技能。它会阻止安装存在漏洞的技能,提供可利用性背景信息以便进行分流,并提醒你注意现有技能中的问题。
核心原则: 安装前先检查。监控正在运行的内容。
适用场景
在以下情况下使用 ClawSec 工具:
- 安装新技能时(先检查安全性)
- 用户询问“我的技能安全吗?”
- 调查可疑行为
- 定期安全审计
- 收到安全通知后
请勿用于:
- 代码审查(使用其他工具)
- 性能问题(属于其他方面)
- 常规调试
可用的 MCP 工具
安装前检查
// Before installing any skill
const safety = await tools.clawsec_check_skill_safety({
skillName: 'new-skill',
skillVersion: '1.0.0' // optional
});
if (!safety.safe) {
// Show user the risks before proceeding
console.warn(`Security issues: ${safety.advisories.map(a => a.id)}`);
}
安全审计
// Check all installed skills (defaults to ~/.claude/skills in the container)
const result = await tools.clawsec_check_advisories({
installRoot: '/home/node/.claude/skills' // optional
});
if (result.matches.some((m) =>
m.advisory.severity === 'critical' || m.advisory.exploitability_score === 'high'
)) {
// Alert user immediately
console.error('Urgent advisories found!');
}
浏览公告
// List advisories with filters
const advisories = await tools.clawsec_list_advisories({
severity: 'high', // optional
exploitabilityScore: 'high' // optional
});
快速参考
| 任务 | 工具 | 关键参数 |
|---|---|---|
| 安装前检查 | clawsec_check_skill_safety | skillName |
| 审计所有技能 | clawsec_check_advisories | installRoot(可选) |
| 浏览公告源 | clawsec_list_advisories | severity、type、exploitabilityScore(可选) |
| 验证软件包签名 | clawsec_verify_skill_package | packagePath |
| 刷新公告缓存 | clawsec_refresh_cache | (无) |
| 检查文件完整性 | clawsec_check_integrity | mode、autoRestore(可选) |
| 批准文件变更 | clawsec_approve_change | path |
| 查看基线状态 | clawsec_integrity_status | path(可选) |
| 验证审计日志 | clawsec_verify_audit | (无) |
常见模式
模式 1:安全安装技能
// ALWAYS check before installing
const safety = await tools.clawsec_check_skill_safety({
skillName: userRequestedSkill
});
if (safety.safe) {
// Proceed with installation
await installSkill(userRequestedSkill);
} else {
// Show user the risks and get confirmation
await showSecurityWarning(safety.advisories);
if (await getUserConfirmation()) {
await installSkill(userRequestedSkill);
}
}
模式 2:定期安全检查
// Add to scheduled tasks
schedule_task({
prompt: "Check advisories using clawsec_check_advisories and alert when critical or high-exploitability matches appear",
schedule_type: "cron",
schedule_value: "0 9 * * *" // Daily at 9am
});
模式 3:用户安全查询
User: "Are my skills secure?"
You: I'll check installed skills for known vulnerabilities.
[Use clawsec_check_advisories]
Response:
✅ No urgent issues found.
- 2 low-severity/low-exploitability advisories
- All skills up to date
常见错误
❌ 未检查就安装
// DON'T
await installSkill('untrusted-skill');
// DO
const safety = await tools.clawsec_check_skill_safety({
skillName: 'untrusted-skill'
});
if (safety.safe) await installSkill('untrusted-skill');
❌ 忽略可利用性背景信息
// DON'T: Use severity only
if (advisory.severity === 'high') {
notifyNow(advisory);
}
// DO: Use exploitability + severity
if (
advisory.exploitability_score === 'high' ||
advisory.severity === 'critical'
) {
notifyNow(advisory);
}
❌ 跳过严重级别为 critical 的公告
// DON'T: Ignore high exploitability in medium severity advisories
if (advisory.severity === 'critical') alert();
// DO: Prioritize exploitability and severity together
if (advisory.exploitability_score === 'high' || advisory.severity === 'critical') {
// Alert immediately
}
实现详情
公告源:https://clawsec.prompt.security/advisories/feed.json
此签名公告源经过整合。NanoClaw 通过同一个默认 URL 接收 NVD CVE、经过批准的社区公告,以及暂定的无 CVE GHSA 公告。
更新频率:每 6 小时一次(自动)
签名验证:Ed25519 签名公告源 软件包验证策略:仅使用固定密钥,限制软件包和签名路径
缓存位置:/workspace/project/data/clawsec-advisory-cache.json
有关设置,请参阅 INSTALL.md;有关高级用法,请参阅 docs/。
实际影响
- 防止安装含有已知 RCE 漏洞的技能
- 提醒你注意依赖项中的供应链攻击
- 提供可执行的修复步骤
- 零误报(仅使用精选公告源)
发布制品验证
对于独立安装,请先验证签名的发布清单,再信任 SKILL.md、skill.json 或归档文件。skill.json 文件是软件包元数据和 SBOM 的来源,发布流水线使用 ClawSec 发布密钥对 checksums.json 签名。
set -euo pipefail
SKILL_NAME="clawsec-nanoclaw"
VERSION="0.0.10"
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."
仅在此验证成功后安装或解压归档文件。