{
  "skill_name": "finance-news",
  "skill_path": "/workspace/skills/clawhub-finance-news",
  "skill_directory": "/workspace/skills/clawhub-finance-news",
  "is_safe": false,
  "max_severity": "HIGH",
  "findings_count": 33,
  "findings": [
    {
      "id": "MANIFEST_MISSING_LICENSE_c5ae9be793",
      "rule_id": "MANIFEST_MISSING_LICENSE",
      "category": "policy_violation",
      "severity": "LOW",
      "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": {
        "meta_validated": true,
        "meta_confidence": "HIGH",
        "meta_confidence_reason": "Verified that license field is missing from SKILL.md manifest, though pyproject.toml specifies MIT.",
        "meta_exploitability": "N/A - This is a documentation issue",
        "meta_impact": "Low - Missing metadata reduces clarity but doesn't create security risk"
      }
    },
    {
      "id": "DATA_EXFIL_ENV_VARS_4cd2962079",
      "rule_id": "DATA_EXFIL_ENV_VARS",
      "category": "data_exfiltration",
      "severity": "MEDIUM",
      "title": "Reading environment variables that may contain secrets",
      "description": "Pattern detected: os.environ.get(\"FINNHUB_API_KEY",
      "file_path": "scripts/earnings.py",
      "line_number": 104,
      "snippet": "key = os.environ.get(\"FINNHUB_API_KEY\", \"\")",
      "remediation": "Minimize access to environment variables. Document why needed",
      "analyzer": "static",
      "metadata": {
        "matched_pattern": "os\\.environ(?:\\.get)?\\s*\\([^)]*(?:KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)",
        "matched_text": "os.environ.get(\"FINNHUB_API_KEY",
        "aitech": "AITech-8.2",
        "aitech_name": "Data Exfiltration / Exposure",
        "scanner_category": "SECURITY VIOLATION",
        "meta_reviewed": true
      }
    },
    {
      "id": "DATA_EXFIL_NETWORK_REQUESTS_a1fc0f44f9",
      "rule_id": "DATA_EXFIL_NETWORK_REQUESTS",
      "category": "data_exfiltration",
      "severity": "MEDIUM",
      "title": "HTTP client library imports that enable external communication",
      "description": "Pattern detected: import urllib.request",
      "file_path": "scripts/summarize.py",
      "line_number": 19,
      "snippet": "import urllib.request",
      "remediation": "Ensure network access is necessary and documented. Review all URLs",
      "analyzer": "static",
      "metadata": {
        "matched_pattern": "import\\s+urllib\\.request",
        "matched_text": "import urllib.request",
        "aitech": "AITech-8.2",
        "aitech_name": "Data Exfiltration / Exposure",
        "scanner_category": "SECURITY VIOLATION",
        "meta_reviewed": true
      }
    },
    {
      "id": "DATA_EXFIL_NETWORK_REQUESTS_c9af1809f3",
      "rule_id": "DATA_EXFIL_NETWORK_REQUESTS",
      "category": "data_exfiltration",
      "severity": "MEDIUM",
      "title": "HTTP client library imports that enable external communication",
      "description": "Pattern detected: import urllib.request",
      "file_path": "scripts/fetch_news.py",
      "line_number": 18,
      "snippet": "import urllib.request",
      "remediation": "Ensure network access is necessary and documented. Review all URLs",
      "analyzer": "static",
      "metadata": {
        "matched_pattern": "import\\s+urllib\\.request",
        "matched_text": "import urllib.request",
        "aitech": "AITech-8.2",
        "aitech_name": "Data Exfiltration / Exposure",
        "scanner_category": "SECURITY VIOLATION",
        "meta_reviewed": true
      }
    },
    {
      "id": "TOOL_MISMATCH_NETWORK_9975e6a6db",
      "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": null,
      "line_number": null,
      "snippet": null,
      "remediation": "Declare network usage in compatibility field or remove network calls",
      "analyzer": "static",
      "metadata": {
        "meta_validated": true,
        "meta_confidence": "HIGH",
        "meta_confidence_reason": "Verified that allowed-tools is missing from manifest. This is a metadata completeness issue, not a security threat.",
        "meta_exploitability": "N/A - This is a documentation issue",
        "meta_impact": "Low - Missing metadata reduces transparency but doesn't create security risk"
      }
    },
    {
      "id": "SUSPICIOUS_URL_4bbfc62c39",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/1",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_research.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/1",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_74a10a0811",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/2",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_research.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/2",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_d483efe703",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/aapl1",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_research.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/aapl1",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_0855bf4df5",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/aapl2",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_research.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/aapl2",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_d75b1978dd",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/msft1",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_research.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/msft1",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_4bbfc62c39",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/1",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_research.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/1",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_74a10a0811",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/2",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_research.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/2",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_ec3fe4ee05",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_research.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_ed43f84c9a",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/feed.xml",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_fetch_news.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/feed.xml",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_ed43f84c9a",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/feed.xml",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_fetch_news.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/feed.xml",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_ec3fe4ee05",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_fetch_news.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_d0e3166d75",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/top.xml",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_fetch_news.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/top.xml",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_f7a3b791cd",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/markets.xml",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_fetch_news.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/markets.xml",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_d0e3166d75",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/top.xml",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_fetch_news.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/top.xml",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_ed43f84c9a",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/feed.xml",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_fetch_news.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/feed.xml",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_ed43f84c9a",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/feed.xml",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_fetch_news.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/feed.xml",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_9c08780678",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/rss.xml",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_fetch_news.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/rss.xml",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_9c08780678",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/rss.xml",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_fetch_news.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/rss.xml",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_4bbfc62c39",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/1",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_summarize.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/1",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_74a10a0811",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/2",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_summarize.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/2",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_db4c8ade66",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/3",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_summarize.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/3",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_4bbfc62c39",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/1",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_summarize.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/1",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_74a10a0811",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/2",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_summarize.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/2",
        "meta_reviewed": true
      }
    },
    {
      "id": "SUSPICIOUS_URL_db4c8ade66",
      "rule_id": "BEHAVIOR_SUSPICIOUS_URL",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Suspicious URL detected: https://example.com/3",
      "description": "Script contains suspicious URL that may be used for data exfiltration",
      "file_path": "skills/clawhub-finance-news/tests/test_summarize.py",
      "line_number": null,
      "snippet": null,
      "remediation": "Review URL and ensure it's legitimate and documented",
      "analyzer": "behavioral",
      "metadata": {
        "url": "https://example.com/3",
        "meta_reviewed": true
      }
    },
    {
      "id": "llm_finding_finance-news_0",
      "rule_id": "LLM_DATA_EXFILTRATION",
      "category": "data_exfiltration",
      "severity": "HIGH",
      "title": "Hardcoded WhatsApp Group JID in Cron Scripts",
      "description": "Multiple cron scripts contain a hardcoded WhatsApp group JID (120363421796203667@g.us) as the default value for FINANCE_NEWS_TARGET. This exposes a specific WhatsApp group identifier that could be targeted for spam, social engineering, or unauthorized message delivery if the skill is distributed publicly.",
      "file_path": "cron/evening.sh",
      "line_number": null,
      "snippet": "export FINANCE_NEWS_TARGET=\"${FINANCE_NEWS_TARGET:-120363421796203667@g.us}\"",
      "remediation": "Remove hardcoded group JID from all cron scripts. Use environment variable without default, or use a placeholder value. Document that users must set FINANCE_NEWS_TARGET in their environment before running cron jobs.",
      "analyzer": "llm",
      "metadata": {
        "model": "claude-sonnet-4-5-20250929",
        "overall_assessment": "The finance-news skill is a sophisticated market briefing system with MEDIUM-HIGH security risk. Primary concerns include: (1) Hardcoded WhatsApp group JID exposing a specific communication channel, (2) Automatic transmission of portfolio data to external APIs without explicit user consent, (3) API key management relying on environment variables without security validation, (4) Command injection risks in subprocess calls with user-controlled data. The skill does NOT contain prompt injection, jailbreak attempts, or malicious code execution. However, the data exfiltration patterns and hardcoded credentials require remediation before public distribution. The skill is functional and well-structured but needs security hardening around secrets management and external API communication disclosure.",
        "primary_threats": [
          "Data Exfiltration/Exposure",
          "Hardcoded Credentials",
          "Command Injection Risk",
          "Availability Disruption"
        ],
        "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": "Verified hardcoded JID exists in all 5 cron scripts. This is a real credential exposure that should be removed before public distribution.",
        "meta_exploitability": "Medium - Requires skill distribution to expose the JID, but then trivial to target the group",
        "meta_impact": "Medium - Could enable spam or social engineering attacks against the specific WhatsApp group"
      }
    },
    {
      "id": "llm_finding_finance-news_1",
      "rule_id": "LLM_DATA_EXFILTRATION",
      "category": "data_exfiltration",
      "severity": "MEDIUM",
      "title": "API Keys Required from Environment Without Validation",
      "description": "The skill requires multiple API keys (FMP_API_KEY, FINNHUB_API_KEY, GEMINI_API_KEY) loaded from environment variables or .env files, but there is no validation that these keys are properly secured. Users may inadvertently expose keys through shell history, process listings, or insecure .env file permissions.",
      "file_path": "scripts/earnings.py",
      "line_number": null,
      "snippet": "def get_fmp_key() -> str:\n    key = os.environ.get(\"FMP_API_KEY\", \"\")\n    if not key:\n        env_file = Path.home() / \".config\" / \"finance-news\" / \".env\"\n        if env_file.exists():\n            for line in env_file.read_text().splitlines():\n                if line.startswith(\"FMP_API_KEY=\"):\n                    key = line.split(\"=\", 1)[1].strip()",
      "remediation": "Add documentation warning users to: (1) Set restrictive permissions on .env files (chmod 600), (2) Never commit .env files to version control, (3) Use secure secret management for production deployments. Consider adding a setup validation step that checks .env file permissions.",
      "analyzer": "llm",
      "metadata": {
        "model": "claude-sonnet-4-5-20250929",
        "overall_assessment": "The finance-news skill is a sophisticated market briefing system with MEDIUM-HIGH security risk. Primary concerns include: (1) Hardcoded WhatsApp group JID exposing a specific communication channel, (2) Automatic transmission of portfolio data to external APIs without explicit user consent, (3) API key management relying on environment variables without security validation, (4) Command injection risks in subprocess calls with user-controlled data. The skill does NOT contain prompt injection, jailbreak attempts, or malicious code execution. However, the data exfiltration patterns and hardcoded credentials require remediation before public distribution. The skill is functional and well-structured but needs security hardening around secrets management and external API communication disclosure.",
        "primary_threats": [
          "Data Exfiltration/Exposure",
          "Hardcoded Credentials",
          "Command Injection Risk",
          "Availability Disruption"
        ],
        "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": "Verified that API key loading exists without permission checks. This is a best-practice issue rather than active vulnerability.",
        "meta_exploitability": "Low - Requires local access to exploit insecure file permissions",
        "meta_impact": "Medium - Could expose API keys if .env file has world-readable permissions"
      }
    },
    {
      "id": "llm_finding_finance-news_2",
      "rule_id": "LLM_DATA_EXFILTRATION",
      "category": "data_exfiltration",
      "severity": "MEDIUM",
      "title": "Network Data Exfiltration to External APIs Without User Consent",
      "description": "The skill automatically sends portfolio data, stock symbols, and market queries to multiple external APIs (FMP, Finnhub, Yahoo Finance, yfinance) without explicit user consent or disclosure in the manifest. This could expose sensitive investment information, especially when combined with user-specific portfolio holdings.",
      "file_path": null,
      "line_number": null,
      "snippet": "# fetch_news.py sends portfolio symbols to Yahoo Finance\nquote = yf.Ticker(symbol)\ndata = quote.history(period='1d')\n\n# earnings.py sends symbols to Finnhub API\nurl = f\"https://finnhub.io/api/v1/calendar/earnings?from={from_date}&to={to_date}&token={api_key}\"",
      "remediation": "Add explicit disclosure in SKILL.md description that the skill sends portfolio data to external APIs (FMP, Finnhub, Yahoo Finance). Consider adding a first-run consent prompt. Document which data is sent to which services and provide opt-out mechanisms for privacy-conscious users.",
      "analyzer": "llm",
      "metadata": {
        "model": "claude-sonnet-4-5-20250929",
        "overall_assessment": "The finance-news skill is a sophisticated market briefing system with MEDIUM-HIGH security risk. Primary concerns include: (1) Hardcoded WhatsApp group JID exposing a specific communication channel, (2) Automatic transmission of portfolio data to external APIs without explicit user consent, (3) API key management relying on environment variables without security validation, (4) Command injection risks in subprocess calls with user-controlled data. The skill does NOT contain prompt injection, jailbreak attempts, or malicious code execution. However, the data exfiltration patterns and hardcoded credentials require remediation before public distribution. The skill is functional and well-structured but needs security hardening around secrets management and external API communication disclosure.",
        "primary_threats": [
          "Data Exfiltration/Exposure",
          "Hardcoded Credentials",
          "Command Injection Risk",
          "Availability Disruption"
        ],
        "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": "Verified that portfolio symbols are sent to external APIs. This is expected behavior for a finance skill, but should be disclosed.",
        "meta_exploitability": "Low - This is documented functionality, not a vulnerability",
        "meta_impact": "Low - Only ticker symbols are transmitted, not personal financial data"
      }
    },
    {
      "id": "llm_finding_finance-news_6",
      "rule_id": "LLM_SOCIAL_ENGINEERING",
      "category": "social_engineering",
      "severity": "LOW",
      "title": "Missing allowed-tools Declaration",
      "description": "The SKILL.md manifest does not declare the 'allowed-tools' field, making it unclear which agent tools (Read, Write, Bash, Python) are authorized for use. While this field is optional per the spec, its absence reduces transparency about the skill's intended tool usage.",
      "file_path": "SKILL.md",
      "line_number": null,
      "snippet": "YAML Manifest Details:\n- name: finance-news\n- description: Market news briefings...\n- license: Not specified\n- compatibility: Not specified\n- allowed-tools: Not specified",
      "remediation": "Add 'allowed-tools: [Read, Write, Bash, Python]' to YAML frontmatter to explicitly declare tool requirements. This improves transparency and helps users understand the skill's capabilities before installation.",
      "analyzer": "llm",
      "metadata": {
        "model": "claude-sonnet-4-5-20250929",
        "overall_assessment": "The finance-news skill is a sophisticated market briefing system with MEDIUM-HIGH security risk. Primary concerns include: (1) Hardcoded WhatsApp group JID exposing a specific communication channel, (2) Automatic transmission of portfolio data to external APIs without explicit user consent, (3) API key management relying on environment variables without security validation, (4) Command injection risks in subprocess calls with user-controlled data. The skill does NOT contain prompt injection, jailbreak attempts, or malicious code execution. However, the data exfiltration patterns and hardcoded credentials require remediation before public distribution. The skill is functional and well-structured but needs security hardening around secrets management and external API communication disclosure.",
        "primary_threats": [
          "Data Exfiltration/Exposure",
          "Hardcoded Credentials",
          "Command Injection Risk",
          "Availability Disruption"
        ],
        "aitech": "AITech-2.1",
        "aitech_name": "Social Engineering",
        "aisubtech": null,
        "aisubtech_name": null,
        "scanner_category": "SOCIAL ENGINEERING",
        "meta_reviewed": true
      }
    }
  ],
  "scan_duration_seconds": 92.39901947975159,
  "duration_ms": 92399,
  "analyzers_used": [
    "static_analyzer",
    "behavioral_analyzer",
    "llm_analyzer",
    "trigger_analyzer",
    "meta_analyzer"
  ],
  "timestamp": "2026-02-06T01:17:12.407220"
}