Skip to main content

changedetection.io EUVDEUVD-2026-84604

| CVE-2026-95657 LOW
Cross-site Scripting (XSS) (CWE-79)
2026-09-22 VulDB GHSA-c5gc-qprm-vmpr
2.0
CVSS 4.0 · Vendor: VulDB
View

Attack ChainAIDerived

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

  1. Access
    Host page with XSS payload in element id
  2. Delivery
    Authenticated user adds/monitors the URL
  3. Exploit
    Scraper stores malicious id in selector data
  4. Execution
    User opens Visual Selector, innerHTML renders payload
  5. Impact
    Script executes in user's browser context

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires: (1) an authenticated changedetection.io user (PR:L) who adds or monitors an attacker-controlled/compromised web page; (2) that page containing an HTML element whose id includes an XSS payload with quote/angle-bracket characters that survives into the fallback xpath builder (the id must be non-unique so findUpTag() falls through to the id path per the added test); and (3) the victim opening the Visual Selector component (UI:P/UI:R), which renders the stored selector id via innerHTML. It affects changedetection.io versions up to 0.55.8; the payload executes only in the victim user's own browser context with limited integrity impact, and there is no direct unauthenticated path - these authentication and interaction requirements meaningfully limit real-world risk.

Impact

This is a genuinely low-priority issue despite a public exploit, and the signals largely agree. The vendor CVSS 4.0 score is only 2.0 with vector AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N - network reachable but requiring an authenticated user (PR:L) and passive user interaction (UI:P), with only limited integrity impact and no confidentiality or availability impact. The XSS is DOM-based and fires in the Visual Selector when it renders a scraped element id via innerHTML, so the malicious payload originates from the attacker-controlled watched web page, not from a direct request to changedetection.io - this indirection is why complexity/impact stay low. POC availability (VulDB, GitHub) and the CVSS 4.0 exploit-maturity flag E:P (proof-of-concept) are confirmed, but there is no EPSS score, no CISA KEV listing, and no evidence of active exploitation; POC existence must not be conflated with in-the-wild use. The patch is confirmed (commit aac6fcfa, PR #4282, release 0.60.1), replacing innerHTML with textContent and stripping quote/angle-bracket characters from xpath ids. Net: real but minor, self-inflicted-leaning XSS bounded by authentication and required interaction - routine patching priority, not urgent.

Exploit ScenarioDerived

An attacker sets up (or compromises) a web page containing an element whose id embeds an XSS payload such as dupe"><img src=x onerror=...>, then induces or waits for a changedetection.io user to monitor that URL and open the Visual Selector, where the unsanitized id is written to the DOM via innerHTML and executes in the user's browser session. A public proof-of-concept exists (VulDB and a GitHub PoC repo), and the source diff confirms the sink and fix.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.4% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Sep 22, 2026

Stored cross-site scripting in changedetection.io up to and including 0.55.8 lets a malicious or compromised monitored web page inject markup that is rendered in the Visual Selector UI, because the selector string is written into the DOM with innerHTML rather than as text. Exploitation requires an authenticated user who has added a page they do not control, plus that user opening the Visual Selector for the affected watch, so impact is confined to the victim's own browser session and is limited to integrity of the displayed page. Publicly available exploit code exists, but the issue is not confirmed actively exploited (CISA KEV) and independent assessment rates it low priority given the authentication and user-interaction prerequisites; upgrading to 0.60.1 resolves it.

RemediationAI

Upgrade changedetection.io to 0.60.1 or later, which is the vendor-released patch for this issue (release notes at https://github.com/dgtlmoon/changedetection.io/releases/tag/0.60.1). The specific fix is commit aac6fcfa594f17511b8ff73e5eaa4f6c33899de0, merged via pull request https://github.com/dgtlmoon/changedetection.io/pull/4282; operators running from source can apply that commit directly if they cannot move to the tagged release. The patch replaces the innerHTML assignment in changedetectionio/static/js/visual-selector.js with textContent and adds a guard rejecting element ids containing double quotes or angle brackets in the id-shortcut branch of xpath_element_scraper.js, so no configuration change is needed after upgrading. If upgrading immediately is not possible, the practical compensating control is to stop using the Visual Selector against pages you do not fully control - untrusted or third-party watches are the injection vector, and removing or disabling those watches removes the exposure; the trade-off is loss of the point-and-click selector feature for those sites, while plain text/diff monitoring of untrusted pages remains safe because it does not render scraped element ids as markup. Blocking or restricting the Playwright/browser fetch backend would also prevent generation of the tainted selector data, at the cost of falling back to less capable HTTP fetch modes. Because exploitation requires an authenticated user to open the Visual Selector, restricting account creation and reviewing who holds changedetection.io credentials limits the pool of users who can be targeted, but it does not fix the underlying rendering flaw.

Affected VersionsENISA

changedetection.io 0.55.7
changedetection.io 0.55.5
changedetection.io 0.55.0
changedetection.io 0.55.2
changedetection.io 0.55.4
changedetection.io 0.55.3
changedetection.io 0.55.1
changedetection.io 0.55.8
changedetection.io 0.55.6

Affected Packages

euvd changedetection_io no fix

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 flaw is a DOM-based cross-site scripting condition (CWE-79) in the Visual Selector component of changedetection.io. When the browser-based fetch backend scrapes a watched page, JavaScript in changedetectionio/content_fetchers/res/xpath_element_scraper.js derives an XPath for each candidate element; the shortcut branch builds '//*[@id="<id>"]' directly from the element's id attribute, and a fallback positional path builder is used when no selector is produced. The generated selector strings are persisted alongside the watch and later sent to the front end, where changedetectionio/static/js/visual-selector.js assigned them through $selectorCurrentXpathElem[0].innerHTML = s inside setCurrentSelectedText. Any quote or angle-bracket characters carried through from an attacker-influenced element id therefore became live markup rather than displayed text. The upstream patch changes that assignment to textContent and additionally rejects ids containing double quotes or angle brackets in the id-shortcut branch so such elements fall through to the positional XPath path, which cannot carry page markup into the selector. Affected artifacts are covered by CPE cpe:2.3:a:dgtlmoon:changedetection.io:*:*:*:*:*:*:*:* per the vendor project; the tested fall-through requires the injected id to be non-unique on the page, since findUpTag() only returns an id-based selector when the id is unique.

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

Vendor (VulDB) PRIMARY 2.0 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:P
vuln.today AI 4.6 MEDIUM

Authenticated user must add a watch (PR:L) and open the Visual Selector (UI:R); DOM XSS in the user's own browser yields limited confidentiality/integrity (C:L/I:L), no scope change or availability impact.

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

Primary rating from Vendor (VulDB).

CVSS VectorVendor: VulDB

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

3
Severity Changed
Sep 22, 2026 - 18:22 NVD
MEDIUM LOW
CVSS changed
Sep 22, 2026 - 18:22 NVD
5.1 (MEDIUM) 2.0 (LOW)
CVE Published
Sep 22, 2026 - 17:45 cve.org
LOW 2.0

DescriptionCVE.org

A vulnerability was determined in dgtlmoon Changedetection.io up to 0.55.8. This issue affects the function setCurrentSelectedText of the file changedetectionio/static/js/visual-selector.js of the component Visual Selector. Executing a manipulation of the argument s can lead to cross site scripting. The attack can be launched remotely. The exploit has been publicly disclosed and may be utilized. Upgrading to version 0.60.1 is capable of addressing this issue. This patch is called aac6fcfa594f17511b8ff73e5eaa4f6c33899de0. It is suggested to upgrade the affected component.

Threat Intelligence Overview

EPSS Score
0.4%
Top 64% exploitable
Prevalence
Low
niche self-hosted website change-monitoring tool, GitHub-popular but modest production footprint
Exploit
POC
Public exploit code exists
Data Quality
7 sources
Confidence: High

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 Yes
EPSS 0.4%
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
Scheduled
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Low

Priority Score

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

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

CVE-2026-92815 HIGH POC
8.7 Sep 16

Unauthenticated attackers can coerce changedetection.io through 0.60.6 into fetching arbitrary internal network addresse

CVE-2026-95656 MEDIUM POC
5.5 Sep 22

Server-side request forgery in changedetection.io's Add Watch preview endpoint (/add_watch_ui/snapshot) allows remote at

CVE-2026-95271 MEDIUM POC
5.5 Sep 22

changedetection.io through 0.60.7 contains a timing side-channel in the check_authentication function of its Flask authe

CVE-2026-35000 HIGH
7.1 Apr 01

Arbitrary local file disclosure in ChangeDetection.io versions before 0.54.7 allows authenticated attackers to read sens

CVE-2026-95272 LOW POC
2.9 Sep 22

Path traversal in changedetection.io 0.60.7 and earlier allows remote attackers to read limited files outside the intend

CVE-2026-95270 LOW POC
2.9 Sep 22

A timing side-channel in the password comparison routine (check_password in changedetectionio/flask_app.py) of dgtlmoon

CVE-2026-71205 MEDIUM
6.5 Aug 05

Unrestricted brute-force against changedetection.io's /login endpoint allows a remote unauthenticated attacker to system

CVE-2026-92814 LOW POC
2.3 Sep 16

HTML markup injection in changedetection.io through 0.60.6 allows an attacker who controls the <title> of a page being m

CVE-2026-71204 MEDIUM
6.2 Aug 05

Authentication bypass in changedetection.io's /settings endpoint silently disables REST API key enforcement when a privi

CVE-2026-95273 LOW POC
2.1 Sep 22

Path traversal in changedetection.io 0.60.7 and earlier lets an authenticated low-privilege user read files outside the

CVE-2026-71203 MEDIUM
5.3 Aug 05

Unauthenticated retrieval of the full OpenAPI schema is possible in changedetection.io because the /api/v1/full-spec end

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