Back to skill

Security audit

fastmail

Security checks for vulnerabilities and agentic risk

Overview

This Fastmail skill is a disclosed Maton-based email integration with sensitive capabilities that are mostly gated by explicit user approval.

Install only if you trust Maton with the Fastmail account scopes you grant. Prefer OAuth, use the narrowest Fastmail token scopes available, review every send/delete/automation action before approval, and avoid raw API keys or third-party trigger destinations unless specifically needed.

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
SKILL.md:43
Finding
External Executable Dependencies Installed Without Integrity Verification<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:43-51`, `SKILL.md:1744-1762` **Vulnerability Type**: `T08: Insecure Dependencies` **Risk Level**: Medium ### Vulnerable Code ```bash npm install -g @maton/cli@0.3.1 ``` ```bash brew install maton-ai/cli/maton brew pin maton ``` ```bash pip install 'maton-ai==0.3.1' ``` ```bash npm install @maton/sdk@0.3.1 ``` The SDK examples subsequently import and execute the installed packages: ```python from maton_ai import Maton, login # login() maton = Maton() # maton = Maton(api_key="...") result = maton.api.get("fastmail", "/jmap/session") ``` ```javascript import { Maton, login } from "@maton/sdk"; // await login() const maton = new Maton(); // const maton = new Maton({ apiKey: "..." }); const result = await maton.api.get("fastmail", "/jmap/session"); ``` ### Technical Analysis The Skill instructs users to install executable CLI and SDK packages from npm, PyPI, and a custom Homebrew tap. Package versions are pinned for npm, PyPI, and the SDK examples, which reduces accidental version drift, but the project provides no checksums, signed artifact verification, lockfiles with integrity metadata, or other provenance controls. A version constraint does not ensure that the retrieved artifact is identical to the artifact reviewed for this Skill. A registry account compromise, package replacement, malicious release, or compromised custom tap could cause users to install attacker-controlled code under the expected package name. The Homebrew instructions present an additional reproducibility concern: `brew pin maton` pins the build only after installation. The command does not establish that the installed formula corresponds to the reviewed CLI version. Because the CLI and SDK handle authenticated Maton operations and private Fastmail data, compromise of these dependencies would cross a sensitive trust boundary. ### Attack Path 1. An attacker compromises a package publisher account, registry art ...[truncated 1569 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. **Publish immutable checksums** - Provide SHA-256 hashes for every supported CLI and SDK artifact. - Verify downloaded artifacts against those hashes before installation or execution. 2. **Use signed releases** - Sign release artifacts with a documented signing identity. - Require signature verification and document how users can validate the signer. 3. **Make Homebrew installation reproducible** - Provide an immutable, versioned formula or install from a pinned tap commit. - Verify the formula and downloaded binary checksum before execution. - Do not rely on `brew pin` as artifact-integrity verification. 4. **Add dependency lock and integrity metadata** - Supply Python requirements with hashes, such as a hash-locked requirements file. - Supply npm lockfiles containing resolved versions and integrity values where SDK examples are intended to become projects. - Use immutable package versions and prevent unintended dependency resolution. 5. **Reduce installation privileges** - Avoid global npm installation where practical. - Recommend isolated Python virtual environments and project-local JavaScript dependencies. - Run installation and API operations as a non-administrative user. 6. **Document reviewed provenance** - Identify the exact package versions, release hashes, source commits, and build process reviewed with the Skill. - Provide a reproducible-build or software-bill-of-materials record where possible. 7. **Harden credential exposure** - Continue preferring operating-system credential storage and OAuth. - Ensure child processes, lifecycle scripts, and unrelated plugins cannot inherit long-lived API keys. - Rotate Maton credentials immediately if dependency compromise is suspected. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep

Static analysis

No suspicious patterns detected.