Back to skill

Security audit

Flashrev Mailer Notion Tracker

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it says: it logs FlashRev email send records into a user-configured Notion database, with some privacy and dependency-installation cautions.

Install only if you are comfortable copying campaign email metadata and a 300-character body preview into Notion. Use a Notion integration limited to the intended database, avoid logging sensitive campaigns unless appropriate, and prefer a pinned dependency plus package-lock.json or npm ci before broader use.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
scripts/package.json:6
Finding
Non-Reproducible npm Installation Uses an Unlocked Dependency Range<![CDATA[ ## Vulnerability Details **File Locations**: - `SKILL.md`, lines 37-40 - `scripts/package.json`, lines 6-8 **Vulnerability Type**: Unlocked and mutable third-party dependency installation **Risk Level**: Medium ### Vulnerable Code `SKILL.md`, lines 37-40: ```bash ### Step 1 — Install dependencies (first use only) ```bash cd scripts && npm install && cd .. ``` ``` `scripts/package.json`, lines 6-8: ```json "dependencies": { "@notionhq/client": "^2.2.15" } ``` ### Technical Analysis The documented installation procedure runs `npm install`, but the project does not include a package lockfile. In addition, the caret version constraint (`^2.2.15`) permits npm to install later compatible releases of `@notionhq/client`. Transitive dependencies are likewise not fixed by the audited artifact. As a result, installation is not reproducible: users can receive dependency code that differs from the code available when the Skill was reviewed. npm installation can also execute package lifecycle scripts unless they are explicitly disabled. There is no evidence in the audited project that `@notionhq/client` is currently malicious, typosquatted, or obtained from an unsafe registry. The vulnerability is the absence of dependency integrity controls, which increases exposure to a future compromised release, compromised transitive dependency, registry attack, or malicious lifecycle script. ### Attack Path 1. An attacker compromises a future package release or a transitive dependency allowed by the unresolved dependency graph. 2. A user follows the Skill documentation and runs `npm install` in the `scripts` directory. 3. npm resolves the mutable dependency graph and downloads the compromised package version. 4. Malicious code executes during an npm lifecycle hook or when `notion-push.js` imports and uses the package. 5. The dependency executes with the privileges of the user running the Skill and may access the process environment, filesystem resources available ...[truncated 679 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace the caret dependency range with an exact, reviewed version: ```json "dependencies": { "@notionhq/client": "2.2.15" } ``` 2. Generate and commit a reviewed `package-lock.json` so direct and transitive dependency versions and integrity hashes are fixed. 3. Change the documented installation command from `npm install` to the reproducible installation command: ```bash cd scripts && npm ci && cd .. ``` 4. If dependency lifecycle scripts are not required, disable them during installation: ```bash cd scripts && npm ci --ignore-scripts && cd .. ``` 5. Review the resolved dependency tree and lifecycle scripts before publishing updates. Use dependency vulnerability scanning and automated update review rather than accepting unreviewed versions automatically. 6. Run installation and the tracker under a minimally privileged account. Restrict the Notion integration to only the database required by this Skill, limiting the impact of possible credential compromise. ]]>
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 Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (8)

Missing User Warnings

High
Confidence
95% confidence
Finding
The skill sends detailed email records to Notion, including recipient addresses, subject lines, body previews, timestamps, and error details, but it does not clearly disclose that this data is being transmitted to a third-party service. This is dangerous because users may unknowingly export personal, confidential, or regulated communications data outside the primary mail workflow, creating privacy, compliance, and data leakage risk.

Ae1

High
Category
analysis-evasion
Content
node scripts/notion-push.js --campaign CAMPAIGN_ID
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
node scripts/notion-push.js --campaign CAMPAIGN_ID
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
node scripts/notion-push.js --campaign CAMPAIGN_ID
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
node scripts/notion-push.js --campaign CAMPAIGN_ID
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Lp3

Medium
Category
MCP Least Privilege
Confidence
83% confidence
Finding
The skill requires access to sensitive environment-backed configuration (`NOTION_TOKEN`, `NOTION_DATABASE_ID`) and instructs execution of a Node script, but it does not declare an explicit tool scope or permissions boundary. That creates ambiguity about what the skill is allowed to access and makes unintended secret use or over-broad execution harder to audit and constrain.

Vague Triggers

Medium
Confidence
91% confidence
Finding
The trigger language is broad enough to activate on common requests like viewing sent emails, campaign logs, or searching outreach history, which can cause this skill to run in more situations than the user intended. In context, that increases the chance of unnecessary access to email metadata and accidental transmission or processing of sensitive campaign information.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"description": "Pushes FlashRev send-log entries into a Notion database",
  "type": "module",
  "dependencies": {
    "@notionhq/client": "^2.2.15"
  },
  "engines": {
    "node": ">=18"
Confidence
93% confidence
Finding
The dependency uses a caret range (^2.2.15), which allows automatic installation of newer minor and patch versions instead of a fully pinned artifact. This creates supply-chain risk because a compromised upstream release or unexpected behavioral change could be pulled into an environment that handles email audit data and Notion credentials.

Static analysis

No suspicious patterns detected.