ClickMigrate CVE-2026-68549
LOWAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessInject crafted migration name via CI/CD
-
ExploitPass traversal payload to revision -m
-
ExecutionEscape migrations directory
-
ImpactWrite .sql file to arbitrary writable path
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that an attacker can control or influence the migration name passed to the |
| Impact | This is a low-severity, low-priority issue despite being a genuine path traversal (CWE-22). The provided CVSS 3.1 vector (AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N, base 3.3) is internally consistent and credible: it describes a locally-exploitable flaw requiring low privileges (PR:L) - the attacker must already be able to invoke the |
| Exploit ScenarioDerived | A CI/CD pipeline or automation wrapper invokes ClickMigrate's |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 16, 2026
Path traversal in ClickMigrate's revision command lets a crafted migration name supplied via the -m argument escape the intended migrations directory and cause a .sql file to be created at an arbitrary path writable by the user running the tool. The flaw affects pip package clickmigrate versions before 1.0.3 and is only reachable when an attacker can influence the migration name passed to the command - for example an insecure CI/CD pipeline or automation that forwards untrusted input such as branch names or PR titles into revision -m; per the CVSS vector (AV:L, PR:L) the attacker needs a local execution path with user-level privileges rather than network access to a default install. Impact is limited to file creation in user-writable locations with no code execution, no data read or exfiltration, and no confidentiality impact (C:N/I:L/A:N), so this is a low-severity, low-priority issue; no public exploit code was identified at time of analysis and the issue is not confirmed actively exploited (CISA KEV). A vendor-released patch is available: ClickMigrate 1.0.3.
RemediationAI
Vendor-released patch: ClickMigrate 1.0.3 - upgrade the clickmigrate package to 1.0.3 or later (pip install --upgrade clickmigrate) and re-deploy any CI/CD runners that vendor the tool; the advisory is GHSA-vgf9-9mxx-hq54 and the fix is commit 6b1f2c0202630a82252b3331aa57e64327e112b6. If upgrading cannot be done immediately, the primary compensating control is to break the untrusted-input path: never forward variables such as branch names, PR titles, or webhook payload fields directly into revision -m - instead map them through an explicit allow-list or a sanitizing wrapper (e.g. strip everything outside [a-zA-Z0-9_] before invocation, mirroring the upstream fix), and validate the argument before the command runs. Secondarily, restrict who or what can invoke the revision command (dedicated low-privilege CI service account, restricted pipeline triggers) and constrain the working directory and filesystem ACLs so that account cannot write outside the repository's migrations directory; note that these are containment measures that reduce blast radius rather than eliminate the traversal. Trade-off to expect when patching: 1.0.3's sanitizer removes all non-alphanumeric characters from migration names, so any existing automation that relies on special characters in -m values will produce differently named files and should be re-tested. Because exploitation requires the attacker to already influence a local command invocation (AV:L/PR:L) and the worst case is creation of a .sql file in a user-writable location, this should be scheduled as low-priority maintenance rather than an emergency change.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
ClickMigrate is a Python migration-management CLI (distributed as the pip package clickmigrate, CPE pkg:pip/clickmigrate) whose revision command generates timestamped .sql migration files inside a migrations directory. The vulnerable code lives in src/clickmigrate/manager.py in create_revision(self, message: str), which derived a filename component from the user-supplied -m message by only lowercasing the string and replacing spaces and hyphens with underscores: safe_name = message.lower().replace(" ", "_").replace("-", "_"). Because forward/back slashes, dots and other path-significant characters were never neutralized, input such as ../../foo survived into the constructed output path and allowed the revision command to write its generated .sql file outside the intended migrations directory. The root cause is CWE-22 (Improper Limitation of a Pathname to a Restricted Directory / Path Traversal): a user-controlled string is concatenated into a filesystem path without canonicalization or allow-list validation. The upstream fix (commit 6b1f2c0202630a82252b3331aa57e64327e112b6) prepends import re and replaces the naive transformation with safe_name = re.sub(r"[^a-zA-Z0-9_]", "", message.lower()).replace(" ", "_").replace("-", "_"), stripping every character outside [a-zA-Z0-9_] before the (now largely redundant) space/hyphen replacements, which eliminates both traversal sequences and filename separators.
Know when Python 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
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
Local input/config-dependent vector and the need to invoke the tool warrant AV:L and PR:L; impact is limited file creation (I:L) with no confidentiality or availability loss.
Primary rating from GitHub Advisory.
CVSS VectorGitHub Advisory
DescriptionGitHub Advisory
Impact
A path traversal vulnerability in the revision command allowed a crafted migration name supplied via the -m argument to escape the intended migrations directory.
Under specific conditions, an attacker could cause the tool to create a .sql file in an arbitrary location writable by the user executing the command.
This issue is only exploitable if an attacker can influence the migration name passed to the revision command, such as through an insecure automation or CI/CD pipeline that forwards untrusted input.
Patches
The vulnerability has been fixed in version 1.0.3 by validating and sanitizing the migration name to prevent directory traversal.
Users should upgrade to version 1.0.3 or later.
Workarounds
Do not pass untrusted input to the revision -m argument.
If upgrading is not immediately possible, ensure that only trusted users or automation can invoke the revision command and that migration names are validated before being passed to the tool.
References
- Fix commit: https://github.com/QueueForge/ClickMigrate/commit/6b1f2c0202630a82252b3331aa57e64327e112b6
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
Affected Products (CPE)GitHub Advisory
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
GHSA-vgf9-9mxx-hq54
NVD
CVE.org
Exploit-DB