Back to skill

Security audit

Article Publisher

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it says, but it can publish publicly across logged-in accounts and stores reusable login cookies locally with weak protection.

Review carefully before installing. Use this only for accounts where automated publishing is acceptable, prefer testMode first, confirm every target platform manually before live publishing, and avoid using publish_to_all for sensitive or brand accounts. Treat data/cookies as bearer credentials: keep the working directory private, do not sync or commit it, and clear cookies with logout when done. Prefer official registries/download sources and pinned dependency installs instead of the mirror/npx guidance where possible.

Vulnerability Patterns
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
src/lib/cookie-manager.ts:19
Finding

Authentication Cookies Are Stored in Plaintext Without Restrictive File Permissions

Content
View full analysis
{ ensureCookieDir(); const config = getConfig(); const now = new Date(); const expiresAt = new Date(now.getTime() + config.cookieExpiryDays * 24 * 60 * 60 * 1000); const cookieData: CookieData = { cookies, createdAt: now.toISOString(), expiresAt: expiresAt.toISOString(), }; const cookiePath = getCookiePath(this.platform); fs.writeFileSync(cookiePath, JSON.stringify(cookieData, null, 2), 'utf-8'); } ``` ```ts // src/lib/config.ts:16-21 const defaultConfig: Config = { cookieDir: path.join(process.cwd(), 'data', 'cookies'), cookieExpiryDays: 30, headless: false, timeout: 60000, slowMo: 100, }; ``` ```ts // src/lib/config.ts:45-48 export function ensureCookieDir(): string { const config = getConfig(); if (!fs.existsSync(config.cookieDir)) { fs.mkdirSync(config.cookieDir, { recursive: true }); } ``` ### Technical Analysis The application persists complete Playwright session cookies as unencrypted, human-readable JSON. These cookies may contain bearer credentials that allow an authenticated browser session to be reconstructed without knowing the user's password or repeating QR-code authentication. Neither `mkdirSync` nor `writeFileSync` specifies a restrictive permission mode. Effective permissions therefore depend on the process umask. On common Unix-like configurations, the directory may be created as `0755` and the cookie files as `0644`, potentially allowing other local users to discover and read the stored credentials. The cookie directory is also based on `process.cwd()`. If the application is launc ...[truncated 1759 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
package.json:8
Finding

Installation Guidance Uses Third-Party Mirrors Without Project-Level Integrity Pinning

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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (27)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `src/index.ts` - 主入口文件

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.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrase 帮我发布文章 is broad and can match ordinary conversation without sufficient confirmation of target platform, account, or content scope. In a skill that automates posting across authenticated media accounts using persisted cookies, ambiguous activation can lead to unintended publication, reputational damage, or accidental cross-account actions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger 一键发布到所有平台 authorizes a broad, high-impact action across multiple logged-in accounts with minimal specificity. Given the skill's context of browser automation plus cookie persistence, accidental or adversarial invocation could mass-post content to all connected platforms, amplifying harm across brands, audiences, and accounts.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The install script invokes npx playwright install chromium, which can resolve and execute a package version at runtime rather than a fully pinned artifact. In a tool that automates browser actions and persists login state, relying on unpinned runtime package resolution increases supply-chain risk and could lead to installation or execution of an unexpected Playwright version.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

This script combines a custom download host (PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright) with npx playwright install chromium, creating additional supply-chain exposure because browser binaries are fetched from a mirror rather than the default trusted source. In a browser automation skill that handles authentication cookies and QR-code login, a compromised or tampered browser download could expose credentials or session data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The adapter invokes the publish button automatically in normal mode without any explicit runtime confirmation from the user immediately before the irreversible action. In a multi-platform auto-publishing skill, this increases the chance of accidental or unauthorized publication if upstream inputs, agent behavior, or state handling are wrong, especially because the code also auto-fills content and proceeds after login/cookie reuse.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file’s comments, log messages, prompts, and status text are written entirely in Chinese, including user-facing instructions such as login and test-mode guidance. This imposes a specific language on users without any opt-in, fallback, or documented justification that the skill is intentionally limited to Chinese-speaking or region-specific use.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The adapter performs a real publication immediately after filling content unless testMode is enabled, and there is no explicit runtime confirmation or approval gate right before the live clickPublish() action. In an automation tool that posts to external platforms, this creates a meaningful risk of accidental publication of draft, incorrect, or sensitive content if the caller invokes the method unintentionally or with bad inputs.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This code contains user-facing console output in Chinese and continues that pattern throughout the file, effectively forcing a specific language/locale for interaction. The policy allows locale constraints only when opt-in or clearly justified, which is not present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file's comments and user-facing console messages are entirely in Chinese, including operational prompts such as login and publish-flow guidance. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation unless the constraint is explicitly documented and justified, which is not present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

This TypeScript skill file presents its tool definitions, parameter descriptions, and runtime result messages entirely in Chinese, and also includes locale-specific installation guidance for China mirrors. Under the policy for natural-language violations, forcing a specific language without user opt-in is reportable unless the locale constraint is explicitly justified, which is not done here.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The code persists authenticated browser cookies to disk after login, which creates a reusable session artifact. In a browser automation tool that logs into publishing platforms, stolen or improperly protected cookie files could let another local user or malware hijack the account without re-authentication.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This code persists cookie contents to a local file via writeFileSync, which is a safety-relevant file write involving sensitive authentication data. While comments describe the function internally, there is no user-facing prompt, warning, or disclosure in this file indicating that cookies will be stored on disk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The manifest description is written only in Chinese ("自媒体文章多平台发布工具"), which can constitute a language/locale policy issue when no opt-in, alternative locale, or justification is provided. Because this is user-facing natural language in a manifest file, it may exclude users who expect neutral or selectable language behavior.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
"install:browser:cn": "cross-env PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright npx playwright install chromium"
  },
  "dependencies": {
    "playwright": "^1.40.0"
  },
  "devDependencies": {
    "cross-env": "^7.0.3"

Unverifiable Dependency: playwright has 1 known advisory(ies) (CVE-2025-59288 (Playwright downloads and installs browsers without verifying the authenticity of)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
87% confidence
Finding

The manifest depends on playwright, and the analysis notes a known advisory related to browser downloads without authenticity verification, while the version is not pinned tightly enough to determine exposure. In this skill's context, that matters more because the software downloads browser binaries and then uses them for automated login and publishing workflows, potentially exposing accounts, cookies, and published content if the browser supply chain is compromised.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
"playwright": "^1.40.0"
  },
  "devDependencies": {
    "cross-env": "^7.0.3"
  },
  "engines": {
    "node": ">=18.0.0"

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

The file's comments and user-visible console messages are written exclusively in Chinese, including login and publishing instructions. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy concern unless the locale restriction is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The natural-language comments and descriptions are written only in Chinese, which can reflect a language-specific constraint without indicating user choice or a justified locale limitation. Under the policy rule, forcing a specific language without opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

Multiple comments and console messages are written only in Chinese, indicating the skill's user-facing output is tied to a specific language. The file does not provide a user opt-in, fallback language, or justification for a Chinese-only locale constraint.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The screenshot method writes a full-page image to the provided path, which may capture sensitive on-screen content and store it on disk. The code performs the write silently, with no visible prompt, warning, or log explaining that data is being saved.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The comment uses Chinese-language labeling ('Cookie管理器'), and similar Chinese-only comments appear throughout the file. Under the stated policy, forcing a specific language without offering choice or documenting a justified locale constraint can be a natural-language policy violation.

Content

No source excerpt is available for this finding.