Trust Assessment
linear received a trust score of 65/100, placing it in the Caution category. This skill has some security considerations that users should review before deployment.
SkillShield's automated analysis identified 4 findings: 0 critical, 4 high, 0 medium, and 0 low severity. Key findings include GraphQL Injection via direct string concatenation in 'gql' function, GraphQL Injection in 'project' command via '$project_name', GraphQL Injection in 'issue' command via '$issue_id'.
The analysis covered 4 layers: Manifest Analysis, Static Code Analysis, Dependency Graph, LLM Behavioral Safety. The LLM Behavioral Safety layer scored lowest at 40/100, indicating areas for improvement.
Last analyzed on February 14, 2026 (commit 13146e6a). SkillShield performs automated 4-layer security analysis on AI skills and MCP servers.
Layer Breakdown
Behavioral Risk Signals
Security Findings4
| Severity | Finding | Layer | Location | |
|---|---|---|---|---|
| HIGH | GraphQL Injection via direct string concatenation in 'gql' function The `gql` function constructs GraphQL queries by directly concatenating user-controlled input into the query string without sufficient escaping. This allows an attacker to inject arbitrary GraphQL query fragments, potentially leading to unauthorized data access, modification, or denial of service against the Linear API. This fundamental vulnerability affects all commands that pass user input directly into the `gql` function's query parameter. Refactor the `gql` function to use GraphQL variables in the request body, separating the query structure from user-provided values. This is the most robust way to prevent GraphQL injection. If using variables is not feasible, implement comprehensive GraphQL string escaping for all user-controlled inputs (e.g., project names, issue IDs, titles, descriptions) before embedding them into the query string. This includes escaping backslashes, double quotes, and other control characters relevant to GraphQL string literals. | LLM | scripts/linear.sh:20 | |
| HIGH | GraphQL Injection in 'project' command via '$project_name' The 'project' command directly embeds the user-provided `$project_name` into the GraphQL query string. An attacker can craft a malicious project name (e.g., `"My Project\" } } } union { __typename } #`) to break out of the string literal and inject arbitrary GraphQL, potentially exfiltrating sensitive data or performing unintended actions on the Linear API. Sanitize or properly escape the `$project_name` variable for GraphQL string literal context before embedding it into the query. The recommended approach is to use GraphQL variables to pass user input, as described in the general `gql` function remediation. | LLM | scripts/linear.sh:99 | |
| HIGH | GraphQL Injection in 'issue' command via '$issue_id' The 'issue' command constructs a GraphQL query using `$issue_num` and `$team_key` (both derived from the user-provided `$issue_id`) by direct string concatenation. An attacker can craft a malicious `$issue_id` (e.g., `TEAM-123\" } } } union { __typename } #`) to inject arbitrary GraphQL, potentially leading to unauthorized data access or manipulation. Sanitize or properly escape the `$issue_num` and `$team_key` variables for GraphQL string literal context before embedding them into the query. The recommended approach is to use GraphQL variables to pass user input, as described in the general `gql` function remediation. | LLM | scripts/linear.sh:115 | |
| HIGH | GraphQL Injection in 'comment', 'status', 'assign', 'priority', and 'branch' commands via '$issue_id' Multiple commands ('comment', 'status', 'assign', 'priority', 'branch') directly embed the user-provided `$issue_id` into GraphQL mutation or query strings. This allows an attacker to inject arbitrary GraphQL fragments by crafting a malicious `$issue_id` (e.g., `TEAM-123\" }, body: \"malicious\" } } union { __typename } #`). This can lead to unauthorized data access, modification, or other unintended actions on the Linear API. Sanitize or properly escape the `$issue_id` variable for GraphQL string literal context before embedding it into the query. The recommended approach is to use GraphQL variables to pass user input, as described in the general `gql` function remediation. | LLM | scripts/linear.sh:160 |
Scan History
Embed Code
[](https://skillshield.io/report/d0f44894ded49f79)
Powered by SkillShield