Back to skill

Security audit

Amazon Screenshot

Security checks for vulnerabilities and agentic risk

Overview

This skill performs the advertised Amazon screenshot workflow, but it embeds a mail account password and uses persistent logged-in browser state plus anti-detection automation.

Do not install this as-is unless you trust the publisher and environment. The SMTP credential should be revoked and moved to a secret store, the browser profile should be isolated or ephemeral unless users explicitly opt in, anti-detection/CAPTCHA bypass behavior should be removed or formally approved, recipient and batching rules should be clarified, and dependencies should be updated before use.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/screenshot.js:48
Finding

Hard-Coded SMTP Credentials Exposed in Source Code

Content
View full analysis
' }; ``` The exposed password is subsequently supplied to Nodemailer at lines 198–207: ```js const transporter = nodemailer.createTransport({ host: EMAIL_CONFIG.host, port: EMAIL_CONFIG.port, secure: EMAIL_CONFIG.secure, auth: { user: EMAIL_CONFIG.user, pass: EMAIL_CONFIG.pass } }); ``` ### Technical Analysis The SMTP username and password are embedded directly in a distributable JavaScript file. Source-code access is therefore sufficient to recover the credentials; no execution, decryption, or privileged system access is required. The application's recipient-domain validation does not protect the SMTP account itself. An attacker can extract the credentials and connect to `smtp.feishu.cn` using a separate SMTP client, bypassing all restrictions implemented by `validateEmail()` and the remainder of the Skill. If the exposed credentials remain valid, the attacker can exercise whatever SMTP permissions the account grants. Secrets committed to source code can also remain recoverable from previously distributed packages, backups, caches, or version-control history after the current file is edited. ### Attack Path 1. Obtain read access to the Skill package or a copy of its source code. 2. Open `scripts/screenshot.js` and extract the SMTP host, port, username, and password from `EMAIL_CONFIG`. 3. Configure an independent SMTP client to connect to `smtp.feishu.cn` on port 465 using TLS. 4. Authenticate as `moss@campsnail.com` with the exposed password. 5. If the credentials are valid, send email independently of the Skill and bypass its `@campsnail.com` recipient restri ...[truncated 841 chars]
Remediation
View remediation
' }; ``` 3. **Use a secret manager where available**, granting access only to the dedicated runtime identity that executes this Skill. 4. **Remove the credential from repository history, published artifacts, backups, and cached build outputs** where operationally possible. Merely changing the current file does not invalidate previously exposed copies. 5. **Apply least privilege to the SMTP account**, including sender and recipient restrictions enforced by the mail service rather than only by client-side code. 6. **Use a dedicated application credential** instead of a reusable interactive-account password. 7. **Enable monitoring and rate limits** for abnormal login locations, excessive message volume, unusual recipients, and authentication failures. 8. **Review password reuse** and rotate credentials for any other service where the exposed password was used. 9. **Add automated secret scanning** to development and release pipelines to block future plaintext credentials from being committed or packaged. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (26)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The documented behavior includes stealth automation to evade detection, persistent profile reuse containing cookies/address data, and X11 display discovery/access, none of which are transparently disclosed in the top-level purpose. These hidden capabilities materially expand the trust boundary: they can reuse authenticated local sessions, access host display resources, and bypass anti-bot controls, creating privacy, policy, and system access risks.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: nodemailer==8.0.7 — 8 advisory(ies): CVE-2026-82661 (Nodemailer: CRLF injection in Nodemailer List-* header comments allows arbitrary); GHSA-2x7j-588g-ccc2 (Nodemailer: Quadratic (O(n²)) time complexity in addressparser allows remote den); GHSA-8m3c-c648-2xjj (Nodemailer: resolveContent() on a MailMessage bypasses disableFileAccess/disable) +5 more

High
Category
Supply Chain
Confidence
92% confidence
Finding

Using nodemailer 8.0.7 is a true vulnerability because the package version is identified as having multiple published advisories, including header injection, denial-of-service, and file/content access bypass issues. In a skill that sends ZIP attachments to user-supplied email destinations, a vulnerable mail library increases the risk of abuse through crafted input, mail header manipulation, or unintended file/content handling.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: nodemailer==8.0.7 — 8 advisory(ies): CVE-2026-82661 (Nodemailer: CRLF injection in Nodemailer List-* header comments allows arbitrary); GHSA-2x7j-588g-ccc2 (Nodemailer: Quadratic (O(n²)) time complexity in addressparser allows remote den); GHSA-8m3c-c648-2xjj (Nodemailer: resolveContent() on a MailMessage bypasses disableFileAccess/disable) +5 more

High
Category
Supply Chain
Confidence
99% confidence
Finding

The manifest explicitly depends on nodemailer 8.0.7, which the finding states has multiple published advisories, including CRLF injection and content resolution/security control bypass issues. In this skill, Nodemailer is used to send output to user-provided email addresses, so a vulnerable mail library can directly affect a network-exposed workflow handling attacker-influenced input, increasing the chance of header injection, denial of service, or policy bypass.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: brace-expansion==5.0.6 — 3 advisory(ies): CVE-2026-13149 (brace-expansion: DoS via exponential-time expansion of consecutive non-expanding); CVE-2026-14257 (brace-expansion: DoS via unbounded expansion length causing an out-of-memory pro); CVE-2026-69152 (brace-expansion: DoS via unbounded intermediate arrays, bypassing the CVE-2026-1)

High
Category
Supply Chain
Confidence
89% confidence
Finding

The lockfile pins brace-expansion 5.0.6, which the finding reports as affected by multiple denial-of-service issues involving pathological brace parsing and excessive expansion. In this skill, the package is only a transitive dependency used for globbing during ZIP/archive operations, so exploitability depends on attacker control over archive input patterns; that makes it a real supply-chain weakness, but with more limited practical impact than if it directly parsed untrusted user input.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: nanoid==5.1.11 — 1 advisory(ies): CVE-2026-67214 (nanoid: non-secure generators can loop indefinitely with negative size)

High
Category
Supply Chain
Confidence
81% confidence
Finding

The lockfile includes nanoid 5.1.11, which the finding reports as vulnerable to an infinite loop when non-secure generators are called with a negative size. This appears to be a real dependency issue, but in this screenshot skill nanoid is a transitive dependency of docx and there is no evidence in this file that untrusted input reaches the vulnerable API, so the main risk is application hang rather than data compromise.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script injects stealth code to hide browser automation fingerprints and modifies navigator/window properties specifically to evade bot detection. In the context of a screenshot tool, this exceeds the stated purpose and facilitates deceptive automated access to a third-party site, including attempted CAPTCHA/workflow bypass.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

Hardcoded SMTP credentials expose a reusable mail account secret directly in source code, enabling unauthorized email sending if the code is accessed. The same block also automates exfiltration of generated screenshots via email without strong safety disclosure or secret management controls.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
79% confidence
Finding

The skill declares no explicit tool scope while documenting capabilities that imply local file access, environment inspection, browser/session reuse, and email delivery. Missing permission boundaries increases the risk of over-broad execution and makes it harder for reviewers and users to understand or constrain what the skill can access.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill claims it will send screenshots to a user-provided Feishu email, but the actual documented restriction allows only @campsnail.com recipients. This discrepancy can mislead users about where data can be sent and who can receive potentially sensitive screenshots, undermining informed consent and safe handling expectations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill routes screenshots through a shared MOSS mailbox before delivery, but the description does not clearly frame this as third-party/shared-channel handling of user data. That matters because screenshots may contain account-specific or sensitive product/session information, and using a shared mailbox expands data exposure beyond the requesting user.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

L14 says all ASINs are processed into one ZIP and one email, but the example at L31 states the provided ASIN list will be split into two batches and sent as two emails. These statements describe incompatible behavior, so the skill's documented intent is internally inconsistent about what it actually does.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Reusing a persistent browser profile means the skill may operate with existing cookies, account state, and saved shipping/address information from prior sessions. In this context, that is especially dangerous because the skill automates a live browser on a shared host and can capture or act within an authenticated Amazon session without a prominent privacy warning or isolation controls.

Content

No source excerpt is available for this finding.

Ae2

Medium
Category
analysis-evasion
Confidence
90% confidence
Finding

Artifact content does not match its filename extension

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The dependency on a stealth plugin is a real security concern in this context because the skill explicitly claims to auto-click human verification and bypass bot detection for Amazon pages. That behavior exceeds a normal screenshot utility and indicates anti-detection/evasion capability that can be misused for scraping, CAPTCHA circumvention, or violating platform protections.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The injected stealth script overrides navigator.languages to ['en-US', 'en'], forcing an English/US locale regardless of user preference. This is a natural-language/locale policy issue because the skill does not offer opt-in language selection or document a justified region-specific requirement.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

Using a persistent Chrome profile preserves cookies, session tokens, and possibly authenticated state across runs. For a skill that merely captures product-page screenshots, retaining and reusing browser identity is more privileged than necessary and creates risk of unintended access to sensitive account data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

A persistent browser profile may contain stored logins, cookies, browsing history, and other sensitive session artifacts, yet the skill does not warn users that it reuses or depends on such data. This creates privacy and account-access risk if the profile is shared, compromised, or used outside the expected scope.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The skill executes an external shell command that runs embedded Python to inspect /tmp/.X11-unix and infer the active display for another user's Chrome session. This expands the tool's access beyond simple screenshot capture and can enable piggybacking on an existing GUI/session without clear authorization boundaries.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The implementation contradicts the declared behavior by rejecting any recipient outside @campsnail.com, while the skill description says results are sent to a user-provided Feishu email. This hidden restriction can mislead users about where data will be delivered and indicates undisclosed internal-only routing of collected screenshots.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
71% confidence
Finding

The file states that only @campsnail.com email addresses are supported and all others are refused. This imposes an organizational/language-style constraint without explaining the policy basis or offering user choice, which can be a natural-language policy concern under the locale/constraint rule.

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

json
{
  "dependencies": {
    "nodemailer": "^8.0.7",
    "playwright": "^1.59.1",
    "playwright-extra": "^4.3.6",
    "playwright-extra-plugin-stealth": "^0.0.1"

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

json
{
  "dependencies": {
    "nodemailer": "^8.0.7",
    "playwright": "^1.59.1",
    "playwright-extra": "^4.3.6",
    "playwright-extra-plugin-stealth": "^0.0.1"
  }

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

json
"dependencies": {
    "nodemailer": "^8.0.7",
    "playwright": "^1.59.1",
    "playwright-extra": "^4.3.6",
    "playwright-extra-plugin-stealth": "^0.0.1"
  }
}

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

json
"nodemailer": "^8.0.7",
    "playwright": "^1.59.1",
    "playwright-extra": "^4.3.6",
    "playwright-extra-plugin-stealth": "^0.0.1"
  }
}

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 · scripts/package.json (reported line 13)May include surrounding context.

json
"author": "",
  "license": "ISC",
  "dependencies": {
    "archiver": "^8.0.0",
    "docx": "^9.6.1"
  }
}