Back to skill

Security audit

Local News API: Search Articles, Sources, Meeting Transcripts & Events

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed read-only local-news research client; it uses a newsroom API key and network access but does not show hidden writes, persistence, or deceptive behavior.

Install only if you want a local-news research helper that can contact Communities News newsroom APIs. Use a read-only cn_ key where possible, keep .env files trusted, and be aware that article URLs supplied to the tool are fetched from the network.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (21)

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 114)May include surrounding context.

hold the key but never NEWS_SITE or PLATFORM_API_BASE):

bash
echo 'COMMUNITIES_NEWS_API_KEY=cn_...' >> scripts/.env.local

Access is tiered on the platform side, and your key may not reach everything.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/local_news_api.py (reported line 267)May include surrounding context.

python
hold the key but never `NEWS_SITE` or `PLATFORM_API_BASE`):

```bash
echo 'COMMUNITIES_NEWS_API_KEY=cn_...' >> scripts/.env.local
```

Access is tiered on the platform side, and your key may not reach everything.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/local_news_api.py (reported line 317)May include surrounding context.

python
hold the key but never `NEWS_SITE` or `PLATFORM_API_BASE`):

```bash
echo 'COMMUNITIES_NEWS_API_KEY=cn_...' >> scripts/.env.local
```

Access is tiered on the platform side, and your key may not reach everything.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/local_news_api.py (reported line 543)May include surrounding context.

python
hold the key but never `NEWS_SITE` or `PLATFORM_API_BASE`):

```bash
echo 'COMMUNITIES_NEWS_API_KEY=cn_...' >> scripts/.env.local
```

Access is tiered on the platform side, and your key may not reach everything.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/local_news_api.py (reported line 713)May include surrounding context.

python
hold the key but never `NEWS_SITE` or `PLATFORM_API_BASE`):

```bash
echo 'COMMUNITIES_NEWS_API_KEY=cn_...' >> scripts/.env.local
```

Access is tiered on the platform side, and your key may not reach everything.

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'env' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'file_read' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'file_write' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'network' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/local_news_api.py (reported line 255)May include surrounding context.

python
super().__init__(f"HTTP {code}: {body[:300]}")


# What a .env in the CURRENT DIRECTORY may set. That directory is whatever project
# the skill happens to run in, so its .env is workspace-controlled: if it could set
# NEWS_SITE or PLATFORM_API_BASE it could choose where your key is sent, and an agent
# working inside an untrusted repository would carry your exported key there. It may

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/local_news_api.py (reported line 256)May include surrounding context.

python
super().__init__(f"HTTP {code}: {body[:300]}")


# What a .env in the CURRENT DIRECTORY may set. That directory is whatever project
# the skill happens to run in, so its .env is workspace-controlled: if it could set
# NEWS_SITE or PLATFORM_API_BASE it could choose where your key is sent, and an agent
# working inside an untrusted repository would carry your exported key there. It may

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/local_news_api.py (reported line 260)May include surrounding context.

python
super().__init__(f"HTTP {code}: {body[:300]}")


# What a .env in the CURRENT DIRECTORY may set. That directory is whatever project
# the skill happens to run in, so its .env is workspace-controlled: if it could set
# NEWS_SITE or PLATFORM_API_BASE it could choose where your key is sent, and an agent
# working inside an untrusted repository would carry your exported key there. It may

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/local_news_api.py (reported line 267)May include surrounding context.

python
super().__init__(f"HTTP {code}: {body[:300]}")


# What a .env in the CURRENT DIRECTORY may set. That directory is whatever project
# the skill happens to run in, so its .env is workspace-controlled: if it could set
# NEWS_SITE or PLATFORM_API_BASE it could choose where your key is sent, and an agent
# working inside an untrusted repository would carry your exported key there. It may

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/local_news_api.py (reported line 303)May include surrounding context.

python
super().__init__(f"HTTP {code}: {body[:300]}")


# What a .env in the CURRENT DIRECTORY may set. That directory is whatever project
# the skill happens to run in, so its .env is workspace-controlled: if it could set
# NEWS_SITE or PLATFORM_API_BASE it could choose where your key is sent, and an agent
# working inside an untrusted repository would carry your exported key there. It may

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/local_news_api.py (reported line 304)May include surrounding context.

python
super().__init__(f"HTTP {code}: {body[:300]}")


# What a .env in the CURRENT DIRECTORY may set. That directory is whatever project
# the skill happens to run in, so its .env is workspace-controlled: if it could set
# NEWS_SITE or PLATFORM_API_BASE it could choose where your key is sent, and an agent
# working inside an untrusted repository would carry your exported key there. It may

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/local_news_api.py (reported line 276)May include surrounding context.

python
script_dir = SCRIPT_DIR.resolve()
    for d in (SCRIPT_DIR, Path.cwd()):
        workspace = d.resolve() != script_dir
        for name in (".env", ".env.local"):
            p = (d / name).resolve()
            if p in seen or not p.exists():
                continue

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/local_news_api.py (reported line 276)May include surrounding context.

python
script_dir = SCRIPT_DIR.resolve()
    for d in (SCRIPT_DIR, Path.cwd()):
        workspace = d.resolve() != script_dir
        for name in (".env", ".env.local"):
            p = (d / name).resolve()
            if p in seen or not p.exists():
                continue

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The description says to use the skill even when the request never says "API" or names the newsroom, then lists broad phrases like "has anyone reported on this" and "when does the assembly next meet." These phrases are common user requests and the file does not provide exclusion conditions or boundaries, which could cause unintended invocation in ordinary conversation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The article command accepts any full URL beginning with http and fetches it with fetch_markdown(), without restricting host/origin to the configured newsroom or an allowlist. This expands the tool from a newsroom API client into a general outbound fetcher, creating SSRF-like behavior, policy bypass, and the possibility of retrieving attacker-controlled content under the guise of this skill.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The parser help for person promises 'every article quoting them (with the quote)'. But cmd_person explicitly documents and renders a union of quoted matches and structurally linked articles without quotes, warning that rows without verbatim_excerpt are not quotable.

Content

No source excerpt is available for this finding.

Scope Creep

Low
Category
Excessive Agency
Confidence
70% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

Scanner excerpt · scripts/local_news_api.py (reported line 12)May include surrounding context.

python
back to the newsroom is a separate, editor-authenticated workflow, not this tool.

DEFAULTS to alaskanews.com, which is the only newsroom live on this platform
today. It is not limited to it: set NEWS_SITE and NEWS_COMMUNITY to point it at
another one. Nothing about a market is compiled in.

Terms of use are READ FROM THE NEWSROOM, per request, never assumed: robots.txt