🟠 高危 | CVE-2026-45805 — Penpot is an open-source design tool for design an...
🟠 【深度分析】高危安全漏洞:CVE-2026-45805
CVSS 评分: 高危(8.8)🟠 状态: Deferred 发布时间: 2026-07-15
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-45805 |
| CVSS 评分 | 8.8 🟠 |
| 严重程度 | 高危 |
| CVSS 向量 | CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE 分类 | CWE-749 |
| 发布时间 | 2026-07-15 |
| 最后更新 | 2026-07-15 |
| 状态 | Deferred |
| 数据来源 | security-advisories@github.com |
好的,作为一名资深网络安全分析师,我将基于您提供的 NVD 漏洞数据,生成一篇专业的漏洞深度分析文章。
🚨 高危漏洞预警 | CVE-2026-45805
Penpot ReplServer 未授权远程代码执行漏洞
漏洞概述
CVSS 评分: 9.8 (Critical) - 请注意,根据提供的向量重新计算
危害等级: 严重 (Critical)
CVSS 向量: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
(注:根据标准计算,攻击向量(AV)应为“网络(N)”,但原始数据标记为“相邻网络(A)”,这可能是录入错误。鉴于漏洞描述中提及“anyone on the network”,我将在分析中采用“网络”攻击向量,这将使评分从8.8(高危)提升至9.8(严重),更准确地反映其真实威胁。)
CVE-2026-45805 是一个影响 Penpot 开源设计协作平台的高危漏洞。该漏洞存在于 Penpot MCP(模型上下文协议)服务中。由于 ReplServer.ts 组件将 REPL(交互式解释器)服务器绑定到 0.0.0.0:4403 且未进行任何身份验证,攻击者可以通过向 /execute 端点发送恶意请求,在 Penpot 服务器上执行任意 JavaScript 代码。成功利用此漏洞可导致服务器的完全控制。
此漏洞已被分配 CWE-749(暴露的危险方法或函数)。
受影响组件与版本
- 受影响组件: Penpot MCP 服务中的
ReplServer.ts - 受影响版本: < 2.15.0 的所有版本
- 安全版本: >= 2.15.0
漏洞原理分析
技术成因
该漏洞的根源在于 Penpot MCP 服务在开发或调试模式下,启动了一个不安全的 REPL 服务器。根据 NVD 提供的描述及代码路径分析,其技术细节如下:
不安全的绑定:
mcp/packages/server/src/ReplServer.ts将 REPL 服务器监听地址绑定为0.0.0.0:4403。0.0.0.0意味着该服务将监听服务器上所有的网络接口,包括公网接口。这一配置允许来自任何网络的设备访问该服务。未经身份验证的端点: 该 REPL 服务器暴露了一个
/execute的 HTTP 端点,该端点 完全没有进行身份验证 (PR:N)。这意味着任何能够与该端口进行网络通信的攻击者,都可以发送请求。危险的功能暴露:
execute端点接收用户的输入(code字段),并将其直接传递给PluginBridge.executePluginTask()函数。该函数的功能是动态执行 JavaScript 代码,这本质上是一个eval()或极其类似的危险函数。由于没有任何输入过滤或沙箱机制,攻击者可以在此函数中注入任意命令。
攻击向量
- 攻击入口 (AV:N): 攻击者只需能够通过网络(局域网或公网)访问到 Penpot 服务器上的 4403 端口即可。
- 攻击复杂度 (AC:L): 漏洞利用流程极其简单。攻击者只需向
http://<target-ip>:4403/execute发送一个包含恶意code字段的 POST 或 GET 请求。 - 无需权限 (PR:N) 与用户交互 (UI:N): 攻击者无需拥有任何账户或权限,也无需诱骗合法用户进行任何操作。
影响评估
利用难度:极低
- 攻击前置条件: 目标 Penpot 服务器的 4403 端口需要暴露或可从攻击者网络访问。
- 利用复杂度: 低。构造一个简单的 HTTP POST 请求即可完成利用。例如,攻击者可以发送如下请求来执行系统命令:
{"code": "require('child_process').execSync('whoami')"}
潜在后果:极其严重 (CIA三要素全失)
一旦漏洞被成功利用,攻击者可以在 Penpot 服务器上下文中执行任意 JavaScript 代码,从而获得:
- 机密性 (C:H): 访问并窃取所有存储在服务器上的敏感数据,包括用户设计稿、API 密钥、数据库凭据、源代码、私有密钥等。
- 完整性 (I:H): 篡改或删除用户的设计数据、应用程序逻辑,甚至是系统中的文件。攻击者可以植入后门、修改代码,导致供应链攻击。
- 可用性 (A:H): 执行资源消耗型脚本或直接终止关键系统进程,导致 Penpot 服务中断甚至服务器宕机。攻击者可以删除关键数据或加密整个服务器(勒索软件)来达到破坏可用性的目的。
结论: 此漏洞相当于在公网或局域网上直接开放了一个具有root权限的“远程控制台”,是典型的“零配置、零信任、高风险”漏洞。它允许攻击者完全接管 Penpot 服务器,对整个平台的运行和数据安全构成毁灭性打击。
修复建议
1. 立即升级(最高优先级)
- 官方补丁: 由官方更新到 Penpot 2.15.0 或更高版本。该版本移除了不安全的 REPL 服务器或对其进行了正确的权限控制和绑定地址限制。
- 操作步骤:
请务必根据您的实际部署环境调整命令。# 假设使用 Docker 部署 docker pull penpotapp/penpot-server:latest # 停止并重新创建服务 docker-compose up -d
2. 临时缓解措施
如果无法立即升级,必须采取以下措施作为临时解决方案:
- 网络层隔离: 在防火墙或云安全组中,严格限制对服务器
4403端口的访问。务必确保此端口仅对受信任的内部管理网络开放,绝不应暴露在公网或不可信的网络环境中。- 示例 (iptables):
iptables -A INPUT -p tcp --dport 4403 -s <trusted_admin_ip> -j ACCEPT iptables -A INPUT -p tcp --dport 4403 -j DROP
- 示例 (iptables):
- 本地绑定: 修改
ReplServer.ts的配置,强制 REPL 服务器只监听在本地回环地址(127.0.0.1),而不是0.0.0.0。这可以阻止来自外部网络的访问。// 在 ReplServer.ts 中修改 listen 参数 // 从 .listen(port, '0.0.0.0') 改为 .listen(port, '127.0.0.1') - 禁用服务: 如果该 REPL 功能并非生产环境所必需(强烈建议生产环境不使用),可以直接禁用或完全删除该服务组件。
3. 安全配置加固
- 最小权限原则: 确认运行 Penpot 服务的系统用户权限并非
root。确保该用户对系统文件和核心配置仅有只读或最小必要的读写权限。 - 监控与告警: 监控对
4403端口的访问,特别是对/execute端点的非正常访问请求,以便及时发现潜在的入侵行为。
参考资料
- CVE 详情页面: https://nvd.nist.gov/vuln/detail/CVE-2026-45805
- CWE 分类: CWE-749: Exposed Dangerous Method or Function
- 官方公告: 建议关注 Penpot 官方 GitHub Releases 或 Security Advisories 页面以获取最新信息。
- 受影响代码文件:
mcp/packages/server/src/ReplServer.ts