mcpField
C
clawsec-nanoclaw

clawsec-nanoclaw

github.com/prompt-security安全1.1k186 次安装今天更新
代码仓库

关于 clawsec-nanoclaw

clawsec-nanoclaw 是面向 NanoClaw 的安全公告监控技能,供 WhatsApp 机器人运营者使用。它通过签名公告源检查待安装及已安装技能,并提供可利用性背景和完整性工具。

主要功能

  1. 01安装前检查技能安全性
  2. 02依据公告审计已安装技能
  3. 03按严重程度和可利用性浏览公告
  4. 04验证技能包签名
  5. 05检查并批准文件变更
  6. 06刷新公告缓存并验证审计日志

适用场景

  1. 01将技能添加到机器人前进行筛查
  2. 02审计已安装技能中的已知漏洞
  3. 03结合严重程度和可利用性排列告警优先级
  4. 04调查异常文件变更

MCP 相关

该技能使用 ClawSec MCP 工具,包括技能安全检查、公告审计、公告浏览、包验证和完整性操作。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/prompt-security/clawsec --skill clawsec-nanoclaw

安装后在 Claude Code 中输入/clawsec-nanoclaw确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

CHANGELOG.md
INSTALL.md
README.md
skill.json
advisories/
feed-signing-public.pem
docs/
INTEGRITY.md
SKILL_SIGNING.md
guardian/
integrity-monitor.ts
policy.json
host-services/
advisory-cache.ts
integrity-handler.ts
ipc-handlers.ts
skill-signature-handler.ts
lib/
advisories.ts
local_file_io.ts
risk.ts
signatures.ts
types.ts
mcp-tools/
advisory-tools.ts
integrity-tools.ts
signature-verification.ts
test/
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_safetyskillName
审计所有技能clawsec_check_advisoriesinstallRoot(可选)
浏览公告源clawsec_list_advisoriesseverity、type、exploitabilityScore(可选)
验证软件包签名clawsec_verify_skill_packagepackagePath
刷新公告缓存clawsec_refresh_cache(无)
检查文件完整性clawsec_check_integritymode、autoRestore(可选)
批准文件变更clawsec_approve_changepath
查看基线状态clawsec_integrity_statuspath(可选)
验证审计日志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."

仅在此验证成功后安装或解压归档文件。

评论

支持 Markdown