Skip to main content

Dockhand EUVDEUVD-2026-115871

| CVE-2026-121449 HIGH
Information Exposure (CWE-200)
2026-11-03 VulnCheck GHSA-vvw2-c8c7-h7pp
7.1
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain stack webhook secret or stacks:start account
  2. Delivery
    Call Git-stack webhook, manual-deploy, or create-and-deploy endpoint
  3. Exploit
    deployStack() returns unfiltered resolvedSecrets array
  4. Execution
    Read plaintext stored and external-provider secrets from response
  5. Impact
    Reuse harvested 1Password/Vault/Doppler credentials downstream

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V14 - Data Protection Data exposure prevention
MITRE ATT&CK

2 techniques across 2 tactics: Collection, Discovery

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires a Git stack in Dockhand that has at least one resolvable secret bound to it - either a stored secret or a value from an external provider (1Password, Bitwarden, HashiCorp Vault, Infisical, Doppler, or Psono). The attacker must hold one of two things: the stack's webhook secret (triggering POST/GET /api/git/stacks/{id}/webhook), or a user account with the stacks:start permission (triggering the manual Git deploy /api/git/stacks/{id}/deploy or create-with-'Deploy now' /api/git/stacks endpoints). Notably the stacks:start path exposes secrets even to users who lack the secrets permission that Dockhand otherwise requires to bind a provider. Affected versions are 1.0.47 through 1.0.53 only; the non-Git route POST /api/stacks/{name}/deploy is not affected because it already returns only {success, output/error}. Limiting factors: this is not anonymous (needs the webhook secret or stacks:start), only Git-stack code paths are vulnerable, and a stack with no bound secrets leaks nothing. There is no configuration toggle to mitigate it short of upgrading to 1.0.54.

Impact

This is a genuine but bounded-priority confidentiality issue rather than an inflated high-CVSS score. The input CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:H) scores 7.1 and is internally consistent with the description: network-reachable HTTP endpoints, low complexity, high confidentiality impact, and crucially PR:L - exploitation requires either possession of a stack's webhook secret or a user account with the stacks:start permission, so it is not an anonymous internet-wide bug. Integrity and availability impact are correctly N; this only leaks data. The vuln.today decision label is 'this_week', consistent with a real but non-emergency priority. It is NOT in CISA KEV, so there is no confirmed active exploitation, and no EPSS score was provided in the input, so probabilistic exploitation likelihood cannot be quantified here - that is a missing signal, not a low one. A detailed public PoC reference exists (the GHSA advisory includes a working curl reproduction and UI steps); it is not provided as packaged weaponized exploit code, but the trigger is fully documented. The signals do not conflict: a moderate-privilege confidentiality flaw with a documented reproduction and an available fix. The sharpest escalation factor is the one the CVSS score cannot capture - the leaked data is upstream provider secrets (1Password, Bitwarden, Vault, Infisical, Doppler, Psono) plus the fact that Git forges persist webhook response bodies in delivery history, so a single leaked webhook reply can expose high-value credentials to anyone with repository-admin access at the forge or anyone reading CI logs.

Exploit ScenarioDerived

An operator holding only a stack's webhook secret (a credential meant solely to trigger redeploys) sends a POST to /api/git/stacks/{id}/webhook and receives a JSON body containing resolvedSecrets - the plaintext values of every stored and external-provider secret bound to that stack. Alternatively, a low-privilege user with stacks:start but without the secrets permission clicks Deploy and reads the same values from the SSE 'result' event in browser network traffic. A detailed public PoC (curl command and UI steps) is documented in the GHSA advisory.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Nov 03, 2026

Plaintext secret disclosure in Dockhand 1.0.47 through 1.0.53 exposes stored stack secrets and values pulled from external providers (1Password, Bitwarden, HashiCorp Vault, Infisical, Doppler, Psono) to authenticated callers who either hold a Git stack's webhook secret or hold the stacks:start permission. The deployStack() result object carries a resolvedSecrets array, and three Git-stack endpoints - the webhook GET/POST, the manual deploy SSE stream, and create-with-'Deploy now' - return that object unfiltered, so the credentials also get persisted in Git forge delivery histories and printed into CI logs. Finsys fixed the leak in 1.0.54; no public exploit identified at time of analysis, and the 7.1 score reflects high confidentiality impact with no integrity or availability effect (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N).

RemediationAI

Vendor-released patch: 1.0.54 - upgrade all Dockhand instances running 1.0.47 through 1.0.53 to 1.0.54 or later; there is no configuration option or environment variable that suppresses the resolvedSecrets field, so upgrading is the only complete fix (advisory: https://github.com/Finsys/dockhand/security/advisories/GHSA-w9qx-qg64-f8pf, fixing commit: https://github.com/Finsys/dockhand/commit/a08843a8d5ab1d91fa2c6c392919f9117d582471). Until the upgrade is in place the vendor-recommended workarounds are: stop printing or logging webhook reply bodies in scripts and CI and parse only success/skipped/exitCode from the response; do not point Git forge push hooks (GitHub, GitLab, Gitea/Forgejo) at Dockhand webhook endpoints, because forges store the full reply body in their delivery history, and audit existing delivery histories for leaked values; and rotate the secrets of any stack whose webhook replies may have been logged or stored. Because disclosure requires either the stack's webhook secret or an account holding stacks:start - and the stacks:start path leaks secrets even to users who lack the secrets permission - narrowing who holds those credentials and permission reduces exposure but does not remove the flaw. Treat any Git stack that was deployed or webhook-triggered on a vulnerable version as potentially compromised: rotate the resolved credentials at their source providers (1Password, Bitwarden, Vault, Infisical, Doppler, Psono) and in Dockhand's stored secrets, and review forge delivery logs and CI output for plaintext values.

Affected VersionsENISA

dockhand 1.0.47 <1.0.54

Affected Packages

euvd dockhand fix: 1.0.54

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Dockhand is a Finsys container/stack management application built on SvelteKit and Node.js (cpe:2.3:a:finsys:dockhand). The root cause is an information-exposure class defect (CWE-200, with CWE-201 tagged in the upstream advisory): the deploy pipeline in src/lib/server/stacks.ts sets result.resolvedSecrets = Object.values(secretVars) unconditionally at line 3381 (field declared at line 117), propagating it through deployGitStack in src/lib/server/git.ts (lines 1609-1669). That array is the materialized plaintext of every secret variable bound to the stack, and it was intended purely as an internal feed for the deploy-history log redactor (RunRecorder.addSecrets) - there is no configuration option or environment variable that suppresses it. Because the field lives on a shared result type, three Git-stack HTTP handlers serialize it straight out: the webhook handler returns json(result) (src/routes/api/git/stacks/[id]/webhook/+server.ts), the manual deploy handler streams send('result', result) over SSE (…/[id]/deploy/+server.ts line 46), and the create-with-deploy handler returns deployResult (…/git/stacks/+server.ts line 234). The parallel non-Git route POST /api/stacks/{name}/deploy already sanitizes its payload to {success, output} or {success, error} and is not affected. The flaw was introduced by commit b2eb0b5 ('feat(stacks): live compose output and deploy history (#1499)'), first shipped in v1.0.47, and confirmed present in v1.0.51, v1.0.53 and on main at a08843a8d5ab1d91fa2c6c392919f9117d582471. The trigger is not a memory-safety or timing condition: it is simply the absence of field stripping on three response paths, and the resulting exposure is silent - no error or audit signal distinguishes a leaking webhook reply from a normal one.

Know when Dockhand gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 7.1 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
vuln.today AI 6.5 MEDIUM

Network HTTP endpoints with low complexity, but PR:L because a webhook secret or stacks:start permission is required; confidentiality-only impact so I:N/A:N, and no scope change in CVSS terms.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Dockhand from 1.0.47 before 1.0.54 exposes plaintext stack secrets because deployStack() attaches resolved secret values to its result as resolvedSecrets, which Git-stack routes return unfiltered. Holders of a stack's webhook secret or users with stacks:start permission can trigger the Git stack webhook, manual deploy, or create-and-deploy endpoints to receive stored and external-provider secrets such as 1Password or Vault values.

Technical POC Analysis

Note on the record: the supplied GHSA text labels the issue Moderate (6.5), "No known CVE", CWE-200 and CWE-201.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

CVE-2026-121449 in Dockhand versions 1.0.47 through 1.0.53 allows authenticated users to retrieve plaintext secrets from integrated credential providers, potentially exposing sensitive infrastructure credentials across the organization. This affects any team using Dockhand for secret management with Git-based deployments, and could lead to unauthorized access to critical systems if exploited.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

Prevalence
Low
niche self-hosted Docker-stack management app, no broad enterprise footprint
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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