Skip to main content

ClickMigrate CVE-2026-68549

LOW
Path Traversal (CWE-22)
2026-10-16 https://github.com/QueueForge/ClickMigrate GHSA-vgf9-9mxx-hq54
3.3
CVSS 3.1 · GitHub Advisory
View

Attack ChainAIDerived

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

  1. Access
    Inject crafted migration name via CI/CD
  2. Exploit
    Pass traversal payload to revision -m
  3. Execution
    Escape migrations directory
  4. Impact
    Write .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 revision -m argument - for example an insecure CI/CD pipeline or automation that forwards untrusted input (branch names, PR titles, webhook fields) directly into the command. It is NOT remotely exploitable against a default install: the attacker needs an execution path into the local revision command invocation (PR:L, AV:L). Limiting factors: impact is capped to creating a .sql file in a location writable by the user running the tool (no overwrite of arbitrary content types, no code execution, no read/exfiltration), and installations that only ever pass trusted, hard-coded migration names are not exploitable at all.

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 revision command or influence its -m argument - with only a limited integrity impact (I:L, arbitrary .sql file creation) and no confidentiality or availability impact. No EPSS score was provided, there is no CISA KEV listing, and no public exploit code was identified; the only exploitation primitive is the fix commit diff, which confirms the root cause (unsanitized message used to build a filename) but is not a weaponized PoC. The description and CVSS agree with each other (both point to a local/input-dependent, non-remote vector), so there are no conflicting signals here. The practical risk is almost entirely gated by the deployment precondition the vendor states explicitly: exploitation requires untrusted input to reach revision -m, e.g. via an insecure CI/CD pipeline. Absent that specific misconfiguration, the flaw is not reachable by an external attacker. Net: a real bug worth patching opportunistically, not an urgent priority.

Exploit ScenarioDerived

A CI/CD pipeline or automation wrapper invokes ClickMigrate's revision -m <name> using a migration name derived from untrusted input (e.g. a branch name, PR title, or webhook field). An attacker supplies a crafted name containing traversal sequences (e.g. ../../), causing the tool to write a .sql file outside the intended migrations directory to any path writable by the executing user. No public exploit code was identified at time of analysis; the fix commit confirms the unsanitized-filename root cause.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available

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

Alert me

AnalysisAIv1 – 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

pypi clickmigrate fix: 1.0.3

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

GitHub Advisory PRIMARY 3.3 LOW
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
vuln.today AI 3.3 LOW

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.

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

Primary rating from GitHub Advisory.

CVSS VectorGitHub Advisory

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
Low
Availability
None

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

Prevalence
Rare
obscure single-vendor pip package for ClickHouse migrations, tiny footprint
Threat Intel
1
1 source
Data Quality
3 sources
Confidence: Low
NVD CVE.org GHSA GitHub

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 LOW
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.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· derived
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact· derived
Low

Priority Score

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

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

pkg:pip/clickmigrate

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

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

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

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