{
  "skill_name": "explorer",
  "skill_path": "/workspace/skills/clawhub-explorer",
  "skill_directory": "/workspace/skills/clawhub-explorer",
  "is_safe": true,
  "max_severity": "MEDIUM",
  "findings_count": 2,
  "findings": [
    {
      "id": "llm_finding_explorer_0",
      "rule_id": "LLM_DATA_EXFILTRATION",
      "category": "data_exfiltration",
      "severity": "MEDIUM",
      "title": "Optional GitHub Token Usage Without Security Guidance",
      "description": "The skill requests users to configure a GITHUB_TOKEN environment variable and provides instructions to add it to ~/.zshrc. While the token is optional and used legitimately for API rate limiting, the instructions lack security guidance about token permissions, scope limitations, or secure storage practices. Users may inadvertently create tokens with excessive permissions or store them insecurely.",
      "file_path": "SKILL.md",
      "line_number": null,
      "snippet": "```bash\n# \u83b7\u53d6 Token: https://github.com/settings/tokens\nexport GITHUB_TOKEN=\"your_github_token\"\n```\n\nAdds to ~/.zshrc:\n```bash\necho 'export GITHUB_TOKEN=\"your-token\"' >> ~/.zshrc\n```",
      "remediation": "Add security guidance: (1) Specify minimum required token scopes (public_repo read-only access), (2) Warn against using tokens with write permissions, (3) Recommend using GitHub CLI or credential managers instead of plaintext environment variables, (4) Include token rotation best practices.",
      "analyzer": "llm",
      "metadata": {
        "model": "claude-sonnet-4-5-20250929",
        "overall_assessment": "The GitHub Projects Explorer skill is a legitimate tool for searching and analyzing GitHub repositories with no critical security threats detected. The skill makes appropriate use of the GitHub public API for read-only operations. The primary concerns are around security guidance for optional token configuration and missing metadata transparency. The code does not exhibit data exfiltration, command injection, prompt injection, or other high-severity threats. The referenced internal markdown file (references/github_api.md) is a normal documentation resource bundled with the skill package. The script's behavior matches its stated purpose of GitHub repository discovery.",
        "primary_threats": [
          "Missing security guidance for credential handling",
          "Unbounded API requests",
          "Missing optional metadata"
        ],
        "aitech": "AITech-8.2",
        "aitech_name": "Data Exfiltration / Exposure",
        "aisubtech": "AISubtech-8.2.3",
        "aisubtech_name": "Data Exfiltration via Agent Tooling",
        "scanner_category": "SECURITY VIOLATION",
        "meta_validated": true,
        "meta_confidence": "HIGH",
        "meta_confidence_reason": "LLM analyzer correctly identified missing security guidance. While the token usage is legitimate, better documentation would help users avoid common security mistakes.",
        "meta_exploitability": "Low - Requires user to create overly permissive token",
        "meta_impact": "Low - User's own GitHub account at risk if token is compromised"
      }
    },
    {
      "id": "llm_finding_explorer_1",
      "rule_id": "LLM_RESOURCE_ABUSE",
      "category": "resource_abuse",
      "severity": "LOW",
      "title": "Unbounded API Requests Without Rate Limiting",
      "description": "The script makes GitHub API requests without implementing client-side rate limiting, retry logic with exponential backoff, or handling of rate limit responses. While GitHub enforces server-side limits, the script could make rapid successive requests that exhaust the user's quota or cause availability issues.",
      "file_path": "scripts/github_projects.py",
      "line_number": null,
      "snippet": "Function makes direct API calls without rate limiting:\n```python\ndef search_repositories(query: str, sort: str = \"stars\", order: str = \"desc\", \n                       per_page: int = 30, page: int = 1) -> List[Dict]:\n    # Direct API call without rate limit handling\n```",
      "remediation": "Implement: (1) Check rate limit headers in responses, (2) Add exponential backoff for retries, (3) Respect X-RateLimit-Remaining header, (4) Add configurable delays between requests, (5) Handle 403 rate limit errors gracefully.",
      "analyzer": "llm",
      "metadata": {
        "model": "claude-sonnet-4-5-20250929",
        "overall_assessment": "The GitHub Projects Explorer skill is a legitimate tool for searching and analyzing GitHub repositories with no critical security threats detected. The skill makes appropriate use of the GitHub public API for read-only operations. The primary concerns are around security guidance for optional token configuration and missing metadata transparency. The code does not exhibit data exfiltration, command injection, prompt injection, or other high-severity threats. The referenced internal markdown file (references/github_api.md) is a normal documentation resource bundled with the skill package. The script's behavior matches its stated purpose of GitHub repository discovery.",
        "primary_threats": [
          "Missing security guidance for credential handling",
          "Unbounded API requests",
          "Missing optional metadata"
        ],
        "aitech": "AITech-13.3",
        "aitech_name": "Availability Disruption",
        "aisubtech": "AISubtech-13.3.2",
        "aisubtech_name": "Compute Exhaustion",
        "scanner_category": "RESOURCE ABUSE",
        "meta_validated": true,
        "meta_confidence": "MEDIUM",
        "meta_confidence_reason": "Valid improvement suggestion, but not a critical security issue. GitHub's server-side limits prevent actual abuse.",
        "meta_exploitability": "Low - User would need to intentionally make rapid requests",
        "meta_impact": "Low - Temporary quota exhaustion, no data loss or security breach"
      }
    }
  ],
  "scan_duration_seconds": 23.336455583572388,
  "duration_ms": 23336,
  "analyzers_used": [
    "static_analyzer",
    "behavioral_analyzer",
    "llm_analyzer",
    "trigger_analyzer",
    "meta_analyzer"
  ],
  "timestamp": "2026-02-06T02:16:32.876745"
}