Back to skill

Security audit

Buffer

Security checks for vulnerabilities and agentic risk

Overview

The skill is a disclosed Buffer integration with real automation and credential trust requirements, but the artifacts do not show hidden, deceptive, or destructive behavior.

Install this only if you trust Maton as the authentication gateway for your Buffer account. Use OAuth when possible, approve every write or public post, specify the intended Buffer connection, and use a dedicated low-scope Maton account for hosted functions. Avoid raw API keys unless the CLI cannot be used, and do not create persistent trigger destinations to third-party hosts unless you explicitly approve the exact data flow.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (2)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:194
Finding
Hosted Functions Inherit Account-Wide Maton Authority## Vulnerability Details **File Location**: `SKILL.md`, lines 194–218 and 546–548 **Vulnerability Type**: Excessive runtime privileges and insufficient authorization isolation **Risk Level**: Medium ### Vulnerable Code ```text Execution identity. A function runs as the Maton account that deployed it — the same identity as the `maton` CLI session that performed the deploy, no more and no less. It receives that identity as a runtime-injected `MATON_API_KEY`: the key is placed in the sandbox's environment only while the function runs, is never stored in the package or the code, is never set through `function env`, and only the authenticated account owner can create, deploy, or update a function. Functions are `PRIVATE` unless the user chooses otherwise. Outbound network access is a platform-enforced setting, not a handler decision: with `--network-policy DENY_ALL` the sandbox cannot open any outbound connection regardless of what the code does, and that is the policy every example here uses. Opening the network is the exception, made per function, only when the user has named the hosts the code must reach and approved it. Before any deploy or invocation, give the user a least-privilege summary and get approval on it: the handler (which they wrote or reviewed — never deploy code they did not), the connections the deploying account holds (`maton connection list`), which is exactly what the function will be able to reach, and the network policy. Prefer an account whose connections are only the ones the function needs. ``` ```text The sandbox sees the variables from `function env` plus the runtime-injected `MATON_API_KEY` that carries the deploying account's identity (see [Functions](#functions)). The same applies when the function runs as a trigger destination. ``` ### Technical Analysis A hosted function intended to perform a narrow Buffer operation receives the identity of the entire deploying Maton account through the runtime-injected `MATON_API_KEY`. There ...[truncated 2190 chars]
Remediation
## Remediation Suggestions 1. Replace the account-level runtime credential with a function-specific, short-lived token. 2. Require each function deployment to declare an explicit allowlist containing: - The permitted application, such as `buffer`. - The exact connection identifier. - The allowed endpoint, such as `/buffer/`. - The permitted GraphQL operations or operation classes. - Whether read or mutation access is required. 3. Enforce the allowlist at the Maton gateway rather than relying on handler logic or written policy. 4. Default functions to read-only access and require separate approval for mutation privileges. 5. Prevent a trigger destination from increasing the function's authorization scope. 6. Record and expose an auditable permission manifest during deployment and invocation. 7. Retain `DENY_ALL` as the default network policy, but do not treat it as a substitute for API-level authorization isolation. 8. Revoke function credentials automatically when the function is deleted or the associated automation ends. 9. Until technical isolation is available, use a dedicated Maton account containing only the single Buffer connection required by the function.

T08 · Insecure Dependencies

Warning
Location
SKILL.md:40
Finding
Credential-Bearing Dependencies Are Installed Without Artifact Integrity Verification## Vulnerability Details **File Location**: `SKILL.md`, lines 40–50 and 1333–1353 **Vulnerability Type**: Unverified third-party dependency installation **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 related installation guidance states: ```text Versions are pinned to the release this skill was reviewed against. Upgrade deliberately - check the release notes, then move the pin - rather than by re-running an unpinned install. Homebrew cannot select a version from a tap, so `brew pin maton` holds the installed build until you choose to upgrade; `maton-ai/cli` is Maton's own tap. ``` ### Technical Analysis The dependencies are version-pinned, which reduces accidental upgrades but does not authenticate the downloaded artifact. The instructions do not provide or verify a checksum, cryptographic signature, immutable package digest, signed provenance statement, or reproducible-build result. This is particularly sensitive because the installed CLI and SDK authenticate users, access stored OAuth sessions or API keys, transmit connected-service data, and deploy hosted functions. Compromise of the package registry, custom Homebrew tap, publisher account, release artifact, or dependency graph could therefore introduce code with direct access to valuable credentials and data. `brew pin maton` only prevents later upgrades after installation. It does not ensure that the initially installed package is the reviewed artifact. ### Attack Path 1. An attacker compromises a package publisher account, registry entry, custom Homebrew tap, release pipeline, or transitive dependency. 2. A malicious artifact is published under the expected pinned version or delivered by the custom tap. 3. A user follows the Skill instructions and installs the package. 4. Installation hooks or runtime code exe ...[truncated 1115 chars]
Remediation
## Remediation Suggestions 1. Publish SHA-256 or stronger checksums for every reviewed CLI and SDK artifact. 2. Provide cryptographic signatures and verify them before installation. 3. Publish signed supply-chain provenance, such as SLSA-compatible attestations, linked to source revisions and build workflows. 4. Use immutable artifact references or package digests where supported. 5. Document verification commands for NPM, Python, and Homebrew installation paths. 6. Pin and audit transitive dependencies through lockfiles or verified release bundles. 7. Avoid global installation unless required; prefer an isolated virtual environment, container, or dedicated package prefix. 8. For Homebrew, pin the formula source revision and bottle checksum before installation rather than relying only on `brew pin` afterward. 9. Use package-manager features that disable unnecessary lifecycle scripts where compatible. 10. Publish a minimal software bill of materials for the reviewed releases. 11. Require deliberate re-verification of signatures, checksums, provenance, and release notes before changing any pinned version.
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.