Back to skill

Security audit

github-flow

Security checks across malware telemetry and agentic risk

Overview

This skill is mostly coherent GitHub workflow automation, but it grants broad GitHub and local workflow authority with several automatic or under-scoped state changes users should review first.

Install only if you want an agent to actively operate your GitHub workflow. Use a dedicated, least-privilege GitHub account or token, review the language and external-rule assumptions, and require explicit confirmation before issue creation, dependency mutations, reviewer registration, pushes, PR ready transitions, and merges.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (20)

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The PR-creation skill directs writes to a cross-session global cache file (`~/.claude/copilot-rate-limit.json`) that is unrelated to the minimum scope of drafting or creating a PR. This expands the skill's authority beyond GitHub/PR operations into persistent local state mutation, creating a covert side effect that can influence later sessions and other workflows.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The skill instructs modification of local planning/tracking artifacts such as tasks and `fix_plan.md`, which are outside the stated function of PR body generation and GitHub PR operations. That broadens the operational scope and can silently alter local workflow state, creating integrity and auditability issues for the user's environment.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
When Copilot rate limits occur, the skill explicitly updates local tracking state and follow-up records, coupling a transient remote service condition to persistent local mutations. This creates unnecessary side effects and can leave stale or misleading automation state across sessions if the file is later consumed by other tools.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The file claims to be a sanitization skill, but this section expands into broad policy enforcement for language choice, cross-repo linkage, reference notation, and visibility-based workflow decisions. That scope creep can cause an agent to override user intent or make unrelated governance decisions under the guise of security, increasing the chance of unsafe or disruptive autonomous behavior.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
The document explicitly frames itself as addressing two concerns, but later adds multiple unrelated enforcement domains. This mismatch is dangerous because agents and reviewers may trust the declared scope while hidden policy logic later alters behavior in ways that are not obvious from the skill's stated purpose.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The guidance recommends injecting GH_TOKEN as an environment variable without warning about token exposure risks. Environment variables can leak through shell history, debug output, process inspection, CI logs, or inherited subprocesses, which can expose a GitHub credential with repository-scoped permissions.

Missing User Warnings

Medium
Confidence
98% confidence
Finding
The workaround command places a live GitHub token into the subprocess environment and presents it as a routine fix. Even though it is command-scoped, this can still expose credentials via process introspection, shell tracing, captured terminal output, wrapper scripts, or logging in automation contexts.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
The skill imposes a mandatory language policy for PUBLIC repositories without user opt-in, overriding user autonomy and potentially causing the agent to transform or reject user-authored commit messages based on repository visibility rather than explicit instruction. In an automation skill, this can lead to unauthorized modification of user communications and policy enforcement unrelated to security, which is especially risky because it is framed as a HARD STOP and applied uniformly across commits, PRs, issues, and comments.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The repeated HARD STOP language policy strengthens the instruction to block non-English commit content in PUBLIC repositories and to verify/enforce that rule before every commit. This creates a coercive behavior in the agent that can override user intent, induce unnecessary repository interrogation, and cause workflow disruption or silent content rewriting under the guise of process compliance.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill directs the agent to immediately apply GitHub dependency changes based solely on a chat-time conclusion, without requiring a distinct user confirmation before mutating external state. That can cause unintended project-data modification, especially when the user expected analysis or advice rather than execution.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The file describes creating tracking issues with `gh issue create` as part of the workflow, but the warning about side effects is incomplete and easy to miss in a long operational document. In practice, this increases the chance an agent creates external artifacts in a repository without sufficiently explicit, contemporaneous user consent.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The trigger phrases include broad everyday requests like 'merge the PR' and 'merge if CI passed', which can cause the skill to activate in contexts where the user did not intend to invoke this highly stateful workflow. Because this skill can drive GitHub operations and merge decisions, accidental invocation increases the chance of unintended repository actions or premature merge guidance.

Natural-Language Policy Violations

Medium
Confidence
82% confidence
Finding
Forcing English-language interaction without user opt-in is not a direct code-execution flaw, but it is a security-relevant policy issue because it can cause misunderstandings in a safety-critical merge workflow. Miscommunication around merge gates, CI failures, or review findings can lead to incorrect user approval or operator error.

Natural-Language Policy Violations

High
Confidence
88% confidence
Finding
The skill mandates PR language based on repository visibility, overriding normal user choice and causing the agent to inspect repository metadata to determine output behavior. In a security context, policy enforcement tied to private/public status can leak or mishandle sensitive communication expectations and cause unintended disclosure in public repos by forcing a content transformation without user opt-in.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The trigger phrases are broad enough to match ordinary user requests like 'apply review feedback' or 'address feedback', which can invoke a workflow that edits code, updates PR metadata, and pushes changes. In an automation skill with write and GitHub capabilities, ambiguous activation increases the risk of accidental execution on the wrong task or without sufficient user intent specificity.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill explicitly instructs the agent to write a local temp file and post a GitHub PR comment, both of which modify external or local state, without requiring a user-visible confirmation. In an agent setting, this can lead to unintended side effects such as posting comments to the wrong PR or leaving review content on disk without the user's informed consent.

Natural-Language Policy Violations

High
Confidence
98% confidence
Finding
Forcing Korean by default for private repositories without user opt-in is a strong behavioral policy unrelated to sanitization and can materially alter repository content, PRs, comments, and commit workflows. In mixed-language teams or automated contexts, this can cause incorrect postings, user confusion, and unauthorized content transformations that undermine operator control.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| # | Don't | Do |
|---|-------|-----|
| 1 | Skip the Copilot-reviewer step after PR creation and only check the CodeRabbit walkthrough | Step 0 first → handle Copilot → then Step 1 CodeRabbit walkthrough |
| 2 | Register Copilot reviewer unconditionally, without checking account-wide in-flight state | Run Step 0-2 GraphQL `viewer.pullRequests` + `reviewRequests` matrix first — if backlogged, drain the backlog first |
| 3 | Delegate Copilot handling to the consolidate skill (trusting only the next.md matrix) | The next.md matrix triggers via the stop hook — easy to miss. Handle it automatically in pr.md Step 9 |
| 4 | Stay silent after detecting a Copilot backlog | TaskCreate + fix_plan hold + AskUserQuestion for the user to decide |
| 5 | Skip in-flight checks because "I already checked once" during silent-fail / retry | **Re-run the Step 0-2 in-flight check every time Copilot registration is attempted.** Do not trust cached results — between checks, Copilot may have been registered on another PR |
Confidence
86% confidence
Finding
without checking

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| 4 | Stay silent after detecting a Copilot backlog | TaskCreate + fix_plan hold + AskUserQuestion for the user to decide |
| 5 | Skip in-flight checks because "I already checked once" during silent-fail / retry | **Re-run the Step 0-2 in-flight check every time Copilot registration is attempted.** Do not trust cached results — between checks, Copilot may have been registered on another PR |
| 6 | When an AskUserQuestion option mentions "re-register Copilot then consolidate", omit the in-flight check from the description | Spell out the **"in-flight check → 0 → register → 1+ → backlog notice"** procedure inline in the option description. Promise that it will re-run at fire time |
| 7 | After one passing in-flight check, auto-generate a registration option without checking again | **Re-run Step 0-2 every time AskUserQuestion options are authored.** Check again at the action step after firing (double guard) |

**Self-check (right after PR creation + every Copilot registration attempt)**:
1. Step 0-1: `gh pr view <N> --json reviewRequests,reviews` to check whether Copilot is already registered for this PR — SKIP if `Copilot` (Bot) is in reviewRequests OR `copilot-pull-request-reviewer` is in reviews
Confidence
85% confidence
Finding
without checking

Session Persistence

Medium
Category
Rogue Agent
Content
| 2 | Inferring "the body is Korean, so the title must also be Korean" | Apply the visibility rule explicitly to both the title and the body |
| 3 | Performing the visibility check only inside the personal-data sanitize step | Step 0: visibility check → language decision → then sanitize |

**Exception**: English only when the project's CLAUDE.md / README explicitly states "write PRs in English", or the user explicitly requests English. Choosing English by inference is forbidden.

Detailed rule: `~/.agents/rules/opensource.md` "PRIVATE repo = Korean default" section.
Confidence
90% confidence
Finding
write PRs in English", or the user explicitly requests English. Choosing English by inference is forbidden. Detailed rule: `~/.agents

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.