Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with migration permission
-
DeliveryCall data-migration delete API with crafted exportid
-
ExploitTraverse outside import directory via unvalidated path
-
ExecutionTrigger recursive remove on target
-
ImpactDestroy files and disrupt service
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 | Requires an authenticated Countly account possessing the data-migration permission (application administrator or a user explicitly granted migration rights) and that the data_migration plugin be enabled; the attacker then supplies a malicious exportid to the migration-deletion route in plugins/data_migration/api/api.js, which forwards it to clean_up_data in data_migration_helper.js without the path validation added in the fix. Exploitation is limited by that privileged role requirement - an unauthenticated or non-migration user cannot reach the sink - and by the deletion only affecting files/directories writable by the Countly server process; there is no confidentiality exposure, only destructive file/tree removal. Instances already upgraded to 24.05.50 or 25.03.44 (which add sanitizeFilename-based containment checks) are not affected. |
| Impact | The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H, base 8.1) describes a network-reachable, low-complexity attack that requires an authenticated account holding data-migration permission (PR:L) and no user interaction, with high integrity and availability impact but no confidentiality loss - consistent with a path-traversal-driven arbitrary file/directory deletion rather than data theft. No EPSS score, CISA KEV listing, or POC were supplied, so by the precision rules this is 'no public exploit identified at time of analysis'; the fix commits (764e2a1 / b652ee8) are the primary confirmed evidence. The real-world priority is moderate rather than severe: exploitation is gated behind an authenticated privileged role (admin or migration-permission user), which sharply narrows the threat population to insiders or attackers who have already compromised a privileged session, so this is better treated as a privilege-boundary/defense-in-depth fix than an externally wormable flaw. Note a mild tension between the CWE-22 path-traversal classification and the C:N rating - the bug enables destructive deletion, not file disclosure, so the high score is driven entirely by integrity/availability, which is correctly reflected in the vector. |
| Exploit ScenarioDerived | An authenticated Countly user who has (or has gained) the data-migration permission invokes the migration-deletion API with a crafted exportid containing path-traversal sequences; the unvalidated identifier is concatenated into a filesystem path that resolves outside the intended import directory and is passed to a recursive remove, deleting arbitrary writable files or whole directory trees. The result is data loss or service disruption for the Countly instance. No public exploit code was identified, but the patch diff clearly discloses the vulnerable sink and the exact validation that was missing. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 16, 2026
Arbitrary file and directory deletion in Countly Server (versions prior to 24.05.50 and 25.03.44) allows an authenticated user holding data-migration permission to pass a crafted exportid to the migration-deletion route and recursively remove any file or directory tree writable by the Countly server process, resulting in data loss and service disruption. The root issue is a path-traversal flaw (CWE-22) in plugins/data_migration/api/api.js in which the user-controlled exportid reaches clean_up_data in data_migration_helper.js without the sanitizeFilename-based containment checks introduced by the fix. The assessed CVSS 3.1 vector is AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H (base 8.1), confirming a network-reachable, low-complexity attack requiring an authenticated account (PR:L) with no user interaction, with high integrity and availability impact but no confidentiality exposure; no public exploit code was identified at time of analysis and there is no confirmed active exploitation (not in CISA KEV). Vendor fixes are available in 24.05.50 and 25.03.44.
RemediationAI
Upgrade to the vendor-fixed releases 24.05.50 (24.05 line) or 25.03.44 (25.03 line), which add safeDataMigrationId and safePathIn containment checks that reject traversal-bearing exportid values with HTTP 400 before any filesystem deletion occurs; the specific upstream fixes are commits 764e2a1d86f9af600113f77422d520338c214229 and b652ee8dafa91602705004d0edb602a91a0d845e, and the advisory is at https://github.com/Countly/countly-server/security/advisories/GHSA-5pmc-54j6-jcgq. If immediate upgrade is not possible, the most effective compensating control is to disable the data_migration plugin entirely (remove or rename plugins/data_migration so Countly does not load it) - this eliminates the attack surface but forfeits all import/export functionality, including legitimate migrations. A less disruptive option is to audit and strip data-migration permission from every account except the small set of administrators that genuinely need it, since the flaw requires that role (PR:L) to reach the deletion route; this reduces but does not remove risk, because any holder of that permission can still delete writable trees. Additional containment: run the Countly server process under a dedicated least-privilege operating-system account whose write access is scoped to the necessary Countly data, log and plugin directories, and mount or chmod those directories so the service cannot write outside them - the trade-off is that legitimate migrations may require temporarily widened permissions or manual file staging. Because no confidentiality loss is possible through this primitive, detection should focus on integrity: monitor for unexpected mass deletions in Countly-related directories and for requests to the data-migration deletion routes carrying exportid values containing slashes, dots, or encoded traversal sequences, and verify that backups of Countly data, configuration and logs are current and restorable before applying any temporary mitigation.
Affected VersionsENISA
Affected Packages
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
Countly Server is the Node.js backend of the Countly product-analytics platform, and the vulnerable component is its data_migration plugin, which imports and exports analytics data and maintains per-job artifacts under directories such as plugins/data_migration/import and the application log directory. The CPE string cpe:2.3:a:countly:countly-server:*:*:*:*:*:*:*:* identifies the affected package across all versions before the fixed releases, gated by the requirement that the data_migration plugin be enabled. The weakness class is CWE-22 (Improper Limitation of a Pathname to a Restricted Directory, i.e. path traversal): the authenticated deletion endpoint in plugins/data_migration/api/api.js takes the client-supplied exportid query parameter and forwards it, unsanitized, to clean_up_data('export'|'import', exportid, true) in plugins/data_migration/api/data_migration_helper.js, which concatenates the identifier into a filesystem path and calls remove recursively. Because Node.js path.resolve/path.join will happily collapse '..' segments, an identifier containing traversal sequences escapes the intended import/export/log base directory and targets arbitrary writable paths. The upstream fix (commits 764e2a1d86f9af600113f77422d520338c214229 and b652ee8dafa91602705004d0edb602a91a0d845e) introduces two helpers, safeDataMigrationId and safePathIn: the former rejects any exportid that does not round-trip through common.sanitizeFilename, and the latter resolves the candidate path against a resolved base directory and requires the result to begin with basePath + path.sep, returning HTTP 400 for invalid identifiers and HTTP 401 when a stored log filename fails containment validation. The same containment logic is applied to log-file unlinks and to the import/<exportid>.json deletion, so the fix closes every concatenation sink in the deletion flow rather than only the primary exportid parameter. Notably, there is no confidentiality impact in the assessed vector: the primitive is purely destructive, so an attacker cannot read data through it, but the recursive deletion is high-integrity/high-availability impact because it can erase Countly configuration, analytics artifacts, or other trees writable by the service account.
Know when Countly Server 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:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
Network-reachable migration API with no user interaction (AV:N/AC:L/UI:N), but requires the migration permission so PR:L; arbitrary deletion yields I:H/A:H with no disclosure (C:N).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
countly-server is the server-side part of Countly, a product analytics solution. Prior to 24.05.50 and 25.03.44, the authenticated data-migration deletion route in plugins/data_migration/api/api.js passes the user-controlled exportid to clean_up_data without path validation. plugins/data_migration/api/data_migration_helper.js concatenates that identifier into a path resolved outside the intended import directory and calls remove recursively, allowing an application administrator or user with migration permission to delete writable files or directory trees and cause data loss or service disruption. This issue is fixed in versions 24.05.50 and 25.03.44.
Technical POC Analysis
CWE-22 path traversal in Countly Server's datamigration plugin.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Countly Server deployments running versions prior to 24.05.50 and 25.03.44 are exposed to a high-severity vulnerability that permits an authenticated user with data-migration permission to delete arbitrary files and directories, resulting in potential data loss and service disruption. Organizations relying on Countly for analytics or customer data should treat this as a significant operational risk, particularly if migration permissions are broadly assigned. Leadership should prioritize upgrading to the fixed versions and tightening access controls to prevent insider or compromised-account abuse.
Apply vendor patch.
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.
More in Countly Server
View allStored cross-site scripting in the Countly Server star-rating plugin allows an authenticated, non-global application adm
countly-server is the server-side part of Countly, a product analytics solution. Rated high severity (CVSS 8.1), this vu
Unauthenticated path traversal in Countly Server before 24.05.50 and 25.03.44 lets remote attackers read arbitrary files
Unauthenticated denial of service in Countly Server prior to 24.05.50 and 25.03.44 lets any remote network attacker cras
Authorization bypass in Countly Server's DBViewer plugin allows authenticated low-privilege users to read data from rest
EUVD-2026-102915
NVD
CVE.org
Vulnrichment
GitHub
Exploit-DB