IPBUF安全漏洞报告
English
CVE-2025-66458 CVSS 6.1 中危

CVE-2025-66458 Lookyloo多个XSS跨站脚本漏洞

披露日期: 2025-12-02

漏洞信息

漏洞编号
CVE-2025-66458
漏洞类型
XSS跨站脚本漏洞
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Lookyloo

相关标签

XSS跨站脚本LookylooCVE-2025-66458f-strings注入 Markup注入Web安全

漏洞概述

Lookyloo是一款Web界面工具,允许用户捕获网站页面并以树状结构展示域名之间的调用关系。该工具在1.35.3版本之前存在多个跨站脚本(XSS)漏洞,源于在Markup中不安全地使用Python f-strings进行字符串格式化。攻击者可以通过构造恶意的第三方服务器,响应包含JavaScript代码的JSON文档来利用此漏洞。当用户访问或捕获包含恶意内容的页面时,攻击者可以在用户浏览器上下文中执行任意JavaScript代码,从而窃取用户会话cookie、劫持用户账户或进行其他恶意操作。由于该漏洞需要用户交互触发,攻击复杂度较低,但潜在影响范围较广,涉及机密性和完整性风险。官方已在1.35.3版本中修复了此问题,强烈建议所有用户立即升级。

技术细节

该漏洞的根本原因在于Lookyloo在处理第三方服务器响应时,不当使用了Python f-strings将数据插入到HTML Markup中。当第三方服务器响应包含JSON文档且其中嵌入了script元素的JavaScript代码时,这些代码会被直接渲染到页面上而未经适当转义。具体来说,攻击者可以控制第三方服务器,使其返回形如包含<script>alert(document.domain)</script>的JSON响应,Lookyloo在解析和展示这些响应时会将恶意脚本执行。攻击者需要诱导目标用户访问特制链接或捕获包含恶意内容的页面。成功利用后,攻击者可获取用户Cookie、执行任意DOM操作、窃取敏感信息或进行进一步的攻击。由于f-strings在处理用户可控数据时的安全性问题,导致了存储型XSS和反射型XSS的多种变体。修复方案采用安全的方式处理用户输入,如使用模板引擎的自动转义功能或手动对特殊字符进行HTML实体编码。

攻击链分析

STEP 1
步骤1
攻击者搭建恶意第三方服务器,配置为响应包含JavaScript代码的JSON文档
STEP 2
步骤2
攻击者构造特制链接或页面,诱导用户通过Lookyloo捕获恶意服务器内容
STEP 3
步骤3
Lookyloo获取第三方服务器响应,由于f-strings不安全使用,恶意script标签被直接插入Markup
STEP 4
步骤4
渲染后的页面包含未转义的JavaScript代码,用户浏览器自动执行恶意脚本
STEP 5
步骤5
攻击者成功在受害者浏览器上下文中执行任意JavaScript,实现Cookie窃取或会话劫持

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import http.server import json class MaliciousServer(http.server.BaseHTTPRequestHandler): def do_GET(self): # Malicious JSON response containing XSS payload malicious_json = json.dumps({ 'data': '<script>alert(document.cookie)</script>', 'status': 'success' }) self.send_response(200) self.send_header('Content-Type', 'application/json') self.end_headers() self.wfile.write(malicious_json.encode()) # Attack scenario: # 1. Attacker hosts this malicious server # 2. Attacker creates a page that triggers Lookyloo to capture the malicious URL # 3. When Lookyloo processes the JSON response, the script tag is rendered unsanitized # 4. Victim's browser executes the injected JavaScript if __name__ == '__main__': server = http.server.HTTPServer(('0.0.0.0', 8080), MaliciousServer) print('Malicious server running on port 8080') server.serve_forever()

影响范围

Lookyloo < 1.35.3

防御指南

临时缓解措施
如果无法立即升级,可暂时限制对不受信任第三方服务器的页面捕获功能,并在Lookyloo前端添加额外的输入验证和输出编码层。同时监控异常的大量页面捕获请求,防止自动化攻击。

参考链接

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