Skip to content

security: plugin registry public key is all-zero placeholder — Ed25519 signature verification silently skipped for all installs #3799

Description

@houko

问题描述

OFFICIAL_REGISTRY_PUBKEY_B64 = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" 解码后是 32 个零字节。检测到全零公钥后,代码主动跳过签名验证并继续安装。

受影响文件

crates/librefang-runtime/src/plugin_manager.rs 第 22–23 行、第 249–255 行

const OFFICIAL_REGISTRY_PUBKEY_B64: &str = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
// ...
if !is_placeholder {
    // verify signature
} else {
    warn!("Using placeholder key — skipping verification");
    // 继续安装!
}

安全影响

Critical — 在没有设置 LIBREFANG_REGISTRY_PUBKEY 环境变量的情况下(即绝大多数用户的默认安装),从官方 registry 安装插件时完全不验证任何签名。攻击者若能进行中间人攻击,或 registry 仓库被攻陷,可推送任意恶意插件(Python/Node/WASM 钩子脚本)。

建议修复

  1. 在发布前将真实的 Ed25519 公钥硬编码进来
  2. 将全零公钥视为硬错误而非跳过验证,直接 panic! 或返回 Err
  3. 发布流程中确保 CI 验证公钥非全零

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/securitySecurity systems and auditingbugSomething isn't workingsecuritySecurity issues

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions