
marimo 安全机制与漏洞报告指南从信任模型到 CVE 披露流程【免费下载链接】marimoA reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.项目地址: https://gitcode.com/GitHub_Trending/ma/marimomarimo 是一个以纯 Python 存储的响应式 notebook 项目既要支持本地编辑也要支持长期运行的应用部署其安全模型围绕未经明确操作不执行任何用户代码这一原则设计。本文基于仓库 SECURITY.md 与 docs/security.md 展开梳理 marimo 的信任边界、内容净化、静态加载、token 认证、CVE 策略与漏洞上报流程并结合源码印证关键实现。读完本文你将理解 marimo 为何能安全打开不可信 notebook并掌握如何配置认证、上报漏洞与跟进安全更新。信任模型先审查后运行marimo 的安全设计起点是一个朴素的假设当你打开一个 notebook 时在明确选择运行它之前你不一定信任其中的内容只有当你运行了代码之后输出才被视为可信因为此时它们来自你自己的执行。与其他 notebook 一样marimo 允许在运行单元格时执行任意代码见 docs/security.md。这意味着如果运行了来自不可信来源的代码就可能无意中执行恶意代码。因此官方文档给出的核心建议是只运行来自可信来源的 notebook或者在执行之前先审查代码。在这一总体政策下marimo 实现了多项缓解措施其blanket policy是未经明确的用户操作无论是 JavaScript 还是 Python不执行任何用户代码。三道防线净化、静态加载与运行模式内容净化Content Sanitizationmarimo 会在特定上下文中对 HTML 和 JavaScript 进行净化防止打开不可信 notebook 时执行恶意代码所有在执行之前展示的用户内容都会被净化移除全部脚本包括 markdown 和自定义 HTML 输出首次执行之后输出被视为可信因为它们是由你自己的代码生成的。这一净化逻辑贯穿前后端后端在 marimo/_output/md.py、marimo/_output/data/data.py 等处对输出做处理配置层则在 marimo/_ast/app_config.py 提供sanitize()对应用配置做校验清洗前端组件层亦对插件输出进行 DOM 安全处理共同保证未运行即净化、运行后信任的策略落地。静态加载打开不等于执行marimo notebook 本质上就是纯 Python 文件但通过marimo edit打开时不会把它当作模块执行而是采用静态加载static loading只解析parse而不执行execute从机制上杜绝了加载阶段的任意代码执行代码只会在你显式运行单元格时才执行。这一设计可在 marimo/_ast/load.py 中看到印证——加载 notebook IR 时仅解析配置并调用_AppConfig.sanitize(options)校验配置而非导入执行整个文件。运行模式与信任级别差异marimo 依据运行方式区分威胁模型见 docs/security.md模式命令安全行为编辑模式marimo edit内容在运行第一个单元格之前保持净化默认auto_instantiate为disabled远程访问默认启用 token 认证运行模式marimo runnotebook 作为 Web 应用运行内容视为可信网站不做净化token 认证可通过 CLI 标志或自定义中间件配置其中编辑是探索性的可能涉及不可信 notebook部署是意图明确的发布这一区分正是两种模式采取不同策略的根本原因。另外值得注意marimo run folder --watch时被监听文件夹中新建的 notebook 无需重启服务器即可出现在 gallery 模式中。auto_instantiate这一配置项可以在 marimo/_ast/app_config.py 的应用配置模型中找到默认关闭确保打开 notebook 时不会自动运行任何单元格。认证机制token 认证与自定义中间件marimo 提供基于 token 的认证见 docs/security.mdmarimo edit默认启用认证运行模式可通过--token与--token-password标志配置可通过 ASGI 中间件扩展自定义认证方案。CLI 参数与优先级在 marimo/_cli/cli.py 中edit、run、new等命令统一暴露了三组 token 相关参数如第 315-330 行、686-701 行、999-1014 行、1363-1378 行marimo run my_notebook.py --token --token-passwordsup3rs3cr3t参数说明--token/--no-token启用/关闭认证。--token时若未设置--token-password会随机生成 token--no-token则完全关闭会话认证--token-password指定固定 token/password--token-password-file从文件读取 token-表示从 stdin 读取与--token-password互斥编辑模式下 token 随机生成运行模式下 token 基于 notebook 代码确定性生成这样同一 notebook 的部署 URL 可以保持稳定。底层解析逻辑位于 marimo/_cli/utils.pyresolve_token()会优先采用用户显式提供的密码若token为False则返回空AuthToken表示无认证返回None表示走默认的自动生成 token。resolve_token_password()同文件第 55 行起则强制--token-password与--token-password-file互斥二者同时指定会抛出click.UsageError。三种认证方式登录页输入浏览器访问时会被重定向到极简登录页输入 token 即可URL 查询参数以access_token作为查询参数携带例如http://localhost:2718?access_tokensup3rs3cr3t本地运行时 marimo 会自动用带该参数如果笔记本没有特别设置的话的 URL 打开默认浏览器Basic Authorization 头按 Basic 认证方案把 token 作为密码放入Authorization头即Authorization: Basic base64(any_username:sup3rs3cr3t)用户名任意。自定义认证ASGI 中间件官方明确表示鉴于认证是复杂主题marimo 不内置完整的认证/授权系统而是通过 ASGI 中间件让用户轻松接入自己的方案。若要让应用公开部署可自定义认证、授权、限流等能力。将 marimo 挂载进 FastAPI 的典型写法摘自 docs/guides/deploying/authentication.mdfrom fastapi import FastAPI import marimo # 创建 marimo ASGI 应用挂载多个 notebook server ( marimo.create_asgi_app() .with_app(path, root./pages/index.py) .with_app(path/dashboard, root./pages/dashboard.py) .with_app(path/sales, root./pages/sales.py) ) # 创建 FastAPI 应用并注入自定义认证中间件 app FastAPI() app.add_middleware(auth_middleware) # 来自你的 my_auth_module app.add_route(/login, my_login_route, methods[POST]) app.mount(/, server.build()) if __name__ __main__: import uvicorn uvicorn.run(app, hostlocalhost, port8000)仓库 examples/frameworks/fastapi-auth 下提供了可直接运行的认证集成示例可作为实现参考。molab 的额外安全措施在托管平台 molab 上marimo 还叠加了额外防护见 docs/security.mdnotebook 加载时禁用自动运行单元格会话期间可手动关闭该限制禁用自定义 head 标签。这些限制的目的同样是未经用户明确同意不得执行代码。molab 相关安全问题按个案处理披露一般性安全改进会公开说明涉及具体用户的问题则通过直接通知私下处理。CVE 政策与披露原则marimo 只对影响生产部署尤其是长期运行应用的漏洞发布安全公告security advisory并遵循负责任披露流程见 SECURITY.md 与 docs/security.md。触发 CVE/安全公告的条件是漏洞可能影响长期运行的应用部署终端用户直接受影响问题具有超出常规 bug 修复的安全影响。一般的健壮性改进与加固工作则记录在发布说明中不发布正式公告。如果终端用户直接受影响公告会升级为 CVE 或发布通用公告并为所有有效报告提供署名除非要求匿名。历史公告截至文档记录docs/security.md的Previous Advisories折叠区记录了以下历史事件[GHSA-xjv7-6w92-42r7]matplotlib 端点的未认证代理漏洞。/mpl/[port]/[route]端点可能允许外部攻击者触达内部服务。影响版本 0.9.20 至 0.16.30.16.4 修复[GHSA-2679-6mx9-h9xc]编辑模式下未认证终端访问导致的远程代码执行。终端面板未要求认证允许未认证用户对暴露在公网的marimo edit实例执行任意命令。运行模式marimo run不受影响。影响版本 0.7.10 至 0.22.x0.23.0 修复[molab-0]markdown 渲染导致的 iframe sandbox 逃逸。攻击者可利用 iframe 沙箱漏洞逃出 iframe 并在父上下文中执行代码2025-10-19 已在 molab 部署中修复。漏洞上报渠道、流程与时限上报方式通过 GitHub 草拟安全公告security advisory或发送邮件至 security [at] marimo [dot] io。上报时请附上见 SECURITY.md漏洞描述及其潜在影响复现步骤或概念验证proof-of-concept若已知给出建议的缓解方案。预期时间线阶段时限确认收到3 个工作日内回复确认分类评估7 天内评估严重程度与影响范围修复与披露目标是在初次报告后约 90 天内发布修复并同步公开 CVE/公告全程会保持通报进度除非你希望匿名否则会在公告中署名致谢。团队没有小额漏洞赏金bug bounty预算如有兴趣可咨询。什么值得上报符合以下特征的问题建议走正式上报通道影响长期运行的应用部署、直接波及终端用户、具有超越常规 bug 修复的安全影响。普通安全改进则记录在发布说明中即可。一般不要将常规 bug 当作安全漏洞上报前者走普通 issue 流程更高效。保持最新安全修复的获取方式marimo 大约每周发布一次新版本重大安全披露会立即更新。要确保第一时间获得安全修复推荐使用uv保持最新见 docs/security.md# 安装或升级到最新版本 uv pip install --upgrade marimo值得强调的是SECURITY.md 明确安全补丁仅覆盖最新稳定版。因此生产环境务必追踪最新版本而不是停留在还能用的旧版本上。致谢与社区协同marimo 团队在 SECURITY.md 中公开致谢了数十位负责任披露安全问题的研究者包括 AlexanderBarabanov、pwntester、W-M-T、q1uf3ng 等。这一公开署名机制既是激励也体现了项目对安全社区贡献的认可。对研究者而言这意味着只要按负责任披露流程上报你的工作会被正式记录并公开展示。常见问题FAQ问marimo run部署的应用需要担心 notebook 内容净化吗不需要。运行模式下 notebook 被视为有意发布的可信内容不做净化但反过来这意味着你应当只部署自己审查过的 notebook。问为什么编辑模式默认启用 token 认证因为编辑模式面向探索性工作可能打开不可信 notebook且可能通过远程访问暴露token 认证可阻止未授权访问与未授权操作历史上终端面板未认证导致的 RCE 正与此相关。问token 忘了怎么办编辑模式每次启动会随机生成 token 并打印在启动日志中如需固定 token 可用--token-password指定或改用--token-password-file从文件读取。问能否完全关闭认证可以使用--no-token但仅应在可信网络环境下使用且官方文档建议生产部署务必启用认证或自行接入 ASGI 认证中间件。问在哪里查看最新安全公告官方安全文档的 Previous Advisories 区与发布说明会持续更新遇到问题也可邮件 security [at] marimo [dot] io 咨询。结语marimo 的安全体系可以概括为一条主线不执行未经用户明确操作的代码并在此基础上针对编辑/运行两种模式设计差异化的信任策略辅以静态加载、内容净化、token 认证与 ASGI 可扩展中间件。对使用者而言核心行动项有三只在可信来源运行 notebook、生产部署务必配置认证、持续用uv pip install --upgrade marimo跟进最新稳定版以获得安全补丁。若你在使用中发现问题请按本文所述渠道与时限规范上报marimo 团队承诺 3 个工作日内确认、7 天内评估、约 90 天内修复并披露。【免费下载链接】marimoA reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.项目地址: https://gitcode.com/GitHub_Trending/ma/marimo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考