关键漏洞信息 漏洞概述 LearnHouse 文件上传功能存在两个主要漏洞: 1. 存储型跨站脚本(XSS):通过未经验证的 SVG 上传,允许在浏览器中执行任意 JavaScript。 2. 无限制文件上传:允许上传任意文件(如 .py 脚本),可能导致远程代码执行(RCE)。 漏洞详情 类型: - 存储型跨站脚本 (XSS) - 无限制文件上传 CVE: - CWE-79: 不当输入中和(跨站脚本) - CWE-434: 无限制上传危险类型的文件 影响产品 供应商: LearnHouse 产品: LearnHouse 受影响版本: 所有版本至 commit 86c0ad(截至发现时) 受影响端点 1. Profile Picture Upload 2. Organization Image & Preview - Image: http://localhost:8000/api/v1/organization/settings/profilepicture/ 3. Organization Images & Previews - Thumbnail 4. Organization Images & Preview - Preview 技术描述 路径 1 - SVG 上传 - 存储型 XSS 应用接受未经验证的 SVG 文件。攻击者可以在事件处理程序中嵌入 JavaScript(例如 ),并在 SVG 中触发恶意代码。 当上传的图像显示时,嵌入的代码会在受害者的浏览器中以他们的会话权限执行。 根本原因: - 缺乏 SVG 内容验证 路径 2 - 任意文件上传 - 潜在 RCE 服务器不执行 MIME 类型或扩展名验证。可以将 .py 等文件作为“图像”上传,并存储在可访问的 URL 中。 如果攻击者发现任何执行向量(例如,配置错误的路由、包含/导入),上传的脚本可以在服务器上执行,导致远程代码执行。 根本原因: - 缺失服务器端类型和魔术字节验证 - 上传文件存储在 web 可访问路径 影响 路径 1: 任意 JavaScript 执行、会话劫持、凭证窃取或存储钓鱼有效载荷。 路径 2: 任意代码执行、数据泄露、系统妥协或用作内部攻击的跳板。 概念验证 1. 创建一个恶意 SVG。 2. 将其作为受影响端点之一上传(此处作为个人资料图片)。 3. 在新标签页中打开图像,可以看到 JS 事件正在执行。 无限制文件上传 还可以上传类似 .py 的文件,服务器不会验证它并接受它作为图像。