Back to skill

Security audit

Linear Pilot Ai Free

Security checks for vulnerabilities and agentic risk

Overview

The skill openly automates Linear tasks, but it needs Review because webhook-triggered work can update Linear and push Git changes without clear authentication, scoping, or approval safeguards.

Install only if you can tightly control who can create or move Linear issues into the monitored state, use a least-privileged Linear API key, protect or replace the plaintext env-file secret setup, disable direct auto-push unless you have a reviewed branch workflow, and require manual approval before code changes, script execution, or Git pushes.

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

T05 · Unauthorized Access and Privilege Escalation

Error
Location
SKILL.md:105
Finding
Untrusted Linear Tasks Can Trigger Broad Agent Actions and Automated Git Pushes<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:105-119`, `SKILL.md:151-158`, and `SKILL.md:192-200` **Vulnerability Type**: Insufficient authorization and execution controls for externally supplied tasks **Risk Level**: High ### Vulnerable Code Snippets `SKILL.md:105-119`: ```text When a task arrives, the Agent processes it according to the following workflow: Task arrives (Linear Todo state) ↓ Step 1: Confirm receipt (reply notification) ↓ Step 2: Send a DM notification to the user ↓ Step 3: Update status to In Progress ↓ Step 4: Execute the task (dispatch by type) ↓ Step 5: Update status to Done + add result comment ↓ Step 6: Synchronize with Git (if enabled) ``` `SKILL.md:151-158`: ```bash # Automatically commit after task completion git add research/topic.md git commit -m "task: ENG-123 - User behavior analysis research" git push ``` `SKILL.md:192-200` defines task classes that include code modification and script execution: ```markdown | Task Type | Processing Method | Output Location | |----------|----------|----------| | Research | Spawn a sub-agent to research and generate a report | `research/[topic].md` | | Content creation | Generate a draft or completed document | `content/[name].md` | | Code task | Write or modify code and commit changes | Corresponding code repository | | Data processing | Run scripts and output results | `output/[task].json` | | Custom | Follow the user-defined output pattern | Custom path | ``` ### Technical Analysis The documented workflow accepts tasks originating from Linear through a Make.com webhook and directs the agent to execute those tasks, including code changes, script execution, custom output generation, and Git synchronization. The instructions do not define: - Webhook request authentication or signature verification. - Authorization checks for the Linear issue creator or modifier. - A task-type or command allowlist. - Repository, branch, directory, or file restrict ...[truncated 2581 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. **Authenticate every webhook request** - Require a cryptographic signature or shared-secret HMAC. - Validate timestamps and unique event identifiers to prevent replay. - Reject unsigned, expired, duplicated, or malformed events. 2. **Authorize the task origin** - Allowlist approved Linear teams, projects, users, and service accounts. - Fetch the issue directly from Linear after receiving an event rather than trusting forwarded fields alone. - Verify the current issue state, creator, and relevant labels before processing. 3. **Treat issue content as untrusted data** - Never interpret issue text as system-level agent instructions. - Parse tasks into a constrained schema with fixed operation types and validated parameters. - Reject requests for arbitrary shell commands, credential access, security-control changes, or unrelated filesystem operations. 4. **Restrict execution privileges** - Run work in an isolated container or sandbox with no unnecessary host access. - Use a dedicated low-privilege operating-system account. - Restrict filesystem access to a designated workspace. - Disable network access unless explicitly required for an approved task. 5. **Constrain Git operations** - Use a dedicated repository-scoped credential with no administrative permissions. - Push only to a designated temporary branch. - Require a pull request and human review before merging. - Prohibit direct pushes to protected or deployment branches. - Stage only explicitly approved paths rather than broad or dynamically selected files. 6. **Require approval for sensitive actions** - Add mandatory approval before script execution, code changes, status completion, and every remote Git push. - Present the proposed command, changed files, diff, destination repository, and branch to the reviewer. 7. **Add validation and monitoring** - Canonicalize and validate all output paths to prevent wor ...[truncated 216 chars]

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:27
Finding
Linear API Key Setup Can Expose Credentials Through Shell History and File Permissions<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:27-30` and `SKILL.md:165-168` **Vulnerability Type**: Insecure secret handling **Risk Level**: Medium ### Vulnerable Code Snippets `SKILL.md:27-30`: ```bash # Create configuration directory mkdir -p ~/.linear-pilot echo "LINEAR_API_KEY=lin_api_xxxxxxxxxxxxx" > ~/.linear-pilot/linear.env chmod 600 ~/.linear-pilot/linear.env ``` The repeated setup procedure at `SKILL.md:165-168` omits the permission-hardening command: ```bash mkdir -p ~/.linear-pilot echo "LINEAR_API_KEY=lin_api_your_key_here" > ~/.linear-pilot/linear.env ``` ### Technical Analysis The instructions encourage users to substitute a real Linear API key directly into an interactive shell command. Interactive shells commonly persist entered commands in history files. File mode `600` protects the resulting environment file but does not remove the key from shell history, terminal logs, session recording, process auditing, or copied command transcripts. The second setup example writes the key without explicitly setting restrictive permissions. Its resulting permissions depend on the user's current `umask`, and the file may temporarily or permanently be readable by unintended local users or processes. The document states that the configuration is ignored by Git, but the audited package contains only `SKILL.md`; no `.gitignore` file is present to substantiate that protection. In addition, a global home-directory file is not protected merely by adding a repository-relative ignore rule. ### Attack Path 1. A user copies the documented command and replaces the placeholder with a valid Linear API key. 2. The shell records the full command, including the key, in its history or associated terminal logging. 3. Alternatively, the user follows the repeated example that omits `chmod 600`, leaving permissions determined by the environment's `umask`. 4. Another local user, support process, backup, history synchronization service, or unauthorized ...[truncated 981 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. **Avoid placing secrets in command-line text** - Read the key without terminal echo using a secure prompt. - Do not pass the secret as a command argument. - Avoid examples that encourage users to paste live credentials into shell commands. 2. **Create the file with restrictive permissions from the outset** - Set a restrictive `umask` before file creation. - Apply mode `600` in every setup procedure. - Restrict the configuration directory to mode `700`. 3. **Use a safer setup pattern** ```bash install -d -m 700 "$HOME/.linear-pilot" umask 077 printf 'Linear API key: ' IFS= read -r -s LINEAR_API_KEY printf '\n' printf 'LINEAR_API_KEY=%s\n' "$LINEAR_API_KEY" > "$HOME/.linear-pilot/linear.env" unset LINEAR_API_KEY chmod 600 "$HOME/.linear-pilot/linear.env" ``` 4. **Prefer a managed secret store** - Use the operating system's credential manager, a deployment secret store, or the agent platform's protected secret facility. - Inject the credential only into the process that requires it. 5. **Reduce credential impact** - Use the least-privileged credential available. - Use separate credentials for development and production automation. - Rotate the key after suspected exposure. - Monitor Linear API activity for unexpected operations. 6. **Correct the Git protection guidance** - Do not claim the directory is already ignored unless an applicable ignore configuration is supplied and verified. - Clarify that secrets stored under the user's home directory must remain outside repositories. - Add secret scanning as a secondary control rather than relying solely on `.gitignore`. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (10)

Missing User Warnings

High
Confidence
95% confidence
Finding
The skill promotes automatic processing, status changes, and Git synchronization without prominently warning that it can modify external systems autonomously. This creates a real risk of unintended issue transitions, misleading completion states, and unreviewed commits or pushes to repositories, especially when webhook-triggered.

Session Persistence

Medium
Category
Rogue Agent
Content
```bash
# 创建配置目录(已gitignore)
mkdir -p ~/.linear-pilot
echo "LINEAR_API_KEY=lin_api_xxxxxxxxxxxxx" > ~/.linear-pilot/linear.env
chmod 600 ~/.linear-pilot/linear.env
```
Confidence
89% confidence
Finding
This duplicate finding points to the same persistent plaintext secret storage pattern. The risk is not the directory creation itself, but the instruction to save an active API token in a reusable local file that may be exposed through host compromise, backups, or user mishandling.

Session Persistence

Medium
Category
Rogue Agent
Content
```bash
# 创建配置目录(已gitignore)
mkdir -p ~/.linear-pilot
echo "LINEAR_API_KEY=lin_api_xxxxxxxxxxxxx" > ~/.linear-pilot/linear.env
chmod 600 ~/.linear-pilot/linear.env
```
Confidence
89% confidence
Finding
This duplicate finding points to the same persistent plaintext secret storage pattern. The risk is not the directory creation itself, but the instruction to save an active API token in a reusable local file that may be exposed through host compromise, backups, or user mishandling.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
# 创建配置目录(已gitignore)
mkdir -p ~/.linear-pilot
echo "LINEAR_API_KEY=lin_api_xxxxxxxxxxxxx" > ~/.linear-pilot/linear.env
chmod 600 ~/.linear-pilot/linear.env
```

获取API Key:Linear → Settings → API → Personal API keys
Confidence
80% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The documented webhook forwarding sends Linear issue data to an agent endpoint but does not warn about transmitting potentially sensitive project metadata to third-party infrastructure. Without privacy guidance, users may forward task contents, identifiers, and comments to services or endpoints that are not appropriately trusted or secured.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
L211 将“研究”任务的处理方式描述为“派生子Agent调研”,但 L357 的免费版限制明确写着“❌ 子Agent任务分发”。这不是简单遗漏,而是同一文档中对该技能是否具备子Agent能力的直接自相矛盾说明。

Vague Triggers

Medium
Confidence
95% confidence
Finding
The trigger conditions are broad enough that users may invoke the skill for loosely related integration or webhook tasks without understanding the operational consequences. In a skill that can update external task state, send notifications, and push to Git, ambiguous invocation criteria increase the chance of unintended autonomous actions against real systems.

Session Persistence

Medium
Category
Rogue Agent
Content
### Step 1:配置Linear API

```bash
mkdir -p ~/.linear-pilot
echo "LINEAR_API_KEY=lin_api_your_key_here" > ~/.linear-pilot/linear.env
```
Confidence
88% confidence
Finding
This duplicate quick-start instruction again normalizes persistent plaintext storage of a privileged API token. In the context of an automation skill that can act on webhooks and update external systems, credential reuse from disk meaningfully increases operational security risk.

Session Persistence

Medium
Category
Rogue Agent
Content
### Step 1:配置Linear API

```bash
mkdir -p ~/.linear-pilot
echo "LINEAR_API_KEY=lin_api_your_key_here" > ~/.linear-pilot/linear.env
```
Confidence
88% confidence
Finding
This duplicate quick-start instruction again normalizes persistent plaintext storage of a privileged API token. In the context of an automation skill that can act on webhooks and update external systems, credential reuse from disk meaningfully increases operational security risk.

Natural-Language Policy Violations

Low
Confidence
83% confidence
Finding
The file states that the documentation and configuration examples were fully localized into Chinese to fit domestic developer habits. This indicates a language constraint in the skill materials, but there is no mention of optional language support or user opt-in for another locale.

Static analysis

No suspicious patterns detected.