CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-FHGH-WQ4Q-R37X

GHSA-FHGH-WQ4Q-R37X: Remote Code Execution via Sigstore Signature Verification Bypass in uniget CLI

Alon Barad
Alon Barad
Software Engineer

Aug 17, 2026·5 min read·12 visits

Executive Summary (TL;DR)

A programming mistake in the uniget CLI reversed the check for disabling metadata signature verification. As a result, the application only verifies cryptographic signatures when the user explicitly requests to ignore them, allowing unauthenticated remote code execution via poisoned metadata in default installations.

A high-severity logic inversion flaw in the uniget CLI completely bypasses Sigstore cryptographic signature verification on metadata files by default. If an attacker can poison the package metadata cache or repository, they can execute arbitrary OS commands under the privileges of the active user.

Vulnerability Overview

The uniget CLI is a package management and download tool written in Go that retrieves tools and applications from various sources. To determine how to fetch and check the status of local binaries, the utility relies on a central metadata catalog (metadata.json). This metadata structure contains specialized testing parameters, including version-checking directives executed directly on the host operating system.

To prevent the execution of untrusted or modified instructions, the system relies on Sigstore cryptographic signatures to validate the catalog's integrity. Under normal operation, the application must confirm the authenticity of the metadata using the corresponding signature bundle (metadata.json.sigstore.json) before loading any configurations. This validation acts as the primary gate to prevent malicious command execution through untrusted package catalog files.

In version 0.27.4, developers introduced a logical error that disabled this verification loop under default configurations. This regression allowed the application to load unverified catalog files without raising warnings or execution errors. If an attacker is capable of local file system modification, cache injection, or adversary-in-the-middle manipulation, they can inject malicious instructions into the command-line executor.

Root Cause Analysis

The vulnerability stems from a logical negation error within the verification gate configuration checks. In version 0.27.1, introduced to address an injection vector, the application checked Sigstore signatures unconditionally. Developers subsequently introduced the UNIGET_IGNORE_METADATA_SIGNATURE environment variable to permit debugging or offline usage without checking cryptographic signatures.

Initially, the safety gate verified signatures if the environment variable was not set to "true". In commit b68a27d5 (released in version 0.27.4), developers altered the conditional branch to accept any non-empty value. However, the logical negation operator was omitted during this refactoring process.

The resulting conditional statement checked if the length of the environment variable was greater than zero. If the variable was empty or absent, the verification code path was bypassed entirely. Consequently, the application failed to call the underlying VerifySigstoreBundle function unless the user explicitly defined the environment variable intended to disable the check.

Code Analysis

The logic inversion is located in two distinct code paths within the application. The primary gate resides in internal/config/update.go inside the LoadMetadata function, which determines whether to invoke the verification routine.

// Vulnerable logic in v0.27.4 through v0.28.8
func (c *Config) LoadMetadata(filename string) (loadedTools *tool.Tools, err error) {
    // The signature check ONLY executes if the IGNORE environment variable is set.
    if len(os.Getenv("UNIGET_IGNORE_METADATA_SIGNATURE")) > 0 {
        _, err = security.VerifySigstoreBundle(
            filename,
            filename+".sigstore.json",
            // ... additional signature validation parameters
        )
        if err != nil {
            return nil, fmt.Errorf("error verifying sigstore bundle for metadata: %s", err)
        }
    }
    loadedTools, err = tool.LoadFromFile(filename)

A matching logic error exists in cmd/uniget/main.go within the re-download decision flow. The application evaluates whether a missing .sigstore.json signature bundle should trigger a fresh metadata download.

// Vulnerable download decision logic
if !myos.FileExists(configuration.GetMetadataFile()) ||
    configuration.AutoUpdate ||
    (len(os.Getenv("UNIGET_IGNORE_METADATA_SIGNATURE")) > 0 &&
        !myos.FileExists(configuration.GetMetadataFile()+".sigstore.json")) {

This check prevents uniget from recognizing a missing signature file as an error condition. In a default state, the execution bypasses download routines for missing signature files, rendering the overall cryptographic defense mechanism inactive.

Exploitation Methodology

An attacker can exploit this logic inversion to trigger remote code execution by replacing or poisoning the local metadata.json catalog file. When the target user initiates a tool version check, the CLI reads the metadata configuration and executes the code block defined under the check parameter.

The primary command injection sink is located within the RunVersionCheck function of the tool module:

// pkg/tool/tool.go
func (tool *Tool) RunVersionCheck() (string, error) {
    logging.Tracef("Running version check for %s: %s", tool.Name, tool.Check)
    cmd := exec.Command("/bin/bash", "-c", tool.Check+" | tr -d '\\n'")

Because the input to the /bin/bash system executor is derived directly from the unverified JSON structure, an attacker can insert a shell command inside the check attribute of any tool definition. When the victim executes commands such as uniget version <tool_name>, the shell command executes with the permissions of the local user.

This exploitation chain does not require cryptographic keys or signature generation because the target binary never calls the verification sequence.

Impact Assessment

The impact of this logic bypass is high. Because the security gate intended to prevent arbitrary code execution was completely disabled in default installations, the safety of the application rested entirely on the security of the host cache and metadata distribution channels.

If an attacker compromises the distribution repository, hijacks metadata mirrors, or alters local cache files via a separate lower-privilege process, they can gain full shell control. The commands are processed within /bin/bash under the security context of the active terminal session, allowing the attacker to read, modify, or delete files, perform privilege escalation, or establish persistent remote access.

The vulnerability is tracked under GitHub Security Advisory GHSA-FHGH-WQ4Q-R37X with a CVSS v3.1 score of 7.8, reflecting the high potential impact to system confidentiality, integrity, and availability.

Remediation and Mitigation

To resolve the vulnerability, update the uniget installation to version 0.28.9 or higher. The patch reverses the evaluation check in both update.go and main.go, changing the logic from checking for a non-empty string to verifying that the string is empty.

// Patched logic in v0.28.9
if len(os.Getenv("UNIGET_IGNORE_METADATA_SIGNATURE")) == 0 {
    // Verification now executes under default configuration states

For systems where the application cannot be immediately updated, administrators can apply a manual workaround. Setting the UNIGET_IGNORE_METADATA_SIGNATURE environment variable to any non-empty value (such as 1) will force vulnerable versions of the binary to trigger the signature checking sequence.

> [!WARNING] > This workaround is a temporary measure designed to trigger verification on affected binaries. If the variable remains set after upgrading to version 0.28.9 or later, the patched binary will skip signature verification as originally intended.

Official Patches

uniget-orgOfficial fix commit implementing comparison reversal to fix logic bypass.

Fix Analysis (1)

Technical Appendix

CVSS Score
7.8/ 10
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H

Affected Systems

uniget CLI

Affected Versions Detail

Product
Affected Versions
Fixed Version
gitlab.com/uniget-org/cli
uniget-org
>= 0.27.4, < 0.28.90.28.9
AttributeDetail
CWE IDCWE-347
Attack VectorLocal
CVSS v3.17.8
ImpactRemote Code Execution (RCE)
Exploit StatusProof of Concept
CISA KEV StatusNo

MITRE ATT&CK Mapping

T1553.002Subvert Trust Controls: Code Signing
Defense Evasion
T1059.004Command and Scripting Interpreter: Unix Shell
Execution
T1195.001Supply Chain Compromise: Compromise Software Dependencies
Initial Access
CWE-347
Improper Verification of Cryptographic Signature

The software does not verify, or incorrectly verifies, the cryptographic signature for data.

Known Exploits & Detection

GitHub Security Advisory ContextDescribes vulnerability details and includes replication steps to simulate catalog poisoning.

Vulnerability Timeline

Vulnerability remediated in code commit 6d8efd8dbb5b76196508058f640457d27d4e6972
2026-08-10
Official release of patched version v0.28.9
2026-08-11
GitHub Advisory Database formally published GHSA-FHGH-WQ4Q-R37X
2026-08-17

References & Sources

  • [1]GHSA-FHGH-WQ4Q-R37X: Bypass of metadata signature verification
  • [2]uniget CLI Release v0.28.9
  • [3]Associated Command Injection Vulnerability (CVE-2026-45152)

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•1 day ago•CVE-2026-11748
6.9

CVE-2026-11748: Unauthenticated LDAP Injection in Central Dogma Server Authentication

An LDAP injection vulnerability exists in the centraldogma-server-auth-shiro module of LY Corporation Central Dogma before version 0.84.0. The search logic dynamically constructs LDAP search filters by interpolating user-provided usernames without escaping RFC 4515 metacharacters. Unauthenticated remote attackers can leverage this flaw to bypass authentication, enumerate directory hierarchies, and access unauthorized resources.

Alon Barad
Alon Barad
9 views•6 min read
•1 day ago•CVE-2026-11746
9.4

CVE-2026-11746: Use of Hard-coded ZooKeeper Replication Secret 'ch4n63m3' in Central Dogma Server

CVE-2026-11746 is a critical vulnerability in Central Dogma Server prior to version 0.84.0, where an embedded ZooKeeper replication secret silently falls back to a publicly known, hard-coded default string ('ch4n63m3'). Remote attackers with access to the replication network can authenticate as legitimate cluster peers, potentially leading to unauthorized data exposure, state manipulation, or complete cluster takeover.

Amit Schendel
Amit Schendel
7 views•6 min read
•1 day ago•CVE-2026-56665
4.2

CVE-2026-56665: Logical Validation Bypass in ZITADEL External JWT Identity Provider

A logical verification flaw in ZITADEL's external JWT Identity Provider validation allows attackers to bypass session expiration checks. If an incoming JWT lacks the 'exp' claim, the system skips validation entirely, creating an indefinitely valid session. This issue has been addressed in versions 3.4.12 and 4.15.2.

Alon Barad
Alon Barad
6 views•7 min read
•1 day ago•CVE-2026-59149
6.5

CVE-2026-59149: Sibling Directory Path Traversal in Mockoon Backend Server

CVE-2026-59149 identifies a directory traversal vulnerability in `@mockoon/commons-server`, the backend mock-server library powering the Mockoon application. The flaw occurs in the path containment validation logic used during raw file response generation. An unauthenticated attacker can exploit this weakness to retrieve arbitrary files from sibling directories sharing a common prefix with the designated static base directory.

Amit Schendel
Amit Schendel
9 views•5 min read
•1 day ago•CVE-2026-59148
8.8

CVE-2026-59148: Unauthenticated Administrative API and CORS Misconfiguration in Mockoon

An in-depth analysis of CVE-2026-59148, a high-severity flaw in Mockoon where unauthenticated administrative endpoints and a wildcard Cross-Origin Resource Sharing (CORS) policy allow remote execution, state poisoning, and credential theft.

Alon Barad
Alon Barad
10 views•6 min read
•1 day ago•CVE-2026-56666
4.8

CVE-2026-56666: Account Takeover via Improper Email Verification in ZITADEL Federated Identity Handler

An improper authentication vulnerability (CWE-287) in ZITADEL's external identity provider handler before version 4.15.3 allows remote attackers to perform complete account takeover. When auto-linking by email is enabled, ZITADEL verifies that the local target account has a verified email address but fails to verify if the external provider confirmed ownership of that same email. Attackers can exploit this by registering an unverified account with a victim's email address on a permissive external provider, leading to unauthorized account binding and persistent access.

Amit Schendel
Amit Schendel
7 views•7 min read