Skip to content

[P1][Security] 修复 Desktop Linux glib 运行时未定义行为告警并补 Rust advisory 门禁 #1578

Description

@DeliciousBuding

结论

GitHub Dependabot alert #1 仍为 open / medium。Desktop 的 Linux 运行时依赖图锁定 glib v0.18.5,命中公开公告 GHSA-wrw7-89jp-8q8gRUSTSEC-2024-0429):VariantStrIter 的迭代器实现存在未定义行为,在优化构建下可导致空指针解引用崩溃。

这不是直接依赖,不能通过在 Cargo.toml 里简单追加 glib = "0.20" 解决。

代码证据

cargo tree --target x86_64-unknown-linux-gnu -i glib --locked 证明该 crate 位于 Desktop 的实际 Linux 运行时链路:

agenthub-desktop
└── tauri 2.11.2
    ├── gtk 0.18.2
    ├── tauri-runtime-wry 2.11.2
    ├── webkit2gtk 2.0.2
    └── tray-icon 0.23.1 / libappindicator 0.9.0
        └── glib 0.18.5

同一 glib 还被 giogdkwebkit2gtkwry 等 Linux GUI 链路共享,因此只改 lockfile 单包版本通常会被上游 semver 约束拒绝。

风险裁决

  • 优先级:P1。当前主要影响 Linux Desktop;Windows 构建不加载这条 GTK 运行时链,但发布仓库不能长期保留已确认的 runtime UB 告警。
  • 不允许仅 dismiss Dependabot 或把告警标为“不可达”,除非提供对 VariantStrIter 路径的代码级不可达证明和明确到期日期。
  • 不允许用不受维护的 fork、全局 [patch.crates-io] 或跳过 lockfile 检查临时变绿。

实施决策

先解析上游约束,再选择最小兼容升级面:

  1. cargo tree --target x86_64-unknown-linux-gnu -i glib --locked 固化当前反向依赖图;
  2. 检查 Tauri / wry / gtk-rs 兼容版本,优先升级拥有该依赖的上游 crate,而不是强塞第二份 glib
  3. 更新 Cargo.toml / Cargo.lock,确保 Linux 目标图中不存在 < 0.20.0glib
  4. 若当前 Tauri 稳定线尚无法迁移,必须给出有上游链接、明确 owner 和 review date 的临时处置,不得静默 dismiss;
  5. 将 Rust advisory 检查接入真实 CI,防止 Dependabot 存在告警但日常 pnpm/govulncheck 全绿造成跨生态假安全。

验收条件

  • cargo tree --target x86_64-unknown-linux-gnu -i glib --locked 显示 glib >= 0.20.0,或该 crate 已从 Desktop Linux 运行时图移除;
  • Dependabot alert M0: 冻结唯一协议源头、事件分类和类型信封 #1 自动转为 fixed,而不是手工 dismiss;
  • cargo check --locked --target x86_64-unknown-linux-gnu 在具备 GTK/WebKit 系统依赖的 Linux runner 上通过;
  • Desktop Linux tray、窗口创建、通知/对话框和 WebView 启动 smoke 通过;
  • Windows Desktop build / package readiness 不回归;
  • CI 增加 Rust lockfile advisory gate,并有一个受控的负向 fixture 证明命中 advisory 时 fail closed;
  • PR body 记录升级前后反向依赖图及回滚点。

冲突地界

  • 可与 [P1] 收敛 deployments/production 与 hub-server/deployments 的双生产模板 #1527 部署模板 SSOT 并行,文件面不重叠;
  • 不与 Desktop release/signing 或大规模 Tauri 升级 PR 并行修改 app/desktop/src-tauri/Cargo.tomlCargo.lock 和 Desktop packaging workflow;
  • 若必须升级 Tauri 主版本/GTK 生态,先拆“依赖兼容升级”与“产品行为改动”,本任务不得顺手改 UI/IPC 合同。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High prioritydependenciesPull requests that update a dependency filerustPull requests that update rust codesize-MMedium effort客户端Desktop、Runner、Edge 本地调度和 Agent CLI

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions