T08 · Insecure Dependencies
- Location
SKILL.md:14- Finding
Unpinned npm Package Execution Through npx
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill matches its stated purpose, but it can write unvalidated AI-generated GitHub Actions workflows and documents unpinned npx execution.
Review this before installing. Prefer a pinned package version or local locked installation, do not run unpinned npx examples in sensitive repositories, avoid putting secrets or confidential infrastructure details in prompts, and manually inspect any generated workflow for permissions, triggers, secret use, third-party actions, and deployment behavior before committing it.
SKILL.md:14Unpinned npm Package Execution Through npx
src/cli.ts:17Unvalidated AI Output Can Be Installed as Executable GitHub Actions Configuration
The declared purpose claims a substantive capability: generating GitHub Actions workflows from natural language. The supplied code does not implement that capability or any observable functionality; it is effectively a no-op declaration/export stub. This is a material mismatch in primary purpose because the code chunk does not reflect the described behavior.
The lockfile includes form-data 4.0.5, which is flagged for a CRLF injection issue in multipart field names. This is a real supply-chain risk if the application passes attacker-controlled field names or filenames into multipart request construction, because it can corrupt request structure or inject unintended headers/body parts. In this skill, the package is only a transitive dependency of the OpenAI SDK, so exploitability depends on whether the code actually builds multipart uploads from untrusted input; that makes the issue less directly dangerous than if the skill explicitly handled arbitrary file/form uploads.
The README instructs users to run npx ai-github-action without pinning a specific package version. That allows whatever version is currently published under that package name to be fetched and executed, which creates a supply-chain risk if the package is updated maliciously or unexpectedly. In a tool that generates CI workflows, this is more dangerous because users are being asked to run code that may also modify repository automation configuration.
This usage example combines unpinned npx execution with the --install option, which increases risk because it both downloads and executes the latest package version and then writes directly into .github/workflows/. If the package were compromised, it could generate or install malicious workflow definitions that later run in GitHub Actions with repository secrets or deployment permissions.
The README again recommends executing the package through unpinned npx, which exposes users to unexpected or malicious package changes at runtime. Because this example generates deployment-related workflow content, compromise could affect release pipelines, cloud credentials, or artifact publication if users trust and apply the output.
The README advertises an --install mode that writes directly to .github/workflows/ but does not warn users that this changes security-sensitive repository automation files. Workflow files are high-impact because they can execute code in CI, access repository tokens, and influence deployments, so silent or lightly-described direct writes increase the chance users will apply unsafe generated configurations without review.
The skill references environment-based capability by requiring an OPENAI_API_KEY, but it does not declare any explicit tool scope such as permissions or allowed-tools. This creates ambiguity about what runtime capabilities the skill expects and can lead to overbroad access in environments that infer or grant capabilities implicitly.
Using npx ai-github-action without pinning to a specific version causes execution of whatever package version is current at install time. This exposes users to supply-chain risk, including malicious updates, dependency compromise, or unexpected behavior changes when the package is fetched and run.
The example invokes npx ai-github-action without a pinned version, which means users may execute unreviewed code from the latest published package. In a developer tooling context, this is especially risky because the tool may generate CI/CD workflows that influence build, deployment, and secrets handling.
This unpinned npx usage can pull and execute arbitrary future package revisions, creating a straightforward supply-chain attack surface. Because the command also offers an --install flow, users may be more likely to trust and persist whatever code is fetched.
The Docker/ECR example uses an unversioned npx package, which could let a compromised package generate dangerous workflow steps affecting container publishing or cloud deployment. The CI/CD context increases impact because generated output may later run with repository or cloud credentials.
Running an unpinned package for scheduled backup workflow generation still exposes users to remote code execution from a future malicious or compromised release. Even though this example is less obviously privileged than deployment, generated scheduled jobs may handle sensitive data or infrastructure tasks.
The help command still causes npx to resolve and execute the package, so leaving it unpinned retains the same supply-chain risk as functional examples. Users may assume --help is harmless, making them less cautious about executing a latest-version package.
The function sends the user-provided workflow description to the OpenAI API, which is an external network service, without any indication in the code of notice, consent, redaction, or data-handling controls. In a CI/setup assistant context, users may include repository details, secrets, internal infrastructure names, or pipeline logic in the prompt, causing unintended third-party disclosure.
The function sends raw user-provided workflow descriptions to the OpenAI API, which is an external third-party service, and there is no visible notice, consent flow, or minimization logic in this code. If users include proprietary CI details, secrets, internal repository names, or deployment architecture in the prompt, that information may be disclosed outside the local trust boundary.
The file reads process.env.OPENAI_API_KEY, which is access to a sensitive credential source. There is no inline comment, docstring, or user-facing notice describing this credential dependency or its security implications.
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"scripts": { "build": "tsc" },
"keywords": ["github", "actions", "ci", "cd", "workflow", "ai"],
"license": "MIT",
"dependencies": { "commander": "^12.1.0", "openai": "^4.73.0", "ora": "^5.4.1" },
"devDependencies": { "typescript": "^5.6.0", "@types/node": "^22.0.0" },
"author": "LXGIC Studios",
"repository": { "type": "git", "url": "https://github.com/lxgicstudios/ai-github-action" }
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"scripts": { "build": "tsc" },
"keywords": ["github", "actions", "ci", "cd", "workflow", "ai"],
"license": "MIT",
"dependencies": { "commander": "^12.1.0", "openai": "^4.73.0", "ora": "^5.4.1" },
"devDependencies": { "typescript": "^5.6.0", "@types/node": "^22.0.0" },
"author": "LXGIC Studios",
"repository": { "type": "git", "url": "https://github.com/lxgicstudios/ai-github-action" }
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"scripts": { "build": "tsc" },
"keywords": ["github", "actions", "ci", "cd", "workflow", "ai"],
"license": "MIT",
"dependencies": { "commander": "^12.1.0", "openai": "^4.73.0", "ora": "^5.4.1" },
"devDependencies": { "typescript": "^5.6.0", "@types/node": "^22.0.0" },
"author": "LXGIC Studios",
"repository": { "type": "git", "url": "https://github.com/lxgicstudios/ai-github-action" }
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"keywords": ["github", "actions", "ci", "cd", "workflow", "ai"],
"license": "MIT",
"dependencies": { "commander": "^12.1.0", "openai": "^4.73.0", "ora": "^5.4.1" },
"devDependencies": { "typescript": "^5.6.0", "@types/node": "^22.0.0" },
"author": "LXGIC Studios",
"repository": { "type": "git", "url": "https://github.com/lxgicstudios/ai-github-action" }
}
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"keywords": ["github", "actions", "ci", "cd", "workflow", "ai"],
"license": "MIT",
"dependencies": { "commander": "^12.1.0", "openai": "^4.73.0", "ora": "^5.4.1" },
"devDependencies": { "typescript": "^5.6.0", "@types/node": "^22.0.0" },
"author": "LXGIC Studios",
"repository": { "type": "git", "url": "https://github.com/lxgicstudios/ai-github-action" }
}
No suspicious patterns detected.