Marimo 未经身份验证的代理漏洞可导致内部服务暴露

本文详细分析了 marimo 数据科学工具中一个影响范围广泛的漏洞。该漏洞允许攻击者滥用 `/mpl/{port}/` 端点,无需认证即可将服务器作为代理访问内部服务,可能绕过防火墙并导致远程代码执行或数据泄露。

漏洞详情

严重性:中等

漏洞标识符:GHSA-xjv7-6w92-42r7

受影响的版本:>= 0.9.20, < 0.16.4 已修复的版本:0.16.4

摘要

默认安装的 Marimo 中,无需身份验证即可访问的 /mpl/<port>/<route> 端点,允许外部攻击者访问内部服务和任意端口。

详情

根据我们的理解,此路由在内部用于提供对交互式 matplotlib 可视化的访问。 marimo/marimo/_server/main.py at main · marimo-team/marimo

该端点充当未经身份验证的代理,允许攻击者通过指定的 <port><route> 连接到本地计算机上运行的任何服务。

此代理的存在在应用程序的代码 (marimo/_server/main.py) 中是可见的,但没有关于其行为或潜在风险的官方文档或警告。

影响

CWE-441:未经身份验证的代理 此漏洞可用于绕过防火墙并访问原本应仅限于本地的内部服务。其影响程度完全取决于本地运行和可访问的服务。

  • 完全的本地访问:攻击者可以使用此代理连接到响应 Web 套接字、HTTP 或 ASGI 协议的本地服务,从而有效获得在该机器上的立足点。根据服务的不同,这可能导致远程代码执行、数据泄露或进一步的网络渗透。
  • 敏感服务暴露:我们对面向公众的 Marimo 服务器的扫描显示,许多服务器正在暴露敏感的内部服务,包括:
    • 旧版 CUPS 服务器:可能允许攻击者查看打印作业或配置,或者根据旧漏洞允许 RCE。
    • phpMyAdmin:提供 MySQL 数据库的 Web 接口,可能暴露敏感数据。
    • RPCMapper:可用于网络侦察和枚举服务。

虽然人们希望不会将 marimo 实例暴露在互联网上,但我们使用 Shodan 等工具发现了许多公共 Marimo 实例。其中许多服务器(甚至一些托管在 AWS GovCloud 等云平台上)被发现是脆弱的。这意味着该漏洞并非局限于少数孤立案例,而是一个影响生产环境的广泛问题。

=== 注意:此漏洞由 devgi 发现。我 (acepace) 跟进并创建了此报告。

参考资料

CVSS 评分

整体 CVSS 得分:6.9 (中等)

CVSS v4 基础指标:CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N

弱点

弱点:CWE-441 - 非预期代理或中介(‘困惑的副手’)

产品从上流组件接收请求、消息或指令,但在将请求转发给产品控制范围之外的外部参与者之前,产品未能充分保留请求的原始来源。这导致产品看起来像是请求的源头,使其充当上流组件和外部参与者之间的代理或其他中介。

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