Back to Skills
    🦞

    clawsec-feed

    Security advisory feed with automated NVD CVE polling

    By @davida-ps
    View on GitHub
    SKILL.md
    ---
    name: clawsec-feed
    version: 0.0.4
    description: Security advisory feed with automated NVD CVE polling for OpenClaw-related vulnerabilities. Updated daily.
    homepage: https://clawsec.prompt.security
    metadata: {"openclaw":{"emoji":"📡","category":"security"}}
    clawdis:
      emoji: "📡"
      requires:
        bins: [curl, jq]
    ---
    
    # ClawSec Feed 📡
    
    Security advisory feed monitoring for AI agents. Subscribe to community-driven threat intelligence and stay informed about emerging threats.
    
    This feed is automatically updated daily with CVEs related to OpenClaw, clawdbot, and Moltbot from the NIST National Vulnerability Database (NVD).
    
    **An open source project by [Prompt Security](https://prompt.security)**
    
    ---
    
    ## Installation Options
    
    You can get clawsec-feed in two ways:
    
    ### Option A: Bundled with ClawSec Suite (Recommended)
    
    **If you've installed clawsec-suite, you may already have this!**
    
    ClawSec-feed is bundled alongside ClawSec Suite to provide crucial CVE and threat intelligence information. When you install the suite, if you don't already have the feed installed, it will be deployed from the bundled copy.
    
    **Advantages:**
    - Convenient - no separate download needed
    - Standard location - installed to `~/.openclaw/skills/clawsec-feed/`
    - Preserved - if you already have feed installed, it won't be overwritten
    - Single verification - integrity checked as part of suite package
    
    ### Option B: Standalone Installation (This Page)
    
    Install clawsec-feed independently without the full suite.
    
    **When to use standalone:**
    - You only need the advisory feed (not other suite components)
    - You want to install before installing the suite
    - You prefer explicit control over feed installation
    
    **Advantages:**
    - Lighter weight installation
    - Independent from suite
    - Direct control over installation process
    
    Continue below for standalone installation instructions.
    
    ---
    
    Installation Steps:
    Agents should review scripts before execution!
    
    
    ```bash
    # Get latest clawsec-feed release tag
    LATEST_TAG=$(curl -sSL https://api.github.com/repos/prompt-security/ClawSec/releases | \
      jq -r '[.[] | select(.tag_name | startswith("clawsec-feed-v"))][0].tag_name')
    
    # Download SKILL.md from latest release
    SKILL_URL="https://github.com/prompt-security/clawsec/releases/download/$LATEST_TAG/SKILL.md"
    curl -sSL --fail --show-error "$SKILL_URL"
    ```
    
    Once you have this skill file, proceed to **[Deploy ClawSec Feed](#deploy-clawsec-feed)** below.
    
    ---
    
    ## Deploy ClawSec Feed
    
    Installation steps:
    
    ### Step 1: Create skill directory and save this file
    
    ```bash
    mkdir -p ~/.openclaw/skills/clawsec-feed
    # Save this SKILL.md as SKILL.md in the directory above
    ```
    
    ### Step 2: Install skill files
    
    ```bash
    # Get latest release tag with retry logic
    LATEST_TAG=$(curl -sSL --retry 3 --retry-delay 1 \
      https://api.github.com/repos/prompt-security/ClawSec/releases | \
      jq -r '[.[] | select(.tag_name | startswith("clawsec-feed-v"))][0].tag_name')
    
    BASE_URL="https://github.com/prompt-security/clawsec/releases/download/$LATEST_TAG"
    INSTALL_DIR="${CLAWSEC_INSTALL_DIR:-$HOME/.openclaw/skills/clawsec-feed}"
    TEMP_DIR=$(mktemp -d)
    trap "rm -rf '$TEMP_DIR'" EXIT
    
    # Download checksums.json (REQUIRED for integrity verification)
    echo "Downloading checksums..."
    if ! curl -sSL --fail --show-error --retry 3 --retry-delay 1 \
         "$BASE_URL/checksums.json" -o "$TEMP_DIR/checksums.json"; then
      echo "ERROR: Failed to download checksums.json"
      exit 1
    fi
    
    # Validate checksums.json structure
    if ! jq -e '.skill and .version and .files' "$TEMP_DIR/checksums.json" >/dev/null 2>&1; then
      echo "ERROR: Invalid checksums.json structure"
      exit 1
    fi
    
    # PRIMARY: Try .skill artifact
    echo "Attempting .skill artifact installation..."
    if curl -sSL --fail --show-error --retry 3 --retry-delay 1 \
       "$BASE_URL/clawsec-feed.skill" -o "$TEMP_DIR/clawsec-feed.skill" 2>/dev/null; then
    
      # Security: Check artifact size (prevent DoS)
      ARTIFACT_SIZE=$(stat -c%s "$TEMP_DIR/clawsec-feed.skill" 2>/dev/null || stat -f%z "$TEMP_DIR/clawsec-feed.skill")
      MAX_SIZE=$((50 * 1024 * 1024))  # 50MB
    
      if [ "$ARTIFACT_SIZE" -gt "$MAX_SIZE" ]; then
        echo "WARNING: Artifact too large ($(( ARTIFACT_SIZE / 1024 / 1024 ))MB), falling back to individual files"
      else
        echo "Extracting artifact ($(( ARTIFACT_SIZE / 1024 ))KB)..."
    
        # Security: Check for path traversal before extraction
        if unzip -l "$TEMP_DIR/clawsec-feed.skill" | grep -qE '\.\./|^/|~/'; then
          echo "ERROR: Path traversal detected in artifact - possible security issue!"
          exit 1
        fi
    
        # Security: Check file count (prevent zip bomb)
        FILE_COUNT=$(unzip -l "$TEMP_DIR/clawsec-feed.skill" | grep -c "^[[:space:]]*[0-9]" || echo 0)
        if [ "$FILE_COUNT" -gt 100 ]; then
          echo "ERROR: Artifact contains too many files ($FILE_COUNT) - possible zip bomb"
          exit 1
        fi
    
        # Extract to temp directory
        unzip -q "$TEMP_DIR/clawsec-feed.skill" -d "$TEMP_DIR/extracted"
    
        # Verify skill.json exists
        if [ ! -f "$TEMP_DIR/extracted/clawsec-feed/skill.json" ]; then
          echo "ERROR: skill.json not found in artifact"
          exit 1
        fi
    
        # Verify checksums for all extracted files
        echo "Verifying checksums..."
        CHECKSUM_FAILED=0
        for file in $(jq -r '.files | keys[]' "$TEMP_DIR/checksums.json"); do
          EXPECTED=$(jq -r --arg f "$file" '.files[$f].sha256' "$TEMP_DIR/checksums.json")
          FILE_PATH=$(jq -r --arg f "$file" '.files[$f].path' "$TEMP_DIR/checksums.json")
    
          # Try nested path first, then flat filename
          if [ -f "$TEMP_DIR/extracted/clawsec-feed/$FILE_PATH" ]; then
            ACTUAL=$(shasum -a 256 "$TEMP_DIR/extracted/clawsec-feed/$FILE_PATH" | cut -d' ' -f1)
          elif [ -f "$TEMP_DIR/extracted/clawsec-feed/$file" ]; then
            ACTUAL=$(shasum -a 256 "$TEMP_DIR/extracted/clawsec-feed/$file" | cut -d' ' -f1)
          else
            echo "  ✗ $file (not found in artifact)"
            CHECKSUM_FAILED=1
            continue
          fi
    
          if [ "$EXPECTED" != "$ACTUAL" ]; then
            echo "  ✗ $file (checksum mismatch)"
            CHECKSUM_FAILED=1
          else
            echo "  ✓ $file"
          fi
        done
    
        if [ "$CHECKSUM_FAILED" -eq 0 ]; then
          # Validate feed.json structure (skill-specific)
          if [ -f "$TEMP_DIR/extracted/clawsec-feed/advisories/feed.json" ]; then
            FEED_FILE="$TEMP_DIR/extracted/clawsec-feed/advisories/feed.json"
          elif [ -f "$TEMP_DIR/extracted/clawsec-feed/feed.json" ]; then
            FEED_FILE="$TEMP_DIR/extracted/clawsec-feed/feed.json"
          else
            echo "ERROR: feed.json not found in artifact"
            exit 1
          fi
    
          if ! jq -e '.version and .advisories' "$FEED_FILE" >/dev/null 2>&1; then
            echo "ERROR: feed.json missing required fields (version, advisories)"
            exit 1
          fi
    
          # SUCCESS: Install from artifact
          echo "Installing from artifact..."
          mkdir -p "$INSTALL_DIR"
          cp -r "$TEMP_DIR/extracted/clawsec-feed"/* "$INSTALL_DIR/"
          chmod 600 "$INSTALL_DIR/skill.json"
          find "$INSTALL_DIR" -type f ! -name "skill.json" -exec chmod 644 {} \;
          echo "SUCCESS: Skill installed from .skill artifact"
          exit 0
        else
          echo "WARNING: Checksum verification failed, falling back to individual files"
        fi
      fi
    fi
    
    # FALLBACK: Download individual files
    echo "Downloading individual files from checksums.json manifest..."
    mkdir -p "$TEMP_DIR/downloads"
    
    DOWNLOAD_FAILED=0
    for file in $(jq -r '.files | keys[]' "$TEMP_DIR/checksums.json"); do
      FILE_URL=$(jq -r --arg f "$file" '.files[$f].url' "$TEMP_DIR/checksums.json")
      EXPECTED=$(jq -r --arg f "$file" '.files[$f].sha256' "$TEMP_DIR/checksums.json")
    
      echo "Downloading: $file"
      if ! curl -sSL --fail --show-error --retry 3 --retry-delay 1 \
           "$FILE_URL" -o "$TEMP_DIR/downloads/$file"; then
        echo "ERROR: Failed to download $file"
        DOWNLOAD_FAILED=1
        continue
      fi
    
      # Verify checksum immediately
      ACTUAL=$(shasum -a 256 "$TEMP_DIR/downloads/$file" | cut -d' ' -f1)
      if [ "$EXPECTED" != "$ACTUAL" ]; then
        echo "ERROR: Checksum mismatch for $file"
        DOWNLOAD_FAILED=1
      else
        echo "  ✓ Verified: $file"
      fi
    done
    
    if [ "$DOWNLOAD_FAILED" -eq 1 ]; then
      echo "ERROR: Individual file download failed"
      exit 1
    fi
    
    # Validate JSON files structure
    if ! jq -e '.name and .version' "$TEMP_DIR/downloads/skill.json" >/dev/null 2>&1; then
      echo "ERROR: skill.json missing required fields (name, version)"
      exit 1
    fi
    
    if ! jq -e '.version and .advisories' "$TEMP_DIR/downloads/feed.json" >/dev/null 2>&1; then
      echo "ERROR: feed.json missing required fields (version, advisories)"
      exit 1
    fi
    
    # Install files
    echo "Installing from individual files..."
    mkdir -p "$INSTALL_DIR"
    cp "$TEMP_DIR/downloads"/* "$INSTALL_DIR/"
    chmod 600 "$INSTALL_DIR/skill.json"
    find "$INSTALL_DIR" -type f ! -name "skill.json" -exec chmod 644 {} \;
    echo "SUCCESS: Skill installed from individual files"
    ```
    
    ### Step 3: Add to your heartbeat
    
    Add ClawSec Feed to your heartbeat routine:
    
    ```markdown
    ## ClawSec Feed (every heartbeat)
    1. Check advisory feed for new security alerts
    2. Cross-reference with installed skills
    3. Notify user if action is required
    ```
    
    ### Step 4: Confirm deployment
    
    Tell your user:
    ```
    ClawSec Feed deployed successfully. I will now:
    - Monitor the community advisory feed for threats
    - Alert you to any security issues affecting your environment
    - Keep you informed of emerging attack patterns
    ```
    
    ---
    
    ## What ClawSec Feed Does
    
    ### Advisory Feed Monitoring
    
    Subscribes to the community advisory feed for:
    
    - **Known malicious skills/plugins** - Skills that have been identified as harmful
    - **Prompt injection patterns** - Attack patterns observed in the wild
    - **Vulnerable skill versions** - Skills with known security flaws
    - **Security best practice updates** - New recommendations for agent safety
    
    When a relevant advisory is published, your agent will notify you.
    
    ---
    
    ## Checking the Advisory Feed
    
    ```bash
    # Use environment variable if set, otherwise use raw GitHub feed (
    
    ... (truncated)