T09 · Insecure Skill Coding Practices
- Location
scripts/linear_json.sh:41- Finding
Linear API Key Exposed Through Process Arguments
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill appears to be a real Kanban automation tool, but it can persist scheduled automation and act on authenticated project-management accounts, with some under-scoped credential and Linear query handling risks.
Install only with scoped PM accounts or tokens, review the selected adapter's permissions first, avoid enabling `--autopilot-install-cron` until you are comfortable with recurring stage changes, and prefer updating/auditing dependencies plus hardening the Linear wrapper before use in sensitive workspaces.
scripts/linear_json.sh:41Linear API Key Exposed Through Process Arguments
scripts/linear_json.sh:49GraphQL Injection Through Unvalidated Linear Scope Identifiers
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
The file explicitly includes vitest 2.1.9, which is reported as affected by critical advisories involving arbitrary file read and possible code execution when the Vitest UI server or redirect-mock functionality is exposed. Even though Vitest is a devDependency, this skill is CLI- and automation-oriented, so test tooling may run in developer workstations or CI environments where sensitive source, tokens, and workspace files are present, making the impact significant if the vulnerable features are used.
The declared description describes a substantive Kanban workflow skill with task-stage management and CLI-based PM integrations. The supplied code chunk does not implement any of those behaviors. Instead, it is purely a Vitest configuration file that sets the test environment and test file glob. This is a materially different primary purpose and does not represent the described functionality.
Referenced artifact was not completely inspected
- `github.ts` (gh CLI)
Referenced artifact was not completely inspected
- `src/cli.ts` (provides `kanban-workflow <verb>`; see README for setup flags)
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.
// Stop tracking work items that are no longer in progress.
for (const id of Object.keys(state.lastAutoCommentAt)) {
if (!inProgressSet.has(id)) delete state.lastAutoCommentAt[id];
}
const postedIds: string[] = [];
Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.
}
describe('setup', () => {
it('requires --force to overwrite existing config', async () => {
const fs = createMemoryFs({ 'config/kanban-workflow.json': '{"x":1}' });
const validate = vi.fn(async () => undefined);
The skill explicitly documents use of external binaries, environment variables, setup-time validation, and cron installation, but it does not declare any explicit tool scope such as permissions or allowed-tools. That makes the skill's operational authority ambiguous and can lead an agent runtime to grant broader shell/env access than a user expects, increasing the chance of unintended command execution or credential exposure.
The documented --autopilot-install-cron option creates a persistent scheduled job, yet the skill text does not emphasize the security and operational implications of installing recurring execution. Persistent cron execution can repeatedly invoke shell-capable automation, amplify mistakes, and create long-lived background behavior a user did not fully intend.
Requiring show/next to output private or internal comments exposes potentially sensitive information to the agent and downstream consumers of its output. Because next automatically reuses show, the exposure can happen during routine task selection, increasing the chance of unnecessary data access and leakage of confidential internal notes, credentials, customer data, or security-relevant discussion.
The requirement mandates automatic external writes every 5 minutes while a task is in progress, but does not require explicit user awareness, consent, or a clear way to disable the behavior. In an agentic environment, background posting can leak work context, create audit noise, and cause unintended disclosure of sensitive implementation details to external PM systems without the operator realizing ongoing writes are occurring.
Silent automatic reopening on any human comment changes remote task state without a user-visible confirmation or approval step. This can be abused or triggered unintentionally, causing workflow manipulation, confusing task ownership/state, and unauthorized external side effects that the agent operator may not expect.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
#
# Requirements: LINEAR_API_KEY, curl, jq
API="https://api.linear.app/graphql"
if [[ -z "${LINEAR_API_KEY:-}" ]]; then
echo "Error: LINEAR_API_KEY not set" >&2
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
exit 1
fi
if ! command -v curl >/dev/null 2>&1; then
echo "Error: curl not found" >&2
exit 1
fi
This code performs a mutating operation by updating an issue's state through the Plane CLI, which changes remote user data. Although the file-level comment documents the command, there is no user-facing confirmation, logging, or inline warning associated with this destructive state transition in the method itself.
The manifest describes a kanban workflow skill with setup, workflow verbs, polling/diffing foundations, and automation hooks, but this file goes beyond PM-platform interaction by invoking a local executable to create a scheduled cron job. Spawning an external process to persist automation on the host is a materially stronger capability than ordinary workflow management and is not clearly justified by the stated purpose alone.
The setup flow states that it writes config/kanban-workflow.json, but the skill does not clearly warn the user that running setup will modify the local workspace. Silent file creation or overwrite can surprise users, interfere with repositories, or be abused to persist unwanted configuration in automated environments.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"kanban-workflow": "tsx src/cli.ts"
},
"dependencies": {
"execa": "^9.6.0",
"tsx": "^4.19.2",
"zod": "^4.3.6"
},
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
},
"dependencies": {
"execa": "^9.6.0",
"tsx": "^4.19.2",
"zod": "^4.3.6"
},
"devDependencies": {
No suspicious patterns detected.