CVE-2026-33623: PinchTab OS Command Injection Vulnerability

MODERATE
Advisory Identifier: GHSA-p8mm-644p-phmh
CVSS 6.7
CWE-78 CWE-400
Published
Advisory Summary

CVE-2026-33623 is a MODERATE (CVSS 6.7) os command injection vulnerability (CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')) affecting PinchTab libraries in the Go ecosystem. The issue involves os command injection via profile name in windows cleanup routine enables arbitrary command execution. Remediation is available by upgrading affected packages to version 0.8.5.

CVE-2026-33623 at a Glance

CVE Identifier CVE-2026-33623
GHSA Identifier GHSA-p8mm-644p-phmh
Severity MODERATE
CVSS v3.1 Base Score 6.7
CWE Classification CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')
Affected Product PinchTab
Package Ecosystem Go
Published Date
Last Updated

Security Impact

CVSS: 6.7

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:L).

Attack Vector Network (AV:N)
Attack Complexity Low (AC:L)
Privileges Required High (PR:H)
User Interaction None (UI:N)
Scope Unchanged (S:U)
Confidentiality High (C:H)
Integrity High (I:H)
Availability Low (A:L)

How to Fix CVE-2026-33623

To remediate this vulnerability, upgrade all affected PinchTab dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

github.com/pinchtab/pinchtab/cmd/pinchtab fixed: 0.8.5
Upgrade github.com/pinchtab/pinchtab/cmd/pinchtab to 0.8.5
github.com/pinchtab/pinchtab fixed: 0.8.5
Upgrade github.com/pinchtab/pinchtab to 0.8.5
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for github.com/pinchtab/pinchtab/cmd/pinchtab

How to Check if You Are Affected

To determine whether your application is affected by CVE-2026-33623, inspect your project dependencies for PinchTab:

inspect dependencies for github.com/pinchtab/pinchtab/cmd/pinchtab

Analyze the terminal output to locate any version of PinchTab in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.8.5), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection'), where the product constructs all or part of an os command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended os command when it is sent to a downstream component. In PinchTab, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### Summary PinchTab `v0.8.4` contains a Windows-only command injection issue in the orphaned Chrome cleanup path. When an instance is stopped, the Windows cleanup routine builds a PowerShell `-Command` string using a `needle` derived from the profile path. In `v0.8.4`, that string interpolation escapes backslashes but does not safely neutralize other PowerShell metacharacters. If an attacker can launch an instance using a crafted profile name and then trigger the cleanup path, they may be able to execute arbitrary PowerShell commands on the Windows host in the security context of the PinchTab process user. This is not an unauthenticated internet RCE. It requires authenticated, administrative-equivalent API access to instance lifecycle endpoints, and the resulting command execution inherits the permissions of the PinchTab OS user rather than bypassing host privilege boundaries. ### Details **Issue 1 — PowerShell command string built with interpolated user-influenced data (`internal/bridge/cleanup_windows.go` in `v0.8.4`):** ``` func findPIDsByPowerShell(needle string) []int { escaped := strings.ReplaceAll(needle, `\`, `\\`) cmd := exec.Command("powershell", "-NoProfile", "-Command", fmt.Sprintf(`Get-CimInstance Win32_Process -Filter "Name='chrome.exe'" | `+ `Where-Object { $_.CommandLine -like '*%s*' } | `+ `Select-Object -ExpandProperty ProcessId`, escaped)) } ``` The `needle` value is interpolated directly into a PowerShell command string. Escaping backslashes alone is not sufficient to make arbitrary user-controlled content safe inside a PowerShell expression. **Issue 2 — `needle` is derived from launchable profile names:** The cleanup path uses: ``` findPIDsByPowerShell(fmt.Sprintf("--user-data-dir=%s", profileDir)) ``` The profile directory is derived from the instance/profile name used during launch. In `v0.8.4`, profile name validation rejected path traversal characters such as `/`, `\`, and `..`, but it did not comprehensively block PowerShell metacharacters such as single quotes or statement separators. **Issue 3 — Trigger path is reachable through normal instance lifecycle APIs:** The attack path described in the report uses: 1. `POST /instances/launch` with a crafted `name` 2. `POST /instances/{id}/stop` to trigger the cleanup routine That means exploitability depends on access to privileged orchestration endpoints, not on local shell access. ### PoC **Environment assumptions** - PinchTab `v0.8.4` - Windows host - Valid API token with access to instance lifecycle endpoints **Example sequence** ```bash curl -X POST http://HOST:9867/instances/launch \ -H "Authorization: Bearer <TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "name": "poc'\''; Start-Process calc; $x='\''", "mode": "headless" }' ``` Then: ```bash curl -X POST http://HOST:9867/instances/<INSTANCE_ID>/stop \ -H "Authorization: Bearer <TOKEN>" ``` If the payload survives the launch path and reaches the vulnerable cleanup code, the injected PowerShell executes when the Windows cleanup routine runs. ### Impact 1. Arbitrary PowerShell command execution on Windows as the PinchTab process user. 2. Full compromise of data and processes accessible to that user account. 3. Possible persistence or host-level follow-on actions within the same user security context. 4. Potential repeated execution in restart-heavy environments if the vulnerable cleanup path is triggered repeatedly. ### Scope And Limits 1. Windows only. 2. Requires authenticated, administrative-equivalent API access to instance lifecycle endpoints. 3. Does not by itself elevate beyond the privileges of the Windows user running PinchTab. 4. This is stronger than a policy bypass or low-risk hardening gap, but narrower than unauthenticated remote code execution. ### Suggested Remediation 1. Do not interpolate user-influenced values into PowerShell `-Command` strings. 2. Pass search terms through environment variables or structured arguments instead of code generation. 3. Keep strict validation on profile names, but do not rely on input validation alone as the primary defense. 4. Add regression tests covering PowerShell metacharacters in profile-derived values on Windows. ### **Steps to Reproduce:** **Environment Setup:** Target: PinchTab v0.8.4 (Windows build) Platform: Windows only **1. Launch Instance with Malicious Profile Name** ``` curl -X POST http://[server-ip]:9867/instances/launch \ -H "Authorization: Bearer <TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "name": "poc'\''; Start-Process calc; $x='\''", "mode": "headless" }' ``` **2. Stop Instance to Trigger Injection** ``` curl -X POST http://[server-ip]:9867/instances/<INSTANCE_ID>/stop \ -H "Authorization: Bearer <TOKEN>" ``` ### **Additional Observation — Repeated Execution (DoS Amplification)** **In environments where instances are automatically restarted (e.g., always-on mode), the cleanup routine is triggered repeatedly.** Because the injection occurs during cleanup, the payload is executed on every restart cycle: Continuous spawning of calc.exe processes Resource exhaustion System instability or crash ### **Impact** This vulnerability allows an authenticated attacker to execute arbitrary PowerShell commands on the Windows host running PinchTab. Impact - full host compromise including command execution, persistence, and data access; Root Cause - user-controlled input (profile name) is embedded into a PowerShell command without proper neutralization of special characters; Remediation - avoid constructing shell commands using string interpolation, enforce strict input validation (allowlist), and use structured command execution instead of powershell -Command. Additionally, because the injection is triggered during the cleanup routine, environments with automatic instance restart behavior may repeatedly execute the injected payload, leading to uncontrolled process creation and resource exhaustion. This enables a reliable denial-of-service condition in addition to remote code execution.

CVE-2026-33623 Affected PinchTab Versions

2 component(s)
Fixed Versions:
0.8.5
Product / Package Ecosystem Affected Versions Fixed Version
github.com/pinchtab/pinchtab/cmd/pinchtab
Go
< 0.8.5
0.8.5
github.com/pinchtab/pinchtab
Go
< 0.8.5
0.8.5

References

Frequently Asked Questions

What is CVE-2026-33623?
CVE-2026-33623 is a security vulnerability in PinchTab involving OS Command Injection via Profile Name in Windows Cleanup Routine Enables Arbitrary Command Execution under CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').
Which PinchTab versions are affected?
Affected versions include releases prior to 0.8.5 across affected packages: github.com/pinchtab/pinchtab/cmd/pinchtab, github.com/pinchtab/pinchtab.
What version fixes CVE-2026-33623?
Upgrading to 0.8.5 (or the latest patched release for your respective branch) resolves the vulnerability.
Is github.com/pinchtab/pinchtab/cmd/pinchtab affected?
Yes, github.com/pinchtab/pinchtab/cmd/pinchtab is affected in releases prior to 0.8.5. Upgrade your dependency to 0.8.5 or later.
Is github.com/pinchtab/pinchtab affected?
Yes, github.com/pinchtab/pinchtab is affected in releases prior to 0.8.5. Upgrade your dependency to 0.8.5 or later.
What is the CVSS score of CVE-2026-33623?
CVE-2026-33623 has a CVSS v3.1 base score of 6.7 (MODERATE) with vector string CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:L.
What CWE is associated with CVE-2026-33623?
CVE-2026-33623 is classified under CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection') (The product constructs all or part of an OS command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended OS command when it is sent to a downstream component.).
How can I check Go dependencies for CVE-2026-33623?
Run the dependency tree command: 'inspect dependencies for github.com/pinchtab/pinchtab/cmd/pinchtab'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-p8mm-644p-phmh",
  "modified" : "2026-03-27T21:19:09Z",
  "published" : "2026-03-24T19:46:39Z",
  "aliases" : [ "CVE-2026-33623" ],
  "summary" : "PinchTab: OS Command Injection via Profile Name in Windows Cleanup Routine Enables Arbitrary Command Execution",
  "details" : "### Summary\nPinchTab `v0.8.4` contains a Windows-only command injection issue in the orphaned Chrome cleanup path. When an instance is stopped, the Windows cleanup routine builds a PowerShell `-Command` string using a `needle` derived from the profile path. In `v0.8.4`, that string interpolation escapes backslashes but does not safely neutralize other PowerShell metacharacters.\n\nIf an attacker can launch an instance using a crafted profile name and then trigger the cleanup path, they may be able to execute arbitrary PowerShell commands on the Windows host in the security context of the PinchTab process user.\n\nThis is not an unauthenticated internet RCE. It requires authenticated, administrative-equivalent API access to instance lifecycle endpoints, and the resulting command execution inherits the permissions of the PinchTab OS user rather than bypassing host privilege boundaries.\n\n### Details\n**Issue 1 — PowerShell command string built with interpolated user-influenced data (`internal/bridge/cleanup_windows.go` in `v0.8.4`):**\n\n```\nfunc findPIDsByPowerShell(needle string) []int {\n    escaped := strings.ReplaceAll(needle, `\\`, `\\\\`)\n    cmd := exec.Command(\"powershell\", \"-NoProfile\", \"-Command\",\n        fmt.Sprintf(`Get-CimInstance Win32_Process -Filter \"Name='chrome.exe'\" | `+\n            `Where-Object { $_.CommandLine -like '*%s*' } | `+\n            `Select-Object -ExpandProperty ProcessId`, escaped))\n}\n```\n\nThe `needle` value is interpolated directly into a PowerShell command string. Escaping backslashes alone is not sufficient to make arbitrary user-controlled content safe inside a PowerShell expression.\n\n**Issue 2 — `needle` is derived from launchable profile names:**\n\nThe cleanup path uses:\n\n```\nfindPIDsByPowerShell(fmt.Sprintf(\"--user-data-dir=%s\", profileDir))\n```\n\nThe profile directory is derived from the instance/profile name used during launch. In `v0.8.4`, profile name validation rejected path traversal characters such as `/`, `\\`, and `..`, but it did not comprehensively block PowerShell metacharacters such as single quotes or statement separators.\n\n**Issue 3 — Trigger path is reachable through normal instance lifecycle APIs:**\n\nThe attack path described in the report uses:\n\n1. `POST /instances/launch` with a crafted `name`\n2. `POST /instances/{id}/stop` to trigger the cleanup routine\n\nThat means exploitability depends on access to privileged orchestration endpoints, not on local shell access.\n\n### PoC\n**Environment assumptions**\n\n- PinchTab `v0.8.4`\n- Windows host\n- Valid API token with access to instance lifecycle endpoints\n\n**Example sequence**\n\n```bash\ncurl -X POST http://HOST:9867/instances/launch \\\n  -H \"Authorization: Bearer <TOKEN>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"poc'\\''; Start-Process calc; $x='\\''\",\n    \"mode\": \"headless\"\n  }'\n```\n\nThen:\n\n```bash\ncurl -X POST http://HOST:9867/instances/<INSTANCE_ID>/stop \\\n  -H \"Authorization: Bearer <TOKEN>\"\n```\n\nIf the payload survives the launch path and reaches the vulnerable cleanup code, the injected PowerShell executes when the Windows cleanup routine runs.\n\n### Impact\n1. Arbitrary PowerShell command execution on Windows as the PinchTab process user.\n2. Full compromise of data and processes accessible to that user account.\n3. Possible persistence or host-level follow-on actions within the same user security context.\n4. Potential repeated execution in restart-heavy environments if the vulnerable cleanup path is triggered repeatedly.\n\n### Scope And Limits\n1. Windows only.\n2. Requires authenticated, administrative-equivalent API access to instance lifecycle endpoints.\n3. Does not by itself elevate beyond the privileges of the Windows user running PinchTab.\n4. This is stronger than a policy bypass or low-risk hardening gap, but narrower than unauthenticated remote code execution.\n\n### Suggested Remediation\n1. Do not interpolate user-influenced values into PowerShell `-Command` strings.\n2. Pass search terms through environment variables or structured arguments instead of code generation.\n3. Keep strict validation on profile names, but do not rely on input validation alone as the primary defense.\n4. Add regression tests covering PowerShell metacharacters in profile-derived values on Windows.\n\n\n\n\n### **Steps to Reproduce:**\n\n**Environment Setup:**\nTarget: PinchTab v0.8.4 (Windows build)\nPlatform: Windows only\n\n**1. Launch Instance with Malicious Profile Name**\n\n```\ncurl -X POST http://[server-ip]:9867/instances/launch \\\n  -H \"Authorization: Bearer <TOKEN>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"poc'\\''; Start-Process calc; $x='\\''\",\n    \"mode\": \"headless\"\n  }'\n```\n\n**2. Stop Instance to Trigger Injection**\n\n```\ncurl -X POST http://[server-ip]:9867/instances/<INSTANCE_ID>/stop \\\n  -H \"Authorization: Bearer <TOKEN>\"\n```\n\n### **Additional Observation — Repeated Execution (DoS Amplification)**\n\n**In environments where instances are automatically restarted (e.g., always-on mode), the cleanup routine is triggered repeatedly.**\n\nBecause the injection occurs during cleanup, the payload is executed on every restart cycle:\nContinuous spawning of calc.exe processes\nResource exhaustion\nSystem instability or crash\n\n### **Impact**\n\nThis vulnerability allows an authenticated attacker to execute arbitrary PowerShell commands on the Windows host running PinchTab. Impact - full host compromise including command execution, persistence, and data access; Root Cause - user-controlled input (profile name) is embedded into a PowerShell command without proper neutralization of special characters; Remediation - avoid constructing shell commands using string interpolation, enforce strict input validation (allowlist), and use structured command execution instead of powershell -Command.\n\nAdditionally, because the injection is triggered during the cleanup routine, environments with automatic instance restart behavior may repeatedly execute the injected payload, leading to uncontrolled process creation and resource exhaustion. This enables a reliable denial-of-service condition in addition to remote code execution.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:L"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/pinchtab/pinchtab/cmd/pinchtab"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "0.8.5"
      } ]
    } ],
    "database_specific" : {
      "last_known_affected_version_range" : "<= 0.8.4"
    }
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/pinchtab/pinchtab"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "0.8.5"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/pinchtab/pinchtab/security/advisories/GHSA-p8mm-644p-phmh"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-33623"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/pinchtab/pinchtab/commit/25b3374bdcdf0dad32c44d5d726bf953238cd8bd"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/pinchtab/pinchtab"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-400", "CWE-78" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-03-24T19:46:39Z",
    "nvd_published_at" : "2026-03-26T21:17:06Z"
  }
}