{
  "skill_name": "caveman-compress",
  "skill_path": "/Users/brianlevine/claude-projects/skill-scanner-test/skills/juliusbrussee-caveman/skills/caveman-compress",
  "is_safe": false,
  "max_severity": "HIGH",
  "findings_count": 7,
  "findings": [
    {
      "id": "CREDENTIAL_FILE_ACCESS_6a78f59209",
      "rule_id": "BEHAVIOR_CREDENTIAL_FILE_ACCESS",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Credential file access detected",
      "description": "Script accesses credential files in /Users/brianlevine/claude-projects/skill-scanner-test/skills/juliusbrussee-caveman/skills/caveman-compress/scripts/compress.py",
      "file_path": "/Users/brianlevine/claude-projects/skill-scanner-test/skills/juliusbrussee-caveman/skills/caveman-compress/scripts/compress.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Remove access to ~/.aws, ~/.ssh, or other credential files",
      "analyzer": "behavioral",
      "metadata": {
        "aitech": "AITech-14.1",
        "aitech_name": "Unauthorized Access",
        "aisubtech": "AISubtech-14.1.1",
        "aisubtech_name": "Credential Theft",
        "aitech_mappings": [
          "OWASP: LLM02:2026: Sensitive Information Disclosure",
          "OWASP: ASI03: Identity & Privilege Abuse",
          "MITRE ATLAS: AML.T0055: Unsecured Credentials",
          "MITRE ATLAS: AML.T0091: Use Alternate Authentication Material",
          "MITRE ATLAS: AML.T0091.000: App Access Token Abuse",
          "MITRE ATT&CK: T1098: Account Manipulation",
          "MITRE ATT&CK: T1528: Steal Application Access Token",
          "MITRE ATT&CK: T1550: Use Alternate Authentication Material",
          "NIST AML: NISTAML.03: Privacy Compromise"
        ],
        "aisubtech_mappings": [
          "OWASP: LLM02:2026: Sensitive Information Disclosure",
          "OWASP: ASI03: Identity & Privilege Abuse",
          "MITRE ATLAS: AML.T0055: Unsecured Credentials",
          "MITRE ATLAS: AML.T0091: Use Alternate Authentication Material",
          "MITRE ATLAS: AML.T0091.000: App Access Token Abuse",
          "MITRE ATLAS: AML.T0106: Exploitation for Credential Access",
          "MITRE ATLAS: AML.T0098: AI Agent Tool Credential Harvesting",
          "MITRE ATT&CK: T1098: Account Manipulation",
          "MITRE ATT&CK: T1528: Steal Application Access Token",
          "MITRE ATT&CK: T1550: Use Alternate Authentication Material",
          "NIST AML: NISTAML.03: Privacy Compromise"
        ],
        "framework_mappings": [
          "OWASP: LLM02:2026: Sensitive Information Disclosure",
          "OWASP: ASI03: Identity & Privilege Abuse",
          "MITRE ATLAS: AML.T0055: Unsecured Credentials",
          "MITRE ATLAS: AML.T0091: Use Alternate Authentication Material",
          "MITRE ATLAS: AML.T0091.000: App Access Token Abuse",
          "MITRE ATLAS: AML.T0106: Exploitation for Credential Access",
          "MITRE ATLAS: AML.T0098: AI Agent Tool Credential Harvesting",
          "MITRE ATT&CK: T1098: Account Manipulation",
          "MITRE ATT&CK: T1528: Steal Application Access Token",
          "MITRE ATT&CK: T1550: Use Alternate Authentication Material",
          "NIST AML: NISTAML.03: Privacy Compromise"
        ],
        "taxonomy_status": "mapped",
        "taxonomy_source": "rule"
      }
    },
    {
      "id": "DESC_BEHAVIOR_MISMATCH_02d6092f5e",
      "rule_id": "SOCIAL_ENG_MISLEADING_DESC",
      "category": "social_engineering",
      "severity": "MEDIUM",
      "title": "Potential description-behavior mismatch",
      "description": "Skill performs actions not reflected in its description",
      "file_path": "SKILL.md",
      "line_number": null,
      "snippet": null,
      "remediation": "Ensure description accurately reflects all skill capabilities",
      "analyzer": "static",
      "metadata": {
        "aitech": "AITech-4.3",
        "aitech_name": "Protocol Manipulation",
        "aisubtech": "AISubtech-4.3.5",
        "aisubtech_name": "Capability Inflation",
        "aitech_mappings": [
          "OWASP: LLM03:2026: Excessive Agency",
          "OWASP: ASI07: Insecure Inter-Agent Communication",
          "MITRE ATLAS: AML.T0067: LLM Trusted Output Component Manipulation",
          "MITRE ATLAS: AML.T0018: Manipulate AI Model",
          "MITRE ATT&CK: T1203: Exploitation for Client Execution",
          "NIST AML: NISTAML.024: Targeted Poisoning"
        ],
        "aisubtech_mappings": [
          "OWASP: LLM03:2026: Excessive Agency",
          "OWASP: ASI03: Identity & Privilege Abuse",
          "OWASP: ASI07: Insecure Inter-Agent Communication",
          "MITRE ATLAS: AML.T0053: LLM Plugin Compromise",
          "NIST AML: N/A"
        ],
        "framework_mappings": [
          "OWASP: LLM03:2026: Excessive Agency",
          "OWASP: ASI03: Identity & Privilege Abuse",
          "OWASP: ASI07: Insecure Inter-Agent Communication",
          "MITRE ATLAS: AML.T0053: LLM Plugin Compromise",
          "NIST AML: N/A"
        ],
        "taxonomy_status": "mapped",
        "taxonomy_source": "rule"
      }
    },
    {
      "id": "TOOL_MISMATCH_NETWORK_4b5780ea40",
      "rule_id": "TOOL_ABUSE_UNDECLARED_NETWORK",
      "category": "unauthorized_tool_use",
      "severity": "MEDIUM",
      "title": "Undeclared network usage",
      "description": "Skill code uses network libraries but doesn't declare network requirement",
      "file_path": "SKILL.md",
      "line_number": null,
      "snippet": null,
      "remediation": "Declare network usage in compatibility field or remove network calls",
      "analyzer": "static",
      "metadata": {
        "semantic_facts": {
          "evidence_kind": "capability_mismatch",
          "context_kind": "manifest",
          "signals": [
            {
              "rule_id": "TOOL_ABUSE_UNDECLARED_NETWORK",
              "kind": "undeclared_network",
              "file_path": "SKILL.md",
              "value_class": "external_network"
            }
          ],
          "candidate_flow": {
            "source_class": "skill_code",
            "sink_class": "external_network",
            "transforms": [],
            "cross_file": false,
            "source_path": "scripts/compress.py",
            "sink_path": "scripts/compress.py"
          },
          "flows": [
            {
              "source_class": "skill_code",
              "sink_class": "external_network",
              "transforms": [],
              "cross_file": false,
              "source_path": "scripts/compress.py",
              "sink_path": "scripts/compress.py"
            }
          ]
        },
        "aitech": "AITech-2.1",
        "aitech_name": "Excessive Agency",
        "aisubtech": "AISubtech-2.1.2",
        "aisubtech_name": "Capability and Permission Overreach",
        "aitech_mappings": [
          "OWASP: LLM03:2026: Excessive Agency",
          "OWASP: ASI10: Rogue Agents",
          "MITRE ATLAS: N/A",
          "NIST AML: N/A"
        ],
        "aisubtech_mappings": [
          "OWASP: LLM03:2026: Excessive Agency",
          "OWASP: ASI10: Rogue Agents",
          "MITRE ATLAS: N/A",
          "NIST AML: N/A"
        ],
        "framework_mappings": [
          "OWASP: LLM03:2026: Excessive Agency",
          "OWASP: ASI10: Rogue Agents",
          "MITRE ATLAS: N/A",
          "NIST AML: N/A"
        ],
        "taxonomy_status": "mapped",
        "taxonomy_source": "rule"
      }
    },
    {
      "id": "MANIFEST_MISSING_LICENSE_c5ae9be793",
      "rule_id": "MANIFEST_MISSING_LICENSE",
      "category": "policy_violation",
      "severity": "INFO",
      "title": "Skill does not specify a license",
      "description": "Skill manifest does not include a 'license' field. Specifying a license helps users understand usage terms.",
      "file_path": "SKILL.md",
      "line_number": null,
      "snippet": null,
      "remediation": "Add 'license' field to SKILL.md frontmatter (e.g., MIT, Apache-2.0)",
      "analyzer": "static",
      "metadata": {
        "aitech": null,
        "aitech_name": null,
        "aisubtech": null,
        "aisubtech_name": null,
        "aitech_mappings": [],
        "aisubtech_mappings": [],
        "framework_mappings": [],
        "taxonomy_status": "not_applicable",
        "taxonomy_source": "rule"
      }
    },
    {
      "id": "DATA_EXFIL_NETWORK_REQUESTS_9694e174b4",
      "rule_id": "DATA_EXFIL_NETWORK_REQUESTS",
      "category": "data_exfiltration",
      "severity": "MEDIUM",
      "title": "Outbound network request primitives that can transmit data externally",
      "description": "Pattern detected: urllib.request.Request(",
      "file_path": "scripts/compress.py",
      "line_number": 679,
      "snippet": "request = urllib.request.Request(",
      "remediation": "Ensure network operations are necessary and document allowed destinations",
      "analyzer": "static",
      "metadata": {
        "matched_pattern": "urllib\\.request\\.(?:urlopen|Request)\\s*\\(",
        "matched_text": "urllib.request.Request(",
        "signature_pattern_index": 3,
        "signature_match_start": 10,
        "signature_match_end": 33,
        "signature_pattern_sha256": "bd8faff6b46ce7415a5dcfbd13f1e9926fe504882c96ed53605bd9f403cf4964",
        "scanner_category": "SECURITY VIOLATION",
        "signature_context": "code",
        "signature_polarity": "active",
        "source_category": "data_exfiltration",
        "category_normalization": "native",
        "semantic_facts": {
          "evidence_kind": "signature_pattern",
          "context_kind": "code",
          "signals": [
            {
              "rule_id": "DATA_EXFIL_NETWORK_REQUESTS",
              "kind": "signature_polarity",
              "file_path": "scripts/compress.py",
              "value_class": "active"
            }
          ]
        },
        "aitech": "AITech-8.2",
        "aitech_name": "Data Exfiltration / Exposure",
        "aisubtech": "AISubtech-8.2.3",
        "aisubtech_name": "Data Exfiltration via Agent Tooling",
        "aitech_mappings": [
          "OWASP: LLM02:2026: Sensitive Information Disclosure",
          "OWASP: ASI09: Human-Agent Trust Exploitation",
          "MITRE ATLAS: AML.T0024.000: Exfiltration via AI Inference API: Infer Training Data Membership",
          "MITRE ATLAS: AML.T0035: AI Artifact Collection",
          "MITRE ATLAS: AML.T0037: Data From Local System",
          "MITRE ATLAS: AML.T0057: LLM Data Leakage",
          "NIST AML: NISTAML.037: Training Data Attacks"
        ],
        "aisubtech_mappings": [
          "OWASP: LLM02:2026: Sensitive Information Disclosure",
          "OWASP: ASI02: Tool Misuse & Exploitation",
          "OWASP: ASI09: Human-Agent Trust Exploitation",
          "MITRE ATLAS: AML.T0086: Exfiltration via AI Agent Tool Invocation",
          "NIST AML: N/A"
        ],
        "framework_mappings": [
          "OWASP: LLM02:2026: Sensitive Information Disclosure",
          "OWASP: ASI02: Tool Misuse & Exploitation",
          "OWASP: ASI09: Human-Agent Trust Exploitation",
          "MITRE ATLAS: AML.T0086: Exfiltration via AI Agent Tool Invocation",
          "NIST AML: N/A"
        ],
        "taxonomy_status": "mapped",
        "taxonomy_source": "rule"
      }
    },
    {
      "id": "CORRELATED_SENSITIVE_NETWORK_FLOW_c50983a97919",
      "rule_id": "CORRELATED_SENSITIVE_NETWORK_FLOW",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Sensitive source reaches a network sink",
      "description": "Correlated sensitive_environment \u2192 network behavior across scripts/compress.py.",
      "file_path": "scripts/compress.py",
      "line_number": 690,
      "snippet": null,
      "remediation": "Remove the transmission or constrain it to explicitly declared, trusted destinations.",
      "analyzer": "correlation",
      "metadata": {
        "files_involved": [
          "scripts/compress.py"
        ],
        "semantic_facts": {
          "evidence_kind": "correlated_behavior",
          "context_kind": "code",
          "commands": [
            {
              "executable": "urllib",
              "argument_classes": [
                "request_method",
                "credential_payload",
                "destination_dynamic"
              ],
              "downloads": true,
              "executes": false,
              "destructive": false,
              "privilege_change": false,
              "source_class": "network",
              "sink_class": "network",
              "file_path": "scripts/compress.py"
            },
            {
              "executable": "run",
              "argument_classes": [
                "dynamic"
              ],
              "downloads": false,
              "executes": true,
              "destructive": false,
              "privilege_change": false,
              "source_class": "",
              "sink_class": "code_execution",
              "file_path": "scripts/compress.py"
            }
          ],
          "urls": [],
          "flows": [
            {
              "source_class": "sensitive_environment",
              "sink_class": "network",
              "transforms": [],
              "cross_file": false,
              "source_path": "scripts/compress.py",
              "sink_path": "scripts/compress.py"
            }
          ],
          "reference_edges": [
            {
              "source_path": "scripts/compress.py",
              "target_path": "scripts/detect.py",
              "kind": "package_reference"
            },
            {
              "source_path": "scripts/compress.py",
              "target_path": "scripts/validate.py",
              "kind": "package_reference"
            }
          ],
          "signals": [
            {
              "rule_id": "CORRELATION_SIGNAL",
              "kind": "correlated_behavior",
              "file_path": "scripts/compress.py",
              "value_class": "sensitive_source"
            }
          ],
          "candidate_flow": {
            "source_class": "sensitive_environment",
            "sink_class": "network",
            "transforms": [],
            "cross_file": false,
            "source_path": "scripts/compress.py",
            "sink_path": "scripts/compress.py"
          }
        },
        "aitech": "AITech-8.2",
        "aitech_name": "Data Exfiltration / Exposure",
        "aisubtech": "AISubtech-8.2.3",
        "aisubtech_name": "Data Exfiltration via Agent Tooling",
        "aitech_mappings": [
          "OWASP: LLM02:2026: Sensitive Information Disclosure",
          "OWASP: ASI09: Human-Agent Trust Exploitation",
          "MITRE ATLAS: AML.T0024.000: Exfiltration via AI Inference API: Infer Training Data Membership",
          "MITRE ATLAS: AML.T0035: AI Artifact Collection",
          "MITRE ATLAS: AML.T0037: Data From Local System",
          "MITRE ATLAS: AML.T0057: LLM Data Leakage",
          "NIST AML: NISTAML.037: Training Data Attacks"
        ],
        "aisubtech_mappings": [
          "OWASP: LLM02:2026: Sensitive Information Disclosure",
          "OWASP: ASI02: Tool Misuse & Exploitation",
          "OWASP: ASI09: Human-Agent Trust Exploitation",
          "MITRE ATLAS: AML.T0086: Exfiltration via AI Agent Tool Invocation",
          "NIST AML: N/A"
        ],
        "framework_mappings": [
          "OWASP: LLM02:2026: Sensitive Information Disclosure",
          "OWASP: ASI02: Tool Misuse & Exploitation",
          "OWASP: ASI09: Human-Agent Trust Exploitation",
          "MITRE ATLAS: AML.T0086: Exfiltration via AI Agent Tool Invocation",
          "NIST AML: N/A"
        ],
        "taxonomy_status": "mapped",
        "taxonomy_source": "rule"
      }
    },
    {
      "id": "DATA_EXFIL_NETWORK_REQUESTS_2c3248a2df",
      "rule_id": "DATA_EXFIL_NETWORK_REQUESTS",
      "category": "data_exfiltration",
      "severity": "MEDIUM",
      "title": "Outbound network request primitives that can transmit data externally",
      "description": "Pattern detected: urllib.request.urlopen(",
      "file_path": "scripts/compress.py",
      "line_number": 690,
      "snippet": "with urllib.request.urlopen(request, timeout=CLAUDE_CALL_TIMEOUT_SECONDS) as response:",
      "remediation": "Ensure network operations are necessary and document allowed destinations",
      "analyzer": "static",
      "metadata": {
        "matched_pattern": "urllib\\.request\\.(?:urlopen|Request)\\s*\\(",
        "matched_text": "urllib.request.urlopen(",
        "signature_pattern_index": 3,
        "signature_match_start": 5,
        "signature_match_end": 28,
        "signature_pattern_sha256": "bd8faff6b46ce7415a5dcfbd13f1e9926fe504882c96ed53605bd9f403cf4964",
        "scanner_category": "SECURITY VIOLATION",
        "signature_context": "code",
        "signature_polarity": "active",
        "source_category": "data_exfiltration",
        "category_normalization": "native",
        "semantic_facts": {
          "evidence_kind": "signature_pattern",
          "context_kind": "code",
          "signals": [
            {
              "rule_id": "DATA_EXFIL_NETWORK_REQUESTS",
              "kind": "signature_polarity",
              "file_path": "scripts/compress.py",
              "value_class": "active"
            }
          ]
        },
        "aitech": "AITech-8.2",
        "aitech_name": "Data Exfiltration / Exposure",
        "aisubtech": "AISubtech-8.2.3",
        "aisubtech_name": "Data Exfiltration via Agent Tooling",
        "aitech_mappings": [
          "OWASP: LLM02:2026: Sensitive Information Disclosure",
          "OWASP: ASI09: Human-Agent Trust Exploitation",
          "MITRE ATLAS: AML.T0024.000: Exfiltration via AI Inference API: Infer Training Data Membership",
          "MITRE ATLAS: AML.T0035: AI Artifact Collection",
          "MITRE ATLAS: AML.T0037: Data From Local System",
          "MITRE ATLAS: AML.T0057: LLM Data Leakage",
          "NIST AML: NISTAML.037: Training Data Attacks"
        ],
        "aisubtech_mappings": [
          "OWASP: LLM02:2026: Sensitive Information Disclosure",
          "OWASP: ASI02: Tool Misuse & Exploitation",
          "OWASP: ASI09: Human-Agent Trust Exploitation",
          "MITRE ATLAS: AML.T0086: Exfiltration via AI Agent Tool Invocation",
          "NIST AML: N/A"
        ],
        "framework_mappings": [
          "OWASP: LLM02:2026: Sensitive Information Disclosure",
          "OWASP: ASI02: Tool Misuse & Exploitation",
          "OWASP: ASI09: Human-Agent Trust Exploitation",
          "MITRE ATLAS: AML.T0086: Exfiltration via AI Agent Tool Invocation",
          "NIST AML: N/A"
        ],
        "taxonomy_status": "mapped",
        "taxonomy_source": "rule"
      }
    }
  ],
  "scan_duration_seconds": 0.3649940490722656,
  "duration_ms": 364,
  "analyzers_used": [
    "static_analyzer",
    "bytecode",
    "pipeline",
    "correlation",
    "behavioral_analyzer",
    "trigger_analyzer"
  ],
  "timestamp": "2026-10-22T04:35:30.390756+00:00",
  "scan_metadata": {
    "policy_name": "default",
    "policy_version": "1.0",
    "policy_preset_base": "balanced",
    "policy_fingerprint_sha256": "3f48e661bfbc54597f97bbf3dcf2c1cbae2f596ddc79c0b44784efea326b3d1d",
    "cel": {
      "mode": "shadow",
      "runtime": "cel-go",
      "runtime_version": "v0.32.0;helper=2.3.1",
      "fact_schema": "v1",
      "expression_set_hash": "f26459b8f4a46a974d7ab0aaae34127b5b6a40d693e266e12fca03a69a6d26aa",
      "evaluated": 0,
      "retained": 7,
      "would_suppress": 0,
      "suppressed": 0,
      "fallbacks": 0,
      "projection_incomplete": 0,
      "elapsed_ms": 0.0,
      "projection_ms": 0.0,
      "evaluation_ms": 0.0,
      "errors": [],
      "per_rule": {},
      "suppressed_candidates": []
    },
    "rule_contract": {
      "status": "passed",
      "schema_version": 2,
      "checked": 5,
      "invalid_findings": 0,
      "errors": []
    },
    "taxonomy": {
      "source": "builtin",
      "version": "2.0.0",
      "name": "Cisco AI Security and Safety Taxonomy",
      "revision": "655a343ac943a51b6f61f86e47156e7752c15dc6",
      "snapshot_sha256": "413e8ce9081e6d91b78aaa0d0b1c06cdc15d0406ad319e23e9f9f4f80735c441",
      "findings": {
        "mapped": 6,
        "not_applicable": 1,
        "unmapped": 0
      }
    }
  },
  "scanner_version": "2.3.1",
  "source": "juliusbrussee",
  "repo_url": "https://github.com/juliusbrussee/caveman"
}