Back to skill

Security audit

1password 1.0.1.Zip

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent 1Password CLI helper, but some examples can expose passwords, OTPs, or keys in terminal output, so it needs review before installation.

Install only if you are comfortable letting the agent operate an authenticated 1Password CLI session. Treat the reference examples as unsafe: do not print secret values, disable masking, capture panes containing secrets, or write private keys/configs to ordinary files unless you have explicitly requested it and can protect the output. Prefer commands that pass secrets directly to the consuming program and confirm each secret read or injection target.

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
references/cli-examples.md:18
Finding
Plaintext Secret Disclosure Through Disabled Output Masking<![CDATA[ ## Vulnerability Details **File Location**: `references/cli-examples.md:18-20` **Vulnerability Type**: Plaintext sensitive-data exposure **Risk Level**: High ### Vulnerable Code ```bash export DB_PASSWORD="op://app-prod/db/password" op run --no-masking -- printenv DB_PASSWORD op run --env-file="./.env" -- printenv DB_PASSWORD ``` ### Technical Analysis The example resolves a database password through 1Password and passes it to `printenv`, which writes the plaintext credential to standard output. The `--no-masking` option explicitly disables 1Password CLI output redaction, making disclosure intentional at the command level. The environment-file example is similarly unsafe because `printenv DB_PASSWORD` displays the resolved secret even without the explicit masking override. When an AI agent, CI system, or terminal automation framework executes these examples, standard output may be retained in chat transcripts, build logs, shell recordings, terminal scrollback, or tmux pane captures. This behavior directly conflicts with the guardrail in `SKILL.md` that prohibits exposing secrets in logs, chat, or code. ### Attack Path 1. A user or agent follows the documented `op run` example. 2. `op` resolves the `op://app-prod/db/password` reference using the authenticated 1Password session. 3. The resolved database password is assigned to `DB_PASSWORD`. 4. `--no-masking` disables output protection, or the environment-file variant passes the secret directly to `printenv`. 5. `printenv DB_PASSWORD` emits the plaintext password to standard output. 6. The credential may be stored in agent transcripts, tmux captures, CI logs, monitoring systems, or terminal history accessible to other parties. 7. Anyone obtaining the exposed credential may attempt to authenticate to the associated database with the privileges granted to that account. ### Impact Assessment Successful exploitation discloses secrets available to the authenticated 1Password user and specifically ...[truncated 583 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove `--no-masking` from all examples involving sensitive values. 2. Do not use `printenv`, `echo`, shell tracing, or similar output-producing commands to verify injected secrets. 3. Replace the examples with a command that consumes the credential without displaying it, such as launching the intended database client or application through `op run`. 4. If demonstration output is necessary, print only a non-sensitive success indicator or validate that the variable is populated without revealing its value. 5. Warn users that agent output, CI logs, terminal scrollback, and tmux captures must be treated as potential disclosure channels. 6. Add a review rule prohibiting examples that combine secret resolution with output commands or masking overrides. 7. Rotate any credential that may already have been exposed by executing these examples and review relevant logs for unauthorized access. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Env Variable Harvesting

High
Category
Data Exfiltration
Content
## Run

- `export DB_PASSWORD="op://app-prod/db/password"`
- `op run --no-masking -- printenv DB_PASSWORD`
- `op run --env-file="./.env" -- printenv DB_PASSWORD`

## Inject
Confidence
99% confidence
Finding
The example `op run --no-masking -- printenv DB_PASSWORD` intentionally causes a resolved secret to be emitted in plaintext to stdout, and `--no-masking` removes a key safety control designed to reduce accidental disclosure. In practice, this can expose credentials to terminal scrollback, CI logs, shell recording, monitoring tools, or other users on shared systems.

Env Variable Harvesting

High
Category
Data Exfiltration
Content
- `export DB_PASSWORD="op://app-prod/db/password"`
- `op run --no-masking -- printenv DB_PASSWORD`
- `op run --env-file="./.env" -- printenv DB_PASSWORD`

## Inject
Confidence
97% confidence
Finding
The example `op run --env-file="./.env" -- printenv DB_PASSWORD` demonstrates resolving a secret into an environment variable and then printing it, which directly discloses sensitive material. Even without `--no-masking`, teaching users to echo secret-bearing environment variables normalizes a leakage pattern that is especially risky in CI/CD, shared shells, and audited environments.

Credential Access

High
Category
Privilege Escalation
Content
- `export DB_PASSWORD="op://app-prod/db/password"`
- `op run --no-masking -- printenv DB_PASSWORD`
- `op run --env-file="./.env" -- printenv DB_PASSWORD`

## Inject
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The examples explicitly show secrets being read to stdout and written to local files without any cautionary guidance, including plaintext output of passwords, OTPs, SSH keys, and key material written to disk. In a secrets-management skill, this is dangerous because users commonly copy examples verbatim, which can leak credentials into terminals, shell history, logs, process capture, or insecure filesystem locations.

Unrestricted Tool Access

Medium
Category
Excessive Agency
Content
- macOS: Settings > Developer > Integrate with 1Password CLI (Touch ID optional).
  - Windows: turn on Windows Hello, then Settings > Developer > Integrate.
  - Linux: Settings > Security > Unlock using system authentication, then Settings > Developer > Integrate.
- After integration, run any command to sign in (example in docs: `op vault list`).
- If multiple accounts: use `op signin` to pick one, or `--account` / `OP_ACCOUNT`.
- For non-integration auth, use `op account add`.
Confidence
80% confidence
Finding
Skill grants unrestricted tool access without appropriate constraints. An agent with unfettered tool access can perform arbitrary actions including file modification, network requests, and code execution.

Static analysis

No suspicious patterns detected.