Niska

changedetection.io: Stored XSS in Watch update via API

  • Ujawniono: 10.11.2025
  • Aktualizacja: 11.10.2026 12:19

Summary

A Stored Cross Site Scripting is present in the changedetection.io Watch update API due to unsufficient security checks.

Details

Tested on changedetection.io version v0.50.24

bash
REPOSITORY                            TAG       IMAGE ID       CREATED        SIZE
ghcr.io/dgtlmoon/changedetection.io   latest    0367276509a0   23 hours ago   599MB

When a user tries to add an unsafe URL as a Watch in the changedetection.io UI, the action is blocked with the error message "Watch protocol is not permitted by SAFE_PROTOCOL_REGEX or incorrect URL format". This is catched by the function validate_url(test_url).

python
def validate_url(test_url):
    # ...
    from .model.Watch import is_safe_url
    if not is_safe_url(test_url):
        # This should be wtforms.validators.
        raise ValidationError('Watch protocol is not permitted by SAFE_PROTOCOL_REGEX or incorrect URL format')

When instead the Watch API is used, this check is not performed resulting in unsafe URLs added as Watch.

PoC

Update an existing watch with an unsafe URL

bash
curl -X PUT "http://example.site/api/v1/watch/1242e1c5-d59e-4352-0078-203a55b21282" \
  -H "x-api-key: XXX" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "javascript:alert(document.domain)",
    "title": "XSS PoC",
    "paused": false
  }'

Impact

Two scenarios are possibile:

  1. An attacker can insert a new watch with an arbitrary URL which really points to a web page. Once the HTML content is retrieved, the attacker updates the URL with a JavaScript payload.
  2. An attacker substitutes the URL in an existing watch with a new URL that is in reality a JavaScript payload.

When the user clicks on Preview and then on the malicious link, the JavaScript malicious code is executed.

<img width="1200" height="643" alt="poc1" src="https://github.com/user-attachments/assets/db81e0c7-b6d3-4332-b15d-a688a48c3227" /> <br> <img width="1200" height="643" alt="poc2" src="https://github.com/user-attachments/assets/e704b37c-d339-4322-9fc0-ad50dd86b31d" />

Credits

Edoardo Ottavianelli @edoardottt

Czego dotyczy

Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.

PlatformaPaczkaPodatne wersjePoprawka w wersji
Python (PyPI) changedetection-io < 0.50.34 0.50.34

Odnośniki

Ocena CVSS 3.5/10
Wektor CVSS
CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:L/A:N
Słabość (CWE)
CWE-79
Platforma
Python (PyPI)
Paczka
changedetection-io
Ujawniono
10.11.2025
Aktualizacja
11.10.2026 12:19

Źródła i licencje

OSV / GitHub Advisory Database - PYSEC-2025-91 - PyPA Advisory Database; CC BY 4.0

OSV / GitHub Advisory Database - GHSA-4c3j-3h7v-22q9 - CC BY 4.0

Historia podatności: changedetection-io

Wszystkie opisane podatności tej paczki (Python (PyPI)), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.

Wszystkie (20) w archiwum
Wszystkich wpisów
20
Pierwsza → ostatnia
02.2023 05.2026
Bez poprawki
1
Wykorzystywana w atakach
0

Rozkład istotności

  • Krytyczna 2
  • Wysoka 9
  • Średnia 6
  • Niska 2
  • Nieoceniona 1

Ujawnienia w latach

  1. 2023: 1
  2. 2024: 6
  3. 2025: 2
  4. 2026: 11
Istotność:
  1. Wysoka · 7.5 CVE-2026-41895 <= 0.54.9 brak poprawki
  2. Wysoka · 8.6 CVE-2026-27696 < 0.54.1 0.54.1
  3. changedetection.io: Stored XSS in Watch update via API ten wpis
    Niska · 3.5 CVE-2025-62780 < 0.50.34 0.50.34
  4. Wysoka CVE-2025-52558 < 0.50.4 0.50.4

Dowiedz się, które podatności dotyczą Twojej aplikacji

Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.