Back to skill

Security audit

Linear CLI

Security checks for vulnerabilities and agentic risk

Overview

This Linear CLI skill is coherent but needs Review because it gives agents broad authority over Linear data, credentials, raw API calls, file attachments, and destructive bulk actions without strong enough safety boundaries.

Install only if you trust the external linear CLI and the Linear workspace permissions it will use. Prefer a least-privilege token, verify the CLI version/source before login, avoid --yes for destructive commands, use dry-run or interactive confirmation for writes, never expose linear auth token in logs, and do not attach local files that may contain secrets.

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
scripts/generate-docs.ts:1
Finding
Documentation Generator Runs with Unrestricted Filesystem and Process Permissions## Vulnerability Details **File Location**: `scripts/generate-docs.ts:1` **Vulnerability Type**: Excessive Deno runtime permissions **Risk Level**: Medium ```typescript #!/usr/bin/env -S deno run --allow-run --allow-read --allow-write ``` ### Technical Analysis The documentation generator is granted unrestricted process execution, filesystem read access, and filesystem write access. Its intended operations only require executing the `linear` and `deno` binaries and accessing files within the Skill directory. Deno permissions are security boundaries. Using `--allow-run`, `--allow-read`, and `--allow-write` without resource restrictions removes those boundaries for the entire script and any imported code. Although no malicious behavior or direct command-injection path was found in the current implementation, a compromised dependency or future code change would inherit access substantially broader than the documented task requires. ### Attack Path 1. A user invokes `scripts/generate-docs.ts` through its shebang. 2. Deno grants the process unrestricted read, write, and subprocess permissions. 3. Malicious code introduced through a compromised import or later modification executes in the generator's context. 4. The code reads any file available to the current operating-system user, modifies unrelated files, or launches arbitrary local executables. 5. Those actions occur without further Deno permission prompts because the broad permissions were granted at startup. ### Impact Assessment Exploitation would provide access equivalent to the operating-system account running the generator. Potential impact includes: - Reading user-accessible credentials, configuration, source code, and other sensitive files. - Modifying or deleting files outside the project. - Executing arbitrary commands and programs under the current user's privileges. - Using accessible local credentials to affect external services. This does not dire ...[truncated 126 chars]
Remediation
## Remediation Suggestions Apply least-privilege Deno permissions: 1. Restrict reads and writes to the Skill directory and its generated documentation paths. 2. Restrict subprocess execution to the specific required binaries, `linear` and `deno`. 3. Prefer a reviewed Deno task or wrapper that computes explicit absolute paths rather than placing unrestricted permissions in the shebang. 4. Pin and review imported dependencies before allowing them to execute with filesystem or subprocess capabilities. 5. Run documentation generation in a sandbox or CI environment without production credentials. A hardened invocation should follow this pattern: ```bash deno run \ --allow-read=/absolute/path/to/skill \ --allow-write=/absolute/path/to/skill \ --allow-run=linear,deno \ scripts/generate-docs.ts ```

T08 · Insecure Dependencies

Note
Location
SKILL.md:36
Finding
Installation Is Delegated to Mutable and Unpinned External Instructions## Vulnerability Details **File Location**: `SKILL.md:36-43`; mirrored in `SKILL.template.md:36-43` **Vulnerability Type**: Unpinned external software installation source **Risk Level**: Low ```markdown ## Prerequisites The `linear` command must be available on PATH. To check: ```bash linear --version ``` If not installed, follow the instructions at:\ https://github.com/kyaukyuai/linear-cli?tab=readme-ov-file#install ``` ### Technical Analysis The Skill delegates installation to the current contents of a GitHub repository page. It does not identify a pinned release or commit, provide a checksum or signature, or include locally reviewable installation commands. The linked instructions can change after this Skill package has been reviewed. The resulting `linear` executable is security-sensitive because it receives access to Linear workspace credentials, performs remote mutations, and is executed by the documentation generator. This creates a supply-chain trust boundary that is not fixed to the audited artifact. The same instruction appears in `SKILL.template.md`, meaning regeneration of `SKILL.md` preserves the insecure installation guidance. ### Attack Path 1. An attacker compromises the referenced repository, its maintainer account, release assets, or an installation dependency named by the mutable instructions. 2. The external installation page is changed to distribute or execute a malicious `linear` binary. 3. A user or agent follows the Skill's installation guidance without verifying a pinned version or artifact digest. 4. The malicious binary is placed on `PATH`. 5. Subsequent Skill operations execute that binary and may provide it access to Linear credentials, command inputs, local files explicitly supplied to the CLI, and authenticated workspace operations. ### Impact Assessment The exact impact depends on the installation mechanism and the permissions used to run the installed binary. A malicious ...[truncated 554 chars]
Remediation
## Remediation Suggestions 1. Pin installation guidance to a specific reviewed release and commit. 2. Publish expected SHA-256 checksums or cryptographic signatures for each supported artifact. 3. Include explicit, locally auditable installation commands rather than relying only on a mutable README section. 4. Verify the installed binary's version and digest before authentication or execution. 5. Prefer a trusted package registry with lockfiles and provenance attestations where available. 6. Apply the same changes to `SKILL.template.md` so regenerated documentation remains secure. 7. Avoid running newly installed binaries with elevated operating-system privileges.
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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (32)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description presents an operational runtime for agents to control Linear directly. This code chunk instead serves a maintenance/build purpose: it introspects the installed `linear` CLI help output and produces markdown documentation files. While it is related to the Linear CLI ecosystem, its primary purpose is materially different from the declared runtime behavior, and it lacks the described read/mutate automation capabilities over Linear resources.

Credential Access

High
Category
Privilege Escalation
Content
default  [workspace]  - Set the default workspace                      
  token                 - Print the configured API token                 
  whoami                - Print information about the authenticated user 
  migrate               - Migrate plaintext credentials to system keyring
```

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

Credential Access

High
Category
Privilege Escalation
Content
default  [workspace]  - Set the default workspace                      
  token                 - Print the configured API token                 
  whoami                - Print information about the authenticated user 
  migrate               - Migrate plaintext credentials to system keyring
```

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

Credential Access

High
Category
Privilege Escalation
Content
--profile          <profile>  - Execution profile override (agent-safe default, human-debug opt-in)  
  -k, --key          <key>      - API key (prompted if not provided)                                   
  -i, --interactive             - Enable interactive prompts                                           
  --plaintext                   - Store API key in credentials file instead of system keyring
```

### logout
Confidence
90% confidence
Finding
The `--plaintext` option explicitly allows storing an API key in a credentials file instead of the system keyring, which weakens secret protection at rest. In agent and automation environments, filesystem-stored plaintext secrets are more likely to be copied into backups, repos, containers, or readable workspaces, increasing credential compromise risk.

External Transmission

Medium
Category
Data Exfiltration
Content
linear api '{ issues(first: 5) { nodes { identifier title } } }' | jq '.data.issues.nodes[].title'
```

### Advanced: Using curl directly

For cases where you need full HTTP control, use `linear auth token`:
Confidence
91% confidence
Finding
The skill explicitly instructs use of curl to send requests to an external service and to place a bearer token from `linear auth token` into the Authorization header. In an agent context, this expands the exfiltration and misuse surface because raw HTTP requests can bypass safer CLI guardrails, and tokens may be exposed to logs, subprocess history, or unintended destinations if the pattern is copied or modified.

External Transmission

Medium
Category
Data Exfiltration
Content
For cases where you need full HTTP control, use `linear auth token`:

```bash
curl -s -X POST https://api.linear.app/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: $(linear auth token)" \
  -d '{"query": "{ viewer { id } }"}'
Confidence
89% confidence
Finding
This line hardcodes transmission to `https://api.linear.app/graphql`, confirming that the skill facilitates outbound network communication to a third-party service. In context, that is expected for Linear integration, but it is still security-relevant because the skill is authorized to send potentially sensitive workspace data and authentication credentials off-host.

External Transmission

Medium
Category
Data Exfiltration
Content
linear api '{ issues(first: 5) { nodes { identifier title } } }' | jq '.data.issues.nodes[].title'
```

### Advanced: Using curl directly

For cases where you need full HTTP control, use `linear auth token`:
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill explicitly demonstrates extracting a live auth token with `linear auth token` and inserting it into a raw `curl` Authorization header. While intended as documentation, this encourages bypassing the safer CLI wrapper and omits warnings about token exposure through shell history, process inspection, logs, copied commands, or reuse against arbitrary endpoints.

External Transmission

Medium
Category
Data Exfiltration
Content
For cases where you need full HTTP control, use `linear auth token`:

```bash
curl -s -X POST https://api.linear.app/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: $(linear auth token)" \
  -d '{"query": "{ viewer { id } }"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
-w, --workspace    <slug>     - Target workspace (uses credentials)                                  
  --profile          <profile>  - Execution profile override (agent-safe default, human-debug opt-in)  
  -i, --interactive             - Enable interactive selection and confirmation                        
  -y, --yes                     - Skip confirmation prompt                                             
  -f, --force                   - Deprecated alias for --yes
```
Confidence
85% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
-w, --workspace    <slug>     - Target workspace (uses credentials)                                  
  --profile          <profile>  - Execution profile override (agent-safe default, human-debug opt-in)  
  -i, --interactive             - Enable interactive selection and confirmation                        
  -y, --yes                     - Skip confirmation prompt                                             
  -f, --force                   - Deprecated alias for --yes
```
Confidence
85% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
-w, --workspace    <slug>     - Target workspace (uses credentials)                                  
  --profile          <profile>  - Execution profile override (agent-safe default, human-debug opt-in)  
  -i, --interactive             - Enable interactive selection and confirmation                        
  -y, --yes                     - Skip confirmation prompt                                             
  -f, --force                   - Deprecated alias for --yes
```
Confidence
85% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
-w, --workspace    <slug>     - Target workspace (uses credentials)                                  
  --profile          <profile>  - Execution profile override (agent-safe default, human-debug opt-in)  
  -i, --interactive             - Enable interactive selection and confirmation                        
  -y, --yes                     - Skip confirmation prompt                                             
  -f, --force                   - Deprecated alias for --yes
```
Confidence
85% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
-w, --workspace    <slug>     - Target workspace (uses credentials)                                  
  --profile          <profile>  - Execution profile override (agent-safe default, human-debug opt-in)  
  -i, --interactive             - Enable interactive selection and confirmation                        
  -y, --yes                     - Skip confirmation prompt                                             
  -f, --force                   - Deprecated alias for --yes
```
Confidence
85% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
-w, --workspace    <slug>     - Target workspace (uses credentials)                                  
  --profile          <profile>  - Execution profile override (agent-safe default, human-debug opt-in)  
  -i, --interactive             - Enable interactive selection and confirmation                        
  -y, --yes                     - Skip confirmation prompt                                             
  -f, --force                   - Deprecated alias for --yes
```
Confidence
85% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
-w, --workspace    <slug>     - Target workspace (uses credentials)                                  
  --profile          <profile>  - Execution profile override (agent-safe default, human-debug opt-in)  
  -i, --interactive             - Enable interactive selection and confirmation                        
  -y, --yes                     - Skip confirmation prompt                                             
  -f, --force                   - Deprecated alias for --yes
```
Confidence
85% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The documentation exposes a `linear auth token` command that prints the configured API token but gives no warning that the token may be captured in terminal logs, shell history, CI output, screenshots, or agent transcripts. In an agent-native runtime, this is especially risky because an LLM or automation layer may invoke the command and inadvertently exfiltrate long-lived credentials.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
This markdown file documents state-changing operations such as creating a cycle, adding an issue to a cycle, and removing an issue from its cycle, but it does not include any warning that these commands modify shared Linear workspace data. For markdown files, SQP-2 applies when the skill description omits warnings about behaviors that could affect user data or system integrity.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
-w, --workspace    <slug>     - Target workspace (uses credentials)                                  
  --profile          <profile>  - Execution profile override (agent-safe default, human-debug opt-in)  
  -i, --interactive             - Enable interactive confirmation                                      
  -y, --yes                     - Skip confirmation prompt                                             
  --force                       - Deprecated alias for --yes                                           
  --bulk             <ids...>   - Archive multiple initiatives by ID, slug, or name                    
  --bulk-file        <file>     - Read initiative IDs from a file (one per line)
Confidence
86% confidence
Finding
The archive subcommand supports non-interactive destructive execution via --yes/--force and can operate in bulk from arguments, files, or stdin. In an agent-executed skill, this removes a human approval checkpoint and enables large-scale state changes to production Linear data if prompted or misused.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
-w, --workspace    <slug>     - Target workspace (uses credentials)                                  
  --profile          <profile>  - Execution profile override (agent-safe default, human-debug opt-in)  
  -i, --interactive             - Enable interactive confirmation                                      
  -y, --yes                     - Skip confirmation prompt                                             
  --force                       - Deprecated alias for --yes
```
Confidence
85% confidence
Finding
The unarchive subcommand allows confirmation bypass with --yes/--force, enabling an agent to change project state without user review. Although less destructive than deletion, it still permits unauthorized workflow changes and can reopen archived initiatives unexpectedly.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
-w, --workspace    <slug>     - Target workspace (uses credentials)                                  
  --profile          <profile>  - Execution profile override (agent-safe default, human-debug opt-in)  
  -i, --interactive             - Enable interactive confirmation                                      
  -y, --yes                     - Skip confirmation prompt                                             
  --force                       - Deprecated alias for --yes                                           
  --bulk             <ids...>   - Delete multiple initiatives by ID, slug, or name                     
  --bulk-file        <file>     - Read initiative IDs from a file (one per line)
Confidence
93% confidence
Finding
The delete subcommand permits permanent deletion with confirmation skipped and additionally supports bulk deletion from args, files, or stdin. In an automation or agent context, this is highly dangerous because a single mistaken or adversarial instruction can irreversibly remove many initiatives without any human checkpoint.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
-w, --workspace    <slug>     - Target workspace (uses credentials)                                  
  --profile          <profile>  - Execution profile override (agent-safe default, human-debug opt-in)  
  -i, --interactive             - Enable interactive confirmation                                      
  -y, --yes                     - Skip confirmation prompt                                             
  --force                       - Deprecated alias for --yes
```
Confidence
85% confidence
Finding
The remove-project subcommand can skip confirmation, allowing an agent to unlink projects from initiatives without review. This can disrupt planning relationships and reporting integrity even if it does not destroy the underlying project records.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The documentation advertises attachment-related functionality without clearly warning that local file contents will be uploaded to an external SaaS platform. In an agent-driven or automated context, this increases the risk of unintended exfiltration of sensitive local files, especially if an LLM or workflow selects paths without strong human review.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The `linear issue attach <issueId> <filepath>` command description says only 'Attach a file to an issue' and does not explicitly state that the local file at `filepath` is transmitted to Linear. In an agent-native skill, that omission is security-relevant because users or agents may treat file arguments as local-only references rather than outbound data transfer, leading to accidental disclosure of proprietary or secret material.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
This markdown file documents a delete subcommand that removes a project milestone and even supports skipping confirmation with --yes, but it does not explicitly warn users that deletion is destructive or may be irreversible. Under the markdown-specific warning criteria, behaviors affecting user data or system integrity should include a clear warning, not just the command syntax and flags.

Static analysis

No suspicious patterns detected.