Back to skill

Security audit

News Monitor

Security checks for vulnerabilities and agentic risk

Overview

This skill is for a news notification service, but it asks users to run mutable GitHub/npm code and documents weak local admin authentication for sensitive credentials.

Review this skill before installing. Only run it in an isolated directory or container, pin and inspect the upstream repository before npm install/npm start, set a non-empty dashboard password, avoid putting real passwords or bot tokens in shell history, and assume configured news content may be sent to Discord, Telegram, AI providers, RSS/news services, and related third-party APIs.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:22
Finding
Unpinned Remote Repository Is Downloaded, Installed, and Executed## Vulnerability Details **File Location**: `SKILL.md:22-26` **Vulnerability Type**: Remote payload retrieval and supply-chain execution **Risk Level**: High **Vulnerable Code:** ```bash git clone https://github.com/zxcnny930/buzz.git cd buzz npm install cp config.example.json config.json npm start ``` ### Technical Analysis The installation instructions clone the current state of an external GitHub repository without pinning or verifying a commit, tag, signature, or content digest. The effective code executed by the Skill can therefore change after this package has been reviewed. Running `npm install` also resolves and installs the remote project's dependency graph and may execute npm lifecycle scripts. The subsequent `npm start` executes code from the unaudited repository. Neither the remote implementation nor its dependency lockfile is included in the audited artifact, so its integrity and behavior cannot be established from the packaged files. This creates a remote payload execution and supply-chain trust boundary: control of the referenced repository, its maintainer account, or a dependency used by that repository may translate into local code execution. ### Attack Path 1. An attacker compromises the referenced GitHub repository, its maintainer account, or an install-time dependency. 2. The attacker adds malicious application code, an npm lifecycle script, or a compromised dependency release. 3. A user or Agent follows the documented setup procedure and clones the mutable repository state. 4. `npm install` executes any applicable lifecycle scripts and installs the attacker-controlled dependency graph. 5. `npm start` executes the downloaded application code. 6. The malicious code runs with the operating-system privileges and environment access of the invoking user or Agent. ### Impact Assessment Successful exploitation can provide arbitrary code execution within the invoking process's privilege boundar ...[truncated 646 chars]
Remediation
## Remediation Suggestions 1. Include the reviewed implementation directly in the Skill package so the audited artifact matches the executed code. 2. If remote retrieval is unavoidable, check out a specific immutable commit hash rather than the repository's default branch. 3. Verify the downloaded source using an authenticated signature or a trusted cryptographic digest before installation or execution. 4. Include and review a dependency lockfile, then use `npm ci` to enforce the locked dependency graph. 5. Use `npm ci --ignore-scripts` where lifecycle scripts are unnecessary. If scripts are required, review and explicitly permit each required script. 6. Apply dependency integrity verification, vulnerability scanning, and provenance controls before deployment. 7. Run installation and the service under a dedicated, unprivileged account with minimal filesystem access. 8. Restrict outbound network access to the destinations required for the documented news and notification functionality. 9. Keep secrets outside the source tree and expose only the credentials required by the running service.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (12)

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The documentation explicitly allows operation with an empty dashboard password and shows password submission via query string, but does not clearly warn about the security consequences. Running an unauthenticated local admin API or placing secrets in URLs can expose credentials through shell history, logs, browser history, referer leakage, or local network access if the service binds beyond loopback.

External Transmission

Medium
Category
Data Exfiltration
Content
If a dashboard password is set, all `/api/*` endpoints require `?pw=PASSWORD`:

```bash
curl -s "http://localhost:3848/api/config?pw=YOUR_PASSWORD"
```

If password is empty string, no authentication is needed.
Confidence
96% confidence
Finding
This example transmits an administrative password in the URL query string. Secrets in URLs are commonly captured in logs, shell history, proxies, browser history, and monitoring tools, making accidental disclosure more likely than if headers or interactive prompts were used.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
curl -s -X POST http://localhost:3848/api/config \
  -H "Content-Type: application/json" \
  -d '{"grok": {"apiKey": "xai-...", "model": "grok-4.1-fast", "baseUrl": "https://api.x.ai/v1"}}'
```

**Success response:**
Confidence
74% confidence
Finding
This example shows submission of an AI provider API key and base URL to the service, enabling the application to send content to an external third-party API. In context that behavior is expected, but the combination of secret handling plus external transmission becomes risky if users are not warned about privacy implications, retention by the provider, and the need to secure the local admin API.

External Transmission

Medium
Category
Data Exfiltration
Content
|-------|------|---------|------------|-------------|
| `apiKey` | string | | | API key for translation |
| `model` | string | `"grok-4.1-fast"` | | Model name (any OpenAI-compatible) |
| `baseUrl` | string | `"https://api.x.ai/v1"` | must start with `http(s)://` | API endpoint |

Supported models: `grok-4.1-fast`, `gpt-4o-mini`, `gpt-4.1-mini`, `claude-sonnet-4-6`, `claude-haiku-4-5-20251001`, `gemini-2.0-flash`, or any OpenAI-compatible model.
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Enable Jin10
curl -s -X POST http://localhost:3848/api/config \
  -H "Content-Type: application/json" \
  -d '{"jin10": {"enabled": true, "pollIntervalMs": 15000}}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Enable Jin10
curl -s -X POST http://localhost:3848/api/config \
  -H "Content-Type: application/json" \
  -d '{"jin10": {"enabled": true, "pollIntervalMs": 15000}}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Enable Jin10
curl -s -X POST http://localhost:3848/api/config \
  -H "Content-Type: application/json" \
  -d '{"jin10": {"enabled": true, "pollIntervalMs": 15000}}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
### Set up Discord + Telegram dual push

```bash
curl -s -X POST http://localhost:3848/api/config \
  -H "Content-Type: application/json" \
  -d '{
    "discord": {"webhookUrl": "https://discord.com/api/webhooks/..."},
Confidence
82% confidence
Finding
This example sends live Discord webhook and Telegram bot credentials to the local service for onward transmission to third-party platforms. Although expected for the skill's function, it involves handling highly sensitive messaging credentials, and the surrounding documentation also permits weak/no auth, increasing the chance of credential misuse if the local API is exposed or accessed by other local processes.

Vague Triggers

Medium
Confidence
88% confidence
Finding
The markdown instructs behavior based on generic user phrases such as "also add X" and "set to," which are common in everyday speech and not narrowly tied to this skill's activation context. Because no negative examples or tighter invocation boundaries are provided, these phrases could cause unintended invocation overlap with unrelated tasks.

External Transmission

Medium
Category
Data Exfiltration
Content
# Step 2: Append and POST back
# Adding Sports (100639) to existing [21, 120]
curl -s -X POST http://localhost:3848/api/config \
  -H "Content-Type: application/json" \
  -d '{"polymarket": {"tagIds": [21, 120, 100639]}}'
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The skill requests the `exec` tool even though the package metadata describes a news aggregation and notification capability that should primarily require network/API access and file reading, not arbitrary command execution. Granting command execution broadens the attack surface substantially: if any downstream prompt, configuration, or fetched content influences commands, the skill could execute unintended system actions on the host.

Natural-Language Policy Violations

Low
Confidence
79% confidence
Finding
The settings page is presented specifically as `/settings.html?lang=en`, which imposes an English locale in the user-facing instructions. The file does not frame this as optional or provide an alternative locale choice, so it may violate language-choice policy expectations.

Static analysis

No suspicious patterns detected.