Severity by source
AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:L
Scope changed to C because disabling API auth grants unauthenticated access beyond the triggering session; PR:H and AC:H retained as the exploit requires a privileged session and deliberate field omission.
Primary rating from Vendor (TuranSec).
CVSS VectorVendor: TuranSec
Lifecycle Timeline
2DescriptionCVE.org
changedetection.io's /settings save handler builds an update dict from form.data['application'] and blind-merges it into the stored application settings via .update(). Because WTForms represents an unchecked checkbox as False rather than 'unchanged', and only the 'password' field is special-cased against this problem, a POST to /settings that omits the api_access_token_enabled field (e.g. a minimal scripted request) silently disables API key enforcement for the entire REST API, exposing the full watch list, history, and configuration to unauthenticated requests.
AnalysisAI
Authentication bypass in changedetection.io's /settings endpoint silently disables REST API key enforcement when a privileged user or script submits a minimal POST request that omits the api_access_token_enabled checkbox. Because WTForms encodes an unchecked checkbox as False and the settings handler blindly merges all form fields via .update(), the API access token requirement is cleared without any warning, exposing the full watch list, history, and application configuration to unauthenticated REST API callers. No public exploit code or CISA KEV listing has been identified at time of analysis, but the post-exploitation surface - complete unauthenticated API access - is severe.
Technical ContextAI
changedetection.io (CPE: cpe:2.3:a:dgtlmoon:changedetection.io:*:*:*:*:*:*:*:*) is a Python-based open-source web page change detection application. Its /settings route uses the WTForms library to process form submissions. WTForms represents an HTML checkbox that is not included in a POST body as a boolean False rather than preserving the stored value, because HTTP omits unchecked checkboxes entirely. The settings handler constructs an update dictionary directly from form.data['application'] and applies it via Python's dict .update() method without validating which fields should be mutable or merging only explicitly submitted fields. This constitutes CWE-284 (Improper Access Control): the access control state (api_access_token_enabled) is writeable via an indirect, unintended data path. The 'password' field is already special-cased against this exact problem, confirming developer awareness of the pattern, but api_access_token_enabled was not similarly protected.
RemediationAI
No vendor-released patched version has been independently confirmed from the available data - the sole reference is the project GitHub repository at https://github.com/dgtlmoon/changedetection.io, which should be monitored for a fix commit or tagged release that special-cases api_access_token_enabled in the same manner as the existing 'password' field guard. As a compensating control, administrators should verify the api_access_token_enabled setting is True after any /settings save operation and rotate the API access token immediately if it is found disabled unexpectedly. Restricting network access to the changedetection.io web interface and REST API to trusted IP ranges or placing the instance behind a VPN or authenticated reverse proxy reduces the blast radius of the post-exploitation state. Disabling the REST API entirely (if not in use) eliminates the unauthenticated exposure surface. Audit server logs for unexpected unauthenticated REST API requests, which would indicate the setting was silently cleared.
More in Changedetection Io
View allArbitrary local file disclosure in ChangeDetection.io versions before 0.54.7 allows authenticated attackers to read sens
Unrestricted brute-force against changedetection.io's /login endpoint allows a remote unauthenticated attacker to system
Unauthenticated retrieval of the full OpenAPI schema is possible in changedetection.io because the /api/v1/full-spec end
Same weakness CWE-284 – Improper Access Control
View allSame technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-53201
GHSA-84vg-9r54-xpgh