结论
GitHub Dependabot alert #1 仍为 open / medium 。Desktop 的 Linux 运行时依赖图锁定 glib v0.18.5,命中公开公告 GHSA-wrw7-89jp-8q8g(RUSTSEC-2024-0429):VariantStrIter 的迭代器实现存在未定义行为,在优化构建下可导致空指针解引用崩溃。
这不是直接依赖,不能通过在 Cargo.toml 里简单追加 glib = "0.20" 解决。
代码证据
manifest: app/desktop/src-tauri/Cargo.toml
lockfile: app/desktop/src-tauri/Cargo.lock
当前锁定:glib 0.18.5
vulnerable range: >= 0.15.0, < 0.20.0
first patched version: 0.20.0
Dependabot: repository security alert M0: 冻结唯一协议源头、事件分类和类型信封 #1
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 还被 gio、gdk、webkit2gtk、wry 等 Linux GUI 链路共享,因此只改 lockfile 单包版本通常会被上游 semver 约束拒绝。
风险裁决
优先级:P1 。当前主要影响 Linux Desktop;Windows 构建不加载这条 GTK 运行时链,但发布仓库不能长期保留已确认的 runtime UB 告警。
不允许仅 dismiss Dependabot 或把告警标为“不可达”,除非提供对 VariantStrIter 路径的代码级不可达证明和明确到期日期。
不允许用不受维护的 fork、全局 [patch.crates-io] 或跳过 lockfile 检查临时变绿。
实施决策
先解析上游约束,再选择最小兼容升级面:
用 cargo tree --target x86_64-unknown-linux-gnu -i glib --locked 固化当前反向依赖图;
检查 Tauri / wry / gtk-rs 兼容版本,优先升级拥有该依赖的上游 crate,而不是强塞第二份 glib;
更新 Cargo.toml / Cargo.lock,确保 Linux 目标图中不存在 < 0.20.0 的 glib;
若当前 Tauri 稳定线尚无法迁移,必须给出有上游链接、明确 owner 和 review date 的临时处置,不得静默 dismiss;
将 Rust advisory 检查接入真实 CI,防止 Dependabot 存在告警但日常 pnpm/govulncheck 全绿造成跨生态假安全。
验收条件
冲突地界
结论
GitHub Dependabot alert #1 仍为 open / medium。Desktop 的 Linux 运行时依赖图锁定
glib v0.18.5,命中公开公告GHSA-wrw7-89jp-8q8g(RUSTSEC-2024-0429):VariantStrIter的迭代器实现存在未定义行为,在优化构建下可导致空指针解引用崩溃。这不是直接依赖,不能通过在
Cargo.toml里简单追加glib = "0.20"解决。代码证据
app/desktop/src-tauri/Cargo.tomlapp/desktop/src-tauri/Cargo.lockglib 0.18.5>= 0.15.0, < 0.20.00.20.0cargo tree --target x86_64-unknown-linux-gnu -i glib --locked证明该 crate 位于 Desktop 的实际 Linux 运行时链路:同一
glib还被gio、gdk、webkit2gtk、wry等 Linux GUI 链路共享,因此只改 lockfile 单包版本通常会被上游 semver 约束拒绝。风险裁决
VariantStrIter路径的代码级不可达证明和明确到期日期。[patch.crates-io]或跳过 lockfile 检查临时变绿。实施决策
先解析上游约束,再选择最小兼容升级面:
cargo tree --target x86_64-unknown-linux-gnu -i glib --locked固化当前反向依赖图;glib;Cargo.toml/Cargo.lock,确保 Linux 目标图中不存在< 0.20.0的glib;验收条件
cargo tree --target x86_64-unknown-linux-gnu -i glib --locked显示glib >= 0.20.0,或该 crate 已从 Desktop Linux 运行时图移除;cargo check --locked --target x86_64-unknown-linux-gnu在具备 GTK/WebKit 系统依赖的 Linux runner 上通过;冲突地界
app/desktop/src-tauri/Cargo.toml、Cargo.lock和 Desktop packaging workflow;