Description
Dagu is a workflow engine with a built-in Web user interface. Prior to 2.2.4, the dagRunId request field accepted by the inline DAG execution endpoints is passed directly into filepath.Join to construct a temporary directory path without any format validation. Go's filepath.Join resolves .. segments lexically, so a caller can supply a value such as ".." to redirect the computed directory outside the intended /tmp/<name>/<id> path. A deferred cleanup function that calls os.RemoveAll on that directory then runs unconditionally when the HTTP handler returns, deleting whatever directory the traversal resolved to. With dagRunId set to "..", the resolved directory is the system temporary directory (/tmp on Linux). On non-root deployments, os.RemoveAll("/tmp") removes all files in /tmp owned by the dagu process user, disrupting every concurrent dagu run that has live temp files. On root or Docker deployments, the call removes the entire contents of /tmp, causing a system-wide denial of service. This vulnerability is fixed in 2.2.4.
Published: 2026-03-13
Score: 9.1 Critical
EPSS: < 1% Very Low
KEV: No
Impact: System-wide Denial of Service
Action: Immediate Patch
AI Analysis

Impact

Dagu is a workflow engine that uses a web UI to execute inline DAGs. Prior to version 2.2.4, the dagRunId request field is concatenated into a temporary directory path using filepath.Join without sanitization. Because Go’s filepath.Join treats .. segments lexically, a requester can supply a value such as ".." which causes the resolved directory to point outside the intended /tmp/<name>/<id> location. The code then runs a cleanup that calls os.RemoveAll on this directory, deleting whatever path was resolved. Consequently, a crafted request can delete arbitrary files or directories. When dagRunId is "..", the resulting path is the system temporary directory (/tmp on Linux). For non‑root deployments, this deletes all files in /tmp that belong to the dagu process user and disrupts concurrent runs. For root or container deployments, it removes the entire /tmp contents, leading to a system‑wide denial of service. The vulnerability is a classic CWE‑22 Path Traversal flaw and the impact is catastrophic file removal and availability loss.

Affected Systems

The affected product is Dagu from vendor dagu-org. Versions prior to 2.2.4, as identified by the CPE cpe:2.3:a:dagu:dagu:*:*:*:*:*:*:*:* are vulnerable. The issue exists in the inline DAG execution endpoints of the web UI.

Risk and Exploitability

The CVSS score for this vulnerability is 9.1, indicating a high‑severity risk. The EPSS score is reported as less than 1%, suggesting a low likelihood of widespread exploitation at the moment, and the problem is not listed in the CISA KEV catalog. Attack conditions require the ability to send an HTTP request to the inline DAG execution endpoint with a crafted dagRunId value (e.g., ".."). The path traversal can be performed over the network if the Dagu UI is exposed, so remote attackers with network access to the service can potentially exploit it. Once exploited, the attacker can cause either localized trouble—deleting temporary files used by the dagu process on non‑privileged deployments—or a full system denial of service when running as root or within a Docker container. Inferred from the description, the primary vector is a remote HTTP request to an exposed endpoint, although the description does not state the exact exposure level.

Generated by OpenCVE AI on March 18, 2026 at 16:24 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Dagu to version 2.2.4 or later to apply the vendor fix.
  • If an immediate upgrade is not possible, restrict network access to the inline DAG execution endpoints to trusted hosts or disable the inline execution feature until a patch is applied.
  • After applying the fix, verify that the temporary directory path is correctly constrained and monitor / to ensure no unexpected deletions occur.

Generated by OpenCVE AI on March 18, 2026 at 16:24 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-m4q3-457p-hh2x Dagu: Path Traversal via `dagRunId` in Inline DAG Execution
History

Wed, 18 Mar 2026 15:30:00 +0000

Type Values Removed Values Added
First Time appeared Dagu
Dagu dagu
CPEs cpe:2.3:a:dagu:dagu:*:*:*:*:*:*:*:*
Vendors & Products Dagu
Dagu dagu

Mon, 16 Mar 2026 10:15:00 +0000

Type Values Removed Values Added
First Time appeared Dagu-org
Dagu-org dagu
Vendors & Products Dagu-org
Dagu-org dagu

Fri, 13 Mar 2026 20:15:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Fri, 13 Mar 2026 19:45:00 +0000

Type Values Removed Values Added
Description Dagu is a workflow engine with a built-in Web user interface. Prior to 2.2.4, the dagRunId request field accepted by the inline DAG execution endpoints is passed directly into filepath.Join to construct a temporary directory path without any format validation. Go's filepath.Join resolves .. segments lexically, so a caller can supply a value such as ".." to redirect the computed directory outside the intended /tmp/<name>/<id> path. A deferred cleanup function that calls os.RemoveAll on that directory then runs unconditionally when the HTTP handler returns, deleting whatever directory the traversal resolved to. With dagRunId set to "..", the resolved directory is the system temporary directory (/tmp on Linux). On non-root deployments, os.RemoveAll("/tmp") removes all files in /tmp owned by the dagu process user, disrupting every concurrent dagu run that has live temp files. On root or Docker deployments, the call removes the entire contents of /tmp, causing a system-wide denial of service. This vulnerability is fixed in 2.2.4.
Title Dagu has a Path Traversal via `dagRunId` in Inline DAG Execution
Weaknesses CWE-22
References
Metrics cvssV3_1

{'score': 9.1, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:H'}


cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-03-13T19:43:18.359Z

Reserved: 2026-03-09T21:59:02.686Z

Link: CVE-2026-31886

cve-icon Vulnrichment

Updated: 2026-03-13T19:43:13.196Z

cve-icon NVD

Status : Analyzed

Published: 2026-03-13T19:54:37.690

Modified: 2026-03-18T15:24:15.453

Link: CVE-2026-31886

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-03-23T13:40:11Z

Weaknesses