Skip to main content

重要/漏洞:Linux CIFS/SPNEGO key description 存在本地提权漏洞漏洞编号:暂无公开 CVE / PoC 名称:CIFSwitch重要等级:需要关注的(本地提权风险)CVSS 分数:无影响范围:受影响组件:Linux kernel CIFS client、cifs-utils、request-key / keyutils、cifs.upcall受影响代码路径:Linux kernel:fs/smb/client/cifs_spnego.ccifs-utils:cifs.upcall.c受影响功能:CIFS Kerberos/SPNEGO upcall;cifs.spnego key description 处理;request-key 触发 cifs.upcall 的逻辑;cifs.upcall namespace 切换与 NSS 查询逻辑

  1. LoopDNS资讯播报
    Linux系统曝出cifs.upcall本地权限提升漏洞概念验证代码 安全研究人员近日公布了针对Linux系统cifs-utils工具包中cifs.upcall组件的本地权限提升漏洞概念验证代码(PoC)。该漏洞源于系统在处理特定内核密钥请求回调时,未能安全地隔离用户命名空间。低权限攻击者通过伪造cifs.spnego类型的请求,可诱导高权限的cifs.upcall进程加载恶意的名称服务切换(NSS)动态链接库。 代码表明,攻击者利用该缺陷可在私有命名空间内篡改系统配置文件,进而通过在sudoers目…
    重要/漏洞:Linux CIFS/SPNEGO key description 存在本地提权漏洞

    漏洞编号:暂无公开 CVE / PoC 名称:CIFSwitch
    重要等级:需要关注的(本地提权风险)
    CVSS 分数:

    影响范围:
    受影响组件:Linux kernel CIFS client、cifs-utils、request-key / keyutils、cifs.upcall
    受影响代码路径:
    Linux kernel:fs/smb/client/cifs_spnego.c
    cifs-utils:cifs.upcall.c


    受影响功能:
    CIFS Kerberos/SPNEGO upcall;
    cifs.spnego key description 处理;
    request-key 触发 cifs.upcall 的逻辑;
    cifs.upcall namespace 切换与 NSS 查询逻辑。


    主要受影响配置:
    系统安装了 cifs-utils / keyutils,并存在 active cifs.spnego request-key 规则;
    CIFS 模块可加载或已编译进内核;
    允许非特权用户创建 user namespace / mount namespace;
    AppArmor、SELinux 或其他 LSM 策略未阻断该 namespace / NSS 触发链;
    本地低权限用户可在目标主机上执行程序。

    注意:仅安装 Linux 内核但未安装 cifs-utils,或系统不存在可用 cifs.spnego request-key 规则,通常无法通过公开 PoC 触发该链路;禁用了非特权 user namespace、LSM 策略有效阻断、或已升级到包含上游修复的内核,也会显著降低或消除当前 PoC 风险。该漏洞不需要实际连接 CIFS/SMB 服务器,关键条件是本地 cifs.spnego upcall 链路可被触发。

    漏洞原理:
    该漏洞链出现在 Linux CIFS/SPNEGO upcall 的内核与用户态辅助程序协作边界中。正常情况下,CIFS 内核客户端在需要 Kerberos/SPNEGO 认证材料时,会构造 cifs.spnego key description,并通过 request_key() 触发用户态 helper cifs.upcall。该 description 中包含 pid、uid、creduid、upcall_target 等具有安全语义的字段,cifs.upcall 会将其视为来自内核的可信输入。

    漏洞链由三个核心缺陷组成:
    1. 内核侧 cifs.spnego description 来源校验缺失
    修复前,fs/smb/client/cifs_spnego.c 中的 cifs_spnego_key_type 未配置 .vet_description 校验。结果是,非特权用户可以直接调用 request_key("cifs.spnego", forged_description, ...),自行伪造包含 pid、uid、creduid、upcall_target 等字段的 cifs.spnego description。即使最终 key 请求失败,request-key helper 已经被触发,攻击链仍可继续。

    2. cifs.upcall 信任攻击者可控的 pid / upcall_target
    cifs-utils 的 cifs.upcall.c 会解析 key description 中的 pid、uid、creduid、upcall_target 等字段。当 upcall_target=app 时,cifs.upcall 会根据 description 中的 pid 调用 switch_to_process_ns(pid),进入该进程所在 namespace。
    在 description 来源不可验证的情况下,pid 变成了攻击者控制 root helper 运行视图的入口。攻击者可让 pid 指向处于私有 user/mount namespace 内的触发进程,从而诱导 root 身份运行的 cifs.upcall 进入攻击者控制的 mount namespace。

    3. NSS 查询发生在最终降权之前
    cifs.upcall 在切换 namespace 后,会执行 getpwuid(uid) 查询用户信息,然后才进行 setgid()、setuid() 和 drop_all_capabilities()。NSS 查询会读取当前 mount namespace 中的 /etc/nsswitch.conf,并按配置加载 libnss_*.so.2。
    攻击者在私有 mount namespace 中准备伪造的 /etc/nsswitch.conf 和攻击者控制的 libnss_pwn.so.2 后,可让 root 身份运行的 cifs.upcall 在最终降权前加载恶意 NSS 模块。恶意 NSS 模块 constructor 以 root 权限执行,从而写入 sudoers 或执行等价 root 代码路径,最终实现本地低权限用户提权至 root。


    受影响组件:
    Linux kernel CIFS client
    cifs-utils / cifs.upcall
    keyutils / request-key
    系统 request-key 配置


    受影响对象:
    安装 cifs-utils 并启用默认 cifs.spnego request-key 规则的 Linux 主机;
    允许本地低权限用户登录或执行代码的多用户服务器;
    CI runner、构建机、容器宿主机、云主机、研发测试环境;
    启用了非特权 user namespace / mount namespace 且未被 LSM 策略阻断的系统;


    处置建议:
    1. 优先升级内核
    2. 如果业务不需要 CIFS/SMB 挂载,建议卸载 cifs-utils / keyutils,或阻止 cifs 模块加载。
    3. 如果业务需要 CIFS 但不需要 Kerberos/SPNEGO CIFS 认证,可临时禁用或覆盖 cifs.spnego upcall 规则。注意该操作会影响依赖 Kerberos/SPNEGO 的 CIFS 挂载。

    参考链接:Github