Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach exposed changedetection.io login
-
DeliverySubmit many timed password guesses
-
ExploitMeasure response-time discrepancy (CWE-208)
-
ExecutionStatistically recover secret characters
-
ImpactAuthenticate and access monitored data
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V6 - Authentication Timing attack prevention
|
| Exploitation Conditions | Requires that the target changedetection.io instance (<=0.60.7) exposes its password-protected login/UI to the attacker and that the attacker can measure response timing precisely enough to distinguish correct from incorrect password-character prefixes. Practical limiting factors are severe: the CVSS AC:H and vendor's 'difficult' rating reflect that network jitter, TLS/reverse-proxy layers, and interpreter noise force enormous sample counts to extract signal; the app must have password protection enabled (a single shared password/secret) for there to be anything to leak; and only that secret's confidentiality is at risk (no integrity or availability impact). No user interaction and no prior authentication are needed (PR:N/UI:N). |
| Impact | This is a low-real-risk issue despite a moderate 6.3 CVSS 4.0 score. The vector (AV:N/AC:H/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N) tells the true story: while network-reachable and requiring no authentication, the attack complexity is high (AC:H) and only confidentiality is marginally impacted (VC:L, with VI/VA:N). The flaw is a classic CWE-208 non-constant-time password comparison in check_password (flask_app.py). Remote timing side-channels are notoriously unreliable in practice - network jitter, TLS/proxy layers, and Python interpreter noise typically swamp the microsecond-level timing signal being measured, requiring huge numbers of averaged samples per guessed character. The vendor itself rates exploitability as 'difficult.' A public PoC exists (herantong/cve on GitHub), so exploitation status is 'publicly available exploit code exists' - but there is NO CISA KEV listing and NO EPSS score provided, so there is no evidence of active or widespread exploitation. Note the intelligence is single-sourced from VulDB with no independent NVD/vendor advisory, and the vendor was contacted but did not respond, meaning affected-version and fix data are unconfirmed. Bottom line: prioritize normal patch cadence, not emergency response; the theoretical remote-unauth nature is heavily offset by the high complexity and the fact that only a low-severity secret-leak is achievable. |
| Exploit ScenarioDerived | A remote unauthenticated attacker repeatedly submits candidate passwords/shared-secrets to the changedetection.io login and measures server response latency, using statistical averaging over many samples to detect the tiny timing difference between correct and incorrect leading characters, gradually reconstructing the secret. A public proof-of-concept exists demonstrating the timing discrepancy, but the CVSS AC:H rating and the vendor's own 'difficult' assessment reflect how hard reliable extraction is over a real network. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 22, 2026
A timing side-channel in the password comparison routine (check_password in changedetectionio/flask_app.py) of dgtlmoon changedetection.io through version 0.60.7 allows remote, unauthenticated attackers to infer the shared application password character-by-character by measuring response-time differences. Exploitation is rated difficult (CVSS AC:H) and publicly available exploit code exists, though the practical signal is heavily degraded by network jitter, TLS/reverse-proxy overhead, and interpreter noise; only confidentiality of the single shared login secret is at risk, with no integrity or availability impact. No vendor patch has been identified at time of analysis, and the vendor did not respond to the disclosure.
RemediationAI
No vendor-released patch has been identified at time of analysis (vendor contacted early but did not respond), so remediation must be compensating. Most effective is to replace the non-constant-time comparison in changedetectionio/flask_app.py's check_password with a constant-time primitive such as Python's hmac.compare_digest (or secrets.compare_digest) applied to fixed-length hash digests - this eliminates the timing signal with negligible side effects and can be applied as a local source patch or upstream PR. If code changes are not possible, front the instance with a reverse proxy that enforces rate limiting and a fixed minimum response delay for authentication requests; the trade-off is added latency for legitimate logins and only partial masking of the leak. Restricting the login endpoint to trusted networks, VPN, or IP allowlists removes remote exploitability entirely but limits usability for external users. Disabling the built-in password and relying instead on an authenticating reverse proxy (basic/OIDC) eliminates the vulnerable comparison but shifts the security burden to that proxy's own constant-time behavior. Finally, avoid exposing changedetection.io directly to the internet, since network jitter and TLS layers already make exploitation difficult but not impossible, and monitor the VulDB advisory (https://vuldb.com/vuln/408338) for an eventual upstream fix.
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
The affected component is the Hash Comparison logic inside changedetectionio/flask_app.py, specifically the check_password function that validates the single shared application password used to protect the web UI. The root cause is CWE-208 (Observable Timing Discrepancy): the comparison path short-circuits or otherwise performs work proportional to the number of matching leading characters, so the server's response time varies subtly depending on how much of a supplied guess matches the stored secret. Because the password is compared as a hash/secret rather than with a constant-time primitive (e.g., hmac.compare_digest), an attacker who submits many candidate strings over the network can, in principle, statistically recover the secret. The vulnerable package is tracked under the broad CPE cpe:2.3:a:dgtlmoon:changedetection.io (all versions up to 0.60.7 per the description), reachable over HTTP/HTTPS wherever the deployment exposes its login-protected interface. The severe practical constraints - high sample counts needed, noise from TLS termination and reverse proxies, and the requirement that password protection actually be enabled - are what drive the CVSS AC:H rating and the vendor's 'difficult' exploitability assessment.
Know when Changedetection Io 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
CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:P
Network-reachable and unauthenticated (AV:N/PR:N/UI:N) but timing extraction over a network is unreliable (AC:H); only partial secret disclosure so C:L with no integrity/availability impact.
Primary rating from Vendor (VulDB).
CVSS VectorVendor: VulDB
Lifecycle Timeline
3DescriptionCVE.org
A flaw has been found in dgtlmoon changedetection.io up to 0.60.7. The affected element is the function check_password of the file changedetectionio/flask_app.py of the component Hash Comparison. This manipulation of the argument Password causes observable timing discrepancy. The attack is possible to be carried out remotely. A high degree of complexity is needed for the attack. The exploitability is described as difficult. The exploit has been published and may be used. The vendor was contacted early about this disclosure but did not respond in any way.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
More in Changedetection Io
View allUnauthenticated attackers can coerce changedetection.io through 0.60.6 into fetching arbitrary internal network addresse
Server-side request forgery in changedetection.io's Add Watch preview endpoint (/add_watch_ui/snapshot) allows remote at
changedetection.io through 0.60.7 contains a timing side-channel in the check_authentication function of its Flask authe
Arbitrary local file disclosure in ChangeDetection.io versions before 0.54.7 allows authenticated attackers to read sens
Path traversal in changedetection.io 0.60.7 and earlier allows remote attackers to read limited files outside the intend
Unrestricted brute-force against changedetection.io's /login endpoint allows a remote unauthenticated attacker to system
HTML markup injection in changedetection.io through 0.60.6 allows an attacker who controls the <title> of a page being m
Authentication bypass in changedetection.io's /settings endpoint silently disables REST API key enforcement when a privi
Path traversal in changedetection.io 0.60.7 and earlier lets an authenticated low-privilege user read files outside the
Stored cross-site scripting in changedetection.io up to and including 0.55.8 lets a malicious or compromised monitored w
Unauthenticated retrieval of the full OpenAPI schema is possible in changedetection.io because the /api/v1/full-spec end
EUVD-2026-84359
GHSA-58w2-g99m-pr4w
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB