Back to skill

Security audit

browser-session-archive

Security checks for vulnerabilities and agentic risk

Overview

This skill has a coherent archiving purpose, but it gives browser-session and filesystem access broader than its ChatGPT/Claude share-link description clearly controls.

Install only if you are comfortable enabling Chrome remote debugging and saving complete conversation HTML locally. Use a dedicated Chrome profile with no unrelated logged-in sessions, keep the debug port bound to localhost, pass only intended ChatGPT or Claude share URLs, and avoid using untrusted metadata files with the converter.

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 (4)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/capture-cdp.js:193
Finding

Arbitrary URL Navigation Through an Authenticated Chrome CDP Session

Content
View full analysis
[OUTPUT_DIR]'); console.error('或设置环境变量: TARGET_URL OUTPUT_DIR CHROME_DEBUG_PORT'); process.exit(1); } console.log(`🔍 连接 Chrome 端口 ${DEBUG_PORT}...`); console.log(`🎯 目标: ${TARGET_URL}`); // 获取已打开的页面 let targets; try { targets = await getChromeTargets(); } catch (err) { console.error('❌ 无法连接 Chrome 调试端口:', err.message); console.log('请确保 Chrome 已启动并带有 --remote-debugging-port 参数'); process.exit(1); } // 查找目标页面(精确匹配 URL) let pageTarget = targets.find(t => t.url === TARGET_URL); let isNewTab = false; if (pageTarget) { console.log(`✅ 找到已打开的页面:${pageTarget.title || '(无标题)'}`); } else { // 没有精确匹配,创建新标签页 console.log('📑 创建新标签页...'); pageTarget = await createNewPage(TARGET_URL); isNewTab = true; console.log(`⏳ 等待页面加载...`); await new Promise(r => setTimeout(r, 10000)); const newTargets = await getChromeTargets(); const updatedTarget = newTargets.find(t => t.url === TARGET_URL); if (updatedTarget && updatedTarget.title) { pageTarget = updatedTarget; } } ``` The shell wrapper also forwards the URL without validation: ```bash TARGET_URL="${1:-${TARGET_URL}}" IS_CLAUDE=false if [[ "$TARGET_URL" == *"claude.ai"* ]]; then IS_CLAUDE=true fi CHROME_DEBUG_PORT=$CHROME_DEBUG_PORT TARGET_URL="$TARGET_URL" OUTPUT_DIR="$OUTPUT_DIR" node capture-cdp.js ``` ### Technical Analysis The Skill advertises support for ChatGPT and Claude share URLs, but the implementation does not parse or validate the URL ...[truncated 2157 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/convert-markdown.js:450
Finding

Arbitrary Local File Read and Overwrite Through Untrusted Metadata

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/convert-markdown.js:407
Finding

Page-Controlled Content Is Injected Into YAML Front Matter Without Escaping

Content
View full analysis
([^<]+)<\/title>/i); if (titleTagMatch) { pageTitle = titleTagMatch[1].trim(); } else { const ogTitleMatch = html.match(/
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
SKILL.md:76
Finding

Global Installation of a Non-Lockfile-Pinned Dependency

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (12)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The documented purpose is narrowly scoped to archiving ChatGPT and Claude share links, but the behavior described can capture arbitrary URLs via Chrome CDP and persist full HTML plus metadata. That mismatch is dangerous because users may trust the skill with low-risk public share links while it is technically capable of collecting broader browser-visible content and sensitive session-derived data.

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 93)May include surrounding context.

md
| `capture-cdp.js` | CDP capture script, extracts HTML |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `convert-markdown.js` | HTML to Markdown converter |

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
78% confidence
Finding

The skill advertises executable behavior driven by environment variables but does not declare any explicit tool scope or permissions boundary. In practice, this makes the skill's operational capabilities less transparent to users and auditors, increasing the chance it will run with broader ambient authority than intended.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill instructs users to enable Chrome remote debugging without warning that this interface can expose tabs, cookies, page content, and other browser session data to local or network-adjacent processes. Because the skill is specifically built to drive CDP for content extraction, omission of this risk materially increases the chance of unsafe deployment and unintended data exposure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script saves the full captured HTML of chatgpt.com or claude.ai share pages directly to local disk, which can include sensitive conversation content, embedded metadata, and possibly tokens or identifiers present in the page source. In this skill context, archiving conversations is the intended behavior, but the lack of an explicit consent/warning step and the broad raw-HTML capture increase the risk of unintentionally persisting sensitive data in an accessible filesystem location.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This shell script includes its title, usage text, parameter descriptions, and runtime messages only in Chinese. That creates a language/locale policy concern because the skill forces a specific language for user interaction without offering an opt-in or alternative.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The title and all instructional content are written in Chinese, and the file does not indicate that the skill is region-specific or that other languages are supported. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The script can create and later close Chrome tabs through the local DevTools interface without an upfront warning, which gives it the ability to modify the user's active browser session state. In this skill context that behavior is functional rather than overtly malicious, but using CDP against an existing browser session is powerful and could surprise users or affect unrelated browsing state if misused or if target matching behaves unexpectedly.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file's usage documentation and later runtime messages are written only in Chinese, which imposes a specific language on users without any opt-in or alternative locale. Under the policy, fixed language behavior without a user choice is a natural-language locale violation unless clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The dependency uses a caret range (^8.20.0) rather than an exact pinned version, which makes builds non-reproducible and can silently pull in different releases over time. In a security-sensitive browser automation/archive skill, that increases supply-chain uncertainty because the exact ws code installed may vary across environments.

Content

Scanner excerpt · scripts/package.json (reported line 14)May include surrounding context.

json
"license": "ISC",
  "type": "commonjs",
  "dependencies": {
    "ws": "^8.20.0"
  }
}

Unverifiable Dependency: ws has 7 known advisory(ies) (CVE-2016-10518 (Remote Memory Disclosure in ws); CVE-2024-37890 (ws affected by a DoS when handling a request with many HTTP headers); CVE-2026-45736 (ws: Uninitialized memory disclosure) +4 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
90% confidence
Finding

The manifest references ws without pinning an exact version, while the package has multiple known advisories across versions. Because this skill uses Chrome DevTools Protocol over WebSocket, ws is directly relevant to core functionality, so an affected installed version could expose the tool to denial of service or memory disclosure issues depending on the runtime path.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.