Back to skill

Security audit

team-efficiency-daily-report

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to do its stated reporting job, but it uses authenticated browser/API access, saves internal team data locally, and recommends unattended cron execution without enough scoping or retention guidance.

Install only if you are authorized to automate the configured dashboard and collect the resulting team-efficiency data. Review the configured dashboard URL and API endpoint, understand that it may reuse your logged-in browser session, protect or delete the generated JSON/Markdown files, and avoid enabling the cron schedule unless you can isolate it, pin dependencies, and remove it later.

Vulnerability Patterns
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • 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
Findings (1)

T06 · System Persistence

Error
Location
README.md:81
Finding

Persistent Daily Execution Through a User Cron Job

Content
View full analysis

Vulnerability Details

File Location: README.md:81-91
Vulnerability Type: T06: System Persistence
Risk Level: High

Vulnerable Code Snippet:

markdown
## 定时自动运行(推荐)

通过 cron 每天自动生成日报:

```bash
crontab -e

添加:

text
0 9 * * * cd /path/to/skills/team-efficiency-daily-report && pnpm start
text

### Technical Analysis

The documentation recommends adding the Skill to the user's crontab. The resulting scheduled task survives the original Skill invocation, persists across login sessions and system restarts, and executes the project every day under the privileges of the account that owns the crontab.

Daily scheduling is related to the declared daily-report functionality, and the project does not appear to install the cron entry automatically. Nevertheless, persistence is not required for one-time report generation and should be an explicit, informed opt-in rather than the generally recommended execution mode.

The risk is amplified by the following properties of the supplied artifact:

- `package.json` uses mutable caret dependency ranges for `@bondli-skills/shared`, `puppeteer`, and `puppeteer-core`.
- No dependency lockfile was supplied for review.
- The referenced `dist/index.js` implementation was absent, preventing verification of the code that the task is intended to execute.
- `package.json` does not define the `start` script used by the documented cron command.
- No removal procedure, execution isolation, integrity verification, or restricted service account is documented.

The scheduled command therefore establishes an unattended execution point whose future behavior may change if the project, its start command, or its resolved dependencies change.

### Attack Path

1. A user follows the README and opens their user crontab with `crontab -e`.
2. The user adds the documented daily task pointing to the project directory.
3. The project is subsequently updated, its p
...[truncated 1359 chars]
Remediation
View remediation

Remediation Suggestions

  1. Present scheduled execution as an optional deployment mode rather than the recommended default, and require explicit user approval before any persistent task is created.
  2. Keep ordinary Skill execution one-shot and avoid modifying crontab automatically.
  3. Document a precise removal and verification procedure, such as reviewing the output of crontab -l and deleting the corresponding entry with crontab -e.
  4. Run scheduled reporting under a dedicated least-privileged account with access only to the required dashboard, output directory, and configuration.
  5. Use an absolute path to a reviewed executable and package manager rather than relying on cron's ambient PATH.
  6. Supply the referenced runtime implementation and a valid scripts.start entry so users can review and test the exact scheduled behavior before enabling persistence.
  7. Commit and enforce a lockfile, pin security-sensitive dependencies, and perform integrity and vulnerability checks before unattended execution.
  8. Prevent dependency installation or automatic updates from occurring inside the scheduled task.
  9. Restrict permissions on configuration, output, and log files because reports may contain internal project, ownership, and delivery information.
  10. Add bounded logging, failure handling, and monitoring so unexpected changes or repeated failures are visible to the user.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (23)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill description does not disclose especially sensitive behavior: intercepting API payloads from browser traffic, depending on an existing login session, replaying captured requests, and modifying query filters. In context, that can enable unintended reuse of authenticated session context and access to internal dashboard data beyond what a user expects from a 'report' skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill description does not disclose especially sensitive behavior: intercepting API payloads from browser traffic, depending on an existing login session, replaying captured requests, and modifying query filters. In context, that can enable unintended reuse of authenticated session context and access to internal dashboard data beyond what a user expects from a 'report' skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill description does not disclose especially sensitive behavior: intercepting API payloads from browser traffic, depending on an existing login session, replaying captured requests, and modifying query filters. In context, that can enable unintended reuse of authenticated session context and access to internal dashboard data beyond what a user expects from a 'report' skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill description does not disclose especially sensitive behavior: intercepting API payloads from browser traffic, depending on an existing login session, replaying captured requests, and modifying query filters. In context, that can enable unintended reuse of authenticated session context and access to internal dashboard data beyond what a user expects from a 'report' skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill description does not disclose especially sensitive behavior: intercepting API payloads from browser traffic, depending on an existing login session, replaying captured requests, and modifying query filters. In context, that can enable unintended reuse of authenticated session context and access to internal dashboard data beyond what a user expects from a 'report' skill.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node dist/index.js

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The README describes automatic browser access to an internal reporting system and XHR/API data capture, but does not provide a user-facing warning that the skill will access network resources and extract data programmatically. Users may run it without understanding the scope of access, which can lead to unauthorized collection of internal data or surprising interaction with authenticated sessions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The README states that collected team efficiency data and generated reports are stored locally by date, but it does not warn users that these files may contain sensitive operational or personnel information. This increases the risk of unintended retention, overexposure to other local users or backups, and noncompliant handling of internal business data.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.md (reported line 87)May include surrounding context.

通过 cron 每天自动生成日报:

bash
crontab -e

添加:

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill advertises behavior that requires network access and likely environment interaction, but it declares no explicit tool scope or permissions. This creates a transparency and least-privilege problem: users and the platform cannot clearly evaluate or constrain what the skill is allowed to access before execution.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill explicitly states it will capture XHR API payloads, modify requests, and call the API, but it omits any warning that it is harvesting and replaying authenticated dashboard traffic. In this context, that is dangerous because it may expose internal business data or misuse a user's active session without clear consent or understanding.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Multiple comments and console messages are written only in Chinese, including error and operational output, with no indication that the skill is limited to a Chinese-speaking environment. This creates a language-policy issue because the skill imposes a specific locale on users without opt-in or justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill captures API data from a browser session and persists the resulting dataset and generated report to local files under the user's home directory without any consent prompt, retention control, or data-minimization safeguards. In this context, the report likely contains internal team-efficiency or operational data, so silent persistence increases the risk of unintended disclosure through other local users, backups, logs, or later compromise of the host.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The code captures POST body data from page requests and later sends that payload to another API endpoint using fetch. Although there is some logging for login state and query parameters, there is no user-facing warning, confirmation, or explanatory comment/docstring disclosing that request data may be retransmitted over the network.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The generated report headings and status text are entirely in Chinese string literals, which imposes a specific language on all users. The file provides no opt-in, fallback, or documented justification that this skill is intentionally limited to a Chinese-language audience.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill description and output expectations are entirely specified in Chinese, including that it generates a daily report for management reporting, with no indication that users may select another language. This creates a natural-language locale constraint without explicit opt-in or justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
72% confidence
Finding

The only listed user invocation examples are in Chinese, which may imply the skill expects a specific language for activation. The file does not state that the skill is region-specific or that other languages are also supported, so this can conflict with a language/locale choice policy.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

This JSON file hard-codes human-facing report names and column labels in Chinese throughout the configuration. Because there is no indication that the skill is region-specific or that users can opt into this locale, it may violate the policy against forcing a specific language without user choice.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The error and status messages shown to the user are written only in Chinese, which forces a specific language without opt-in or fallback. This is a natural-language policy concern because the file does not indicate that the skill is intentionally limited to a Chinese-speaking audience.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency uses a caret range (^1.0.0), which allows automatic installation of newer minor/patch releases. This weakens build reproducibility and increases supply-chain risk because a future compromised or breaking upstream release could be pulled in without review.

Content

Scanner excerpt · package.json (reported line 15)May include surrounding context.

json
"config.example.json"
  ],
  "dependencies": {
    "@bondli-skills/shared": "^1.0.0",
    "puppeteer": "^22.0.0",
    "puppeteer-core": "^22.15.0"
  },

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The puppeteer dependency is not pinned and uses a version range (^22.0.0), so installs may resolve to different releases over time. Because puppeteer drives a browser engine and often processes remote content, unexpected upstream changes can increase supply-chain and operational risk.

Content

Scanner excerpt · package.json (reported line 16)May include surrounding context.

json
],
  "dependencies": {
    "@bondli-skills/shared": "^1.0.0",
    "puppeteer": "^22.0.0",
    "puppeteer-core": "^22.15.0"
  },
  "license": "MIT"

Unverifiable Dependency: puppeteer has 1 known advisory(ies) (CVE-2019-5786 (Use-After-Free in puppeteer)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The puppeteer-core dependency is specified with a caret range (^22.15.0), allowing non-deterministic dependency resolution. This creates a supply-chain exposure where a newly published but unreviewed release could be installed automatically.

Content

Scanner excerpt · package.json (reported line 17)May include surrounding context.

json
"dependencies": {
    "@bondli-skills/shared": "^1.0.0",
    "puppeteer": "^22.0.0",
    "puppeteer-core": "^22.15.0"
  },
  "license": "MIT"
}

Static analysis

No suspicious patterns detected.