Back to skill

Security audit

Go Lint 配置工具

Security checks for vulnerabilities and agentic risk

Overview

This is a Markdown-only Go lint configuration helper; it has some overbroad and sloppy wording, but I found no hidden payload, exfiltration, persistence, or destructive behavior.

Install only if you want a lightweight Chinese-language helper for Go golangci-lint setup. Before letting an agent act on it, keep invocation limited to Go lint tasks, confirm any .golangci.yml edits first, and prefer an official pinned golangci-lint release or package-manager install over an @latest command.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:74
Finding

Unpinned Third-Party Executable Installation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:74 (also reiterated at SKILL.md:260)
Vulnerability Type: Unpinned executable dependency
Risk Level: Medium

Vulnerable Code

bash
go install golangci-lint/cmd/golangci-lint@latest

The dependency table reiterates the unsafe installation pattern:

markdown
| golangci-lint | Command-line tool | Required | `go install ...@latest` |

Technical Analysis

The skill instructs users or an executing agent to download, compile, and install the version currently resolved by the mutable @latest selector. Because no immutable version is specified, the installed source can change without any modification to the reviewed skill.

This prevents reproducible installation and makes it impossible to determine in advance which exact dependency revision will execute. The instruction also does not require checksum, signature, provenance, or release verification. If an upstream release, source repository, module-resolution path, or maintainer account is compromised, following this instruction could introduce attacker-controlled executable code.

The documented module path should additionally be replaced with the verified canonical module path published by the project.

Attack Path

  1. An attacker compromises the upstream package, release process, module-resolution path, or a maintainer account.
  2. A malicious release becomes the version resolved by @latest.
  3. A user or AI agent follows the installation instruction in SKILL.md.
  4. The Go toolchain downloads and compiles the uncontrolled dependency revision.
  5. The resulting executable is installed in the user's Go binary directory.
  6. When the linter is subsequently invoked, the malicious binary executes with the privileges and environment access of the invoking user or agent.

Impact Assessment

Successful exploitation could provide arbitrary code execution with the privileges of the user ...[truncated 584 chars]

Remediation
View remediation

Remediation Suggestions

  1. Replace @latest with a reviewed, immutable release version.
  2. Use the project's verified canonical Go module path and confirm it against official project documentation.
  3. Document the expected checksum, signature, or provenance-verification process for downloaded releases.
  4. Prefer a trusted package manager or official release artifact with integrity verification where appropriate.
  5. Update the pinned version only through a reviewed dependency-update process.
  6. Keep the installation command and dependency table consistent.

Example hardened pattern:

bash
go install <verified-canonical-module-path>@vX.Y.Z

Replace vX.Y.Z with a specifically reviewed release rather than a mutable selector.

Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (8)

Vague Triggers

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The manifest description includes ambiguous, unrelated usage conditions that broaden the skill beyond Go lint configuration into generic management and collaboration contexts. In systems that auto-select skills from descriptions, this can cause unintended activation and tool access in workflows where the skill’s exec/write capabilities are unnecessary and riskier.

Content

No source excerpt is available for this finding.

Vague Triggers

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The trigger conditions are far broader than the skill’s actual purpose, covering generic coding, debugging, testing, and deployment scenarios. Overbroad invocation criteria are dangerous in an agentic environment because they can cause this skill to run in unrelated contexts, leading to unnecessary command execution or repository modifications where lint tooling is not appropriate.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest describes a Go lint configuration tool but also includes unrelated project management and team collaboration use cases. This scope inflation can cause the skill to be invoked in contexts it was not designed for, increasing the chance of inappropriate tool use and unsafe actions under false assumptions about capability.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The description states '支持中文交互', and the document consistently presents the interaction model as Chinese-only without indicating that users may choose another language. This is a language/locale constraint presented as a default behavior without opt-in or documented justification as a region-specific tool.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The documentation advertises parameterized CRUD-style operations, structured output handling, and generic execution modes that are not actually implemented by the skill content. This mismatch can mislead an agent into believing it may create, modify, export, or delete artifacts programmatically, encouraging unsafe or unintended actions beyond the real lint-guidance scope.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill discusses saving/exporting configuration and its manifest allows write access, but it does not clearly warn that repository files may be modified. In an agent setting, this can lead to silent or unexpected edits to tracked files such as .golangci.yml, creating integrity and workflow risks if users did not explicitly consent to changes.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

L044 explicitly states the core capability supports create/query/modify/delete modes. Nowhere else in the file is deletion of resources, configs, or artifacts actually described or implemented; the content is limited to configuration templates, command examples, and troubleshooting advice. This is an active contradiction in the documentation, not merely missing detail.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

L197 labels .golangci.minimal.yml as '仅 gofmt + govet', while the actual minimal configuration shown earlier at L086-L100 enables only gofmt. This is a direct contradiction between two parts of the documentation about what the minimal config contains.

Content

No source excerpt is available for this finding.