Back to skill

Security audit

E2E Test Recorder

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real browser/test recording skill, but it ships unsafe command execution, weakened browser isolation, and overbroad release tooling that need review before installation.

Review or patch the Node scripts before installing. Use only sanitized test sites and test accounts, do not record real passwords or private production data, avoid running untrusted JSON configs or media filenames through the CLI, keep Chromium sandboxing enabled unless isolated in a disposable container, pin package versions, and avoid the bundled release scripts unless you understand their GitHub token and force-push behavior.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (8)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/deploy.js:47
Finding

OS Command Injection Through Deployment Inputs

Content
View full analysis
input.includes('github.com') || '请输入有效的GitHub URL' }, { type: 'input', name: 'repoName', message: '仓库名称 (用于README):', default: 'e2e-test-recorder' } ]); execSync(`git remote add origin ${answers.repoUrl}`, { stdio: 'inherit' }); ``` ### Technical Analysis The deployment workflow inserts interactive input directly into shell command strings executed by `execSync`. Node.js invokes these strings through a shell, so quotes, separators, command substitutions, redirections, and other shell syntax are interpreted rather than treated as literal Git arguments. The repository URL validation only checks whether the input contains the substring `github.com`. It does not parse the URL, verify the hostname, or reject shell metacharacters. The commit message is not validated at all. Enclosing the commit message in double quotes is insufficient because an attacker can supply a closing quote or command substitution syntax. ### Attack Path 1. An attacker convinces a user to run `node scripts/deploy.js` with attacker-supplied deployment values. 2. The attacker supplies a repository value containing `github.com` followed by shell syntax, or supplies a malicious commit message. 3. The substring-based URL validation accepts the repository value. 4. `execSync` passes the assembled string to the operating-system shel ...[truncated 647 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/utils.js:303
Finding

OS Command Injection Through Media File Paths

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/record-browser.js:48
Finding

Chromium Sandbox Disabled for Arbitrary Web Content

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/record-browser.js:269
Finding

Arbitrary JavaScript Execution From Declarative Test Configuration

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/record-test.js:213
Finding

Script and Markup Injection in Generated API Test Page

Content
View full analysis
📍 ${apiUrl}
${test.name}
${test.endpoint}
${test.method}
${test.expectedStatus}
``` ```javascript ``` ### Technical Analysis Configuration values are inserted into both HTML and JavaScript contexts without context-specific escaping. Fields such as `apiUrl`, test names, endpoints, and methods can terminate their intended context and inject markup or executable script. `JSON.stringify` alone is not safe when serialized content is embedded directly inside an HTML `
Remediation
View remediation
`, `&`, and script-closing sequences. - Use a well-reviewed context-aware escaping library if templates remain necessary. - Parse and validate `apiUrl` with the `URL` class. - Allowlist HTTP methods and permitted URL schemes. - Consider restricting destination hosts or requiring confirmation before requests to loopback, private, link-local, and metadata address ranges. - Apply a restrictive Content Security Policy to the generated page. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/utils.js:303
Finding

Unsafe Evaluation of FFprobe Frame-Rate Data

Content
View full analysis
({ type: stream.codec_type, codec: stream.codec_name, width: stream.width, height: stream.height, fps: stream.r_frame_rate ? eval(stream.r_frame_rate) : null })) }; ``` ### Technical Analysis The code evaluates `r_frame_rate` as JavaScript solely to calculate a fraction such as `30/1`. `eval` treats its input as executable source rather than numeric data. The value originates in output from an external parser operating on a potentially untrusted media file. Even if normal FFprobe output is numeric, relying on that behavior instead of enforcing a numeric grammar creates an unnecessary code-execution sink. The separate shell injection in the FFprobe invocation further weakens the trust boundary around this data flow. ### Attack Path 1. A user probes or converts an attacker-supplied media file. 2. FFprobe produces stream metadata consumed by the application. 3. An unexpected or attacker-influenced `r_frame_rate` value reaches the mapping operation. 4. `eval` interprets the value as JavaScript. 5. Any executable expression accepted at this sink runs in the Node.js process. ### Impact Assessment If a non-numeric expression reaches the sink, it executes with the full privileges of the Node.js process, potentially allowing access to local files, environment variables, recordings, and network resources. ]]>
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/github-api-release.js:17
Finding

Release Scripts Access and Propagate an External GitHub Token

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
INSTALLATION.md:12
Finding

Installation Guidance Persistently Replaces the npm Registry

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (65)

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

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

Content

Scanner excerpt · GITHUB_SETUP.md (reported line 17)May include surrounding context.

配置SSH密钥(推荐)

ssh-keygen -t ed25519 -C "your.email@example.com"

将公钥(~/.ssh/id_ed25519.pub)添加到GitHub: Settings → SSH and GPG keys

text

### 3. GitHub访问令牌

Credential Access

High
Category
Privilege Escalation
Confidence
78% confidence
Finding

The guide recommends creating a classic GitHub personal access token with broad scopes including repo, workflow, and package permissions. Over-scoped long-lived tokens increase the blast radius if leaked, especially in setup guides where users may create more privilege than needed for a simple repository push.

Content

Scanner excerpt · GITHUB_SETUP.md (reported line 23)May include surrounding context.

3. GitHub访问令牌

bash
# 如果需要使用HTTPS,创建访问令牌
# GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
# 勾选权限: repo, workflow, write:packages, read:packages, delete:packages

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
83% confidence
Finding

Using git pull origin main --allow-unrelated-histories suppresses an important Git safety check and can merge unrelated repository histories. In setup documentation, this can cause users to combine the wrong remote content with their local repository, potentially importing unintended files, workflows, or code without proper review.

Content

Scanner excerpt · GITHUB_SETUP.md (reported line 85)May include surrounding context.

1. 拉取远程更改(如果是新仓库,可以跳过)

bash
git pull origin main --allow-unrelated-histories

2. 推送代码

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · scripts/deploy.js (reported line 196)May include surrounding context.

js
execSync('git pull origin main --rebase || git pull origin master --rebase', { stdio: 'inherit' });
      
      // 推送更改
      execSync('git push -u origin main || git push -u origin master', { stdio: 'inherit' });
      
      console.log(chalk.green('✅ 成功推送到GitHub'));
      return true;

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

This script offers and executes a force-push (git push --force) to the configured remote, which can overwrite remote history and destroy collaborators' commits. In a deployment helper, this is especially dangerous because users may approve it under failure conditions without understanding the full consequence, and a misconfigured or malicious origin could cause destructive publication to the wrong repository.

Content

Scanner excerpt · scripts/deploy.js (reported line 213)May include surrounding context.

js
]);
      
      if (forcePush) {
        execSync('git push -u origin main --force || git push -u origin master --force', { stdio: 'inherit' });
        console.log(chalk.green('✅ 强制推送完成'));
        return true;
      }

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The publishing guide promotes browser and test recording capabilities without warning that recordings may capture credentials, session tokens, personal data, internal URLs, or other sensitive on-screen content. In the context of an E2E recording skill, omission of privacy and data-handling cautions increases the chance that users will create, store, or publish sensitive artifacts unintentionally.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The usage examples encourage recording web interactions and end-to-end tests but provide no warning that the resulting media may contain passwords, MFA prompts, personal information, cookies, internal application state, or proprietary test data. Because this skill is specifically intended to capture browser activity, the lack of contextual safeguards makes accidental data exposure more likely.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This markdown file presents all operational guidance in Chinese and gives no indication that another language is available or that the user can opt into this locale. Under the stated policy, forcing a specific language without user choice is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown guidance forces a specific language/locale for all users, and the file does not indicate that Chinese is optional or that alternative languages are available. Under the policy, language constraints should be user-selectable or explicitly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file contains end-user instructions only in Chinese, including the title, setup steps, troubleshooting, and warnings. Under the language/locale policy, forcing a specific language without user opt-in or justification is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The README promotes browser, screen, and API recording features but does not warn that recordings may capture sensitive information such as credentials, tokens, personal data, or internal system details. For a recording tool, omission of privacy and handling guidance materially increases the chance that users will collect and retain sensitive data insecurely. The risk is amplified because examples include login flows and API interactions.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The README instructs users to run npx e2e-test without pinning a specific package version. npx may fetch the latest published package at execution time, creating a supply-chain risk where users could unknowingly run a compromised or unexpected version. In the context of a test recorder that drives browsers and accesses local files, this increases exposure because the invoked package may execute with developer or CI permissions.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

This command again uses npx e2e-test without a pinned version, which can pull and execute whatever version is currently published. That creates a real supply-chain execution risk, especially for a tool intended to run automated browser tests that may handle credentials, session cookies, and internal URLs. The README normalizes unsafe installation/execution practice for users and CI systems.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The unpinned npx e2e-test invocation exposes users to accidental execution of a malicious or breaking package version from the registry. Because the surrounding project records browser and API interactions, compromise could lead to theft of captured data, tampering with recordings, or arbitrary code execution in developer or CI environments. This is a legitimate security weakness in the published usage guidance.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

Using npx e2e-test without a fixed version leaves command behavior dependent on the current registry state. If the package is hijacked, typo-squatted, or updated with malicious code, users may run untrusted code directly from documentation examples. In a CI or automation setting, that can expose secrets, modify test environments, or leak recorded artifacts.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The CI example uploads generated recordings as artifacts without warning that those files may contain secrets, session data, or other sensitive content. In practice, automated uploads can distribute sensitive recordings to broader audiences or longer retention than intended, especially in shared CI environments. Because this project explicitly records browser and API activity, the lack of caution is security-relevant rather than merely editorial.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file presents all release and usage guidance in a single language and does not provide any user opt-in, alternative locale, or justification for the language restriction. Under the policy rule, forcing a specific language without user choice is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The documentation promotes screen/browser recording and saving output files but does not warn that recordings can capture sensitive information such as credentials, session tokens, personal data, internal dashboards, or other on-screen secrets. In a testing/demo skill, this omission increases the chance users will record real environments and persist sensitive artifacts to disk or share them externally.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The examples include plaintext passwords and registration data while the skill is specifically designed to record interactions, which can normalize entering real credentials into a recorder workflow. Without a warning to use fake/test data only, users may expose credentials or personal data in video files, logs, and shared test artifacts.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

This JavaScript file presents its title, prompts, status messages, and interactive CLI text in Chinese throughout, starting from the header comments and continuing in runtime output. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is clearly documented and justified, which is not present here.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dangerous_exec, suspicious.dynamic_code_execution, suspicious.exposed_secret_literal

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/auto-release.js:45

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/deploy.js:23

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/github-api-release.js:162

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
simple-test.js:55

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/utils.js:316

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
scripts/auto-release.js:27

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
scripts/github-api-release.js:199