首页 网络安全 正文
  • 本文约3316字,阅读需17分钟
  • 148
  • 0

Himmelblau本地提权漏洞CVE-2026-31979

摘要

栋科技漏洞库关注到 Himmelblau 受影响版本中存在的符号链接攻击导致本地提权漏洞,追踪为CVE-2026-31979,CVSS 3.X评分8.8。

Himmelblau 是由 SUSE 主导开发的开源 Linux 互操作性套件,是一款用于 Microsoft Azure Entra ID 和 Intune 的 Linux 互操作性套件。

一、基本情况

Himmelblau 致力于是让 Linux 设备原生接入 Microsoft Entra ID(原 Azure AD) 身份认证与 Intune 设备管理,以实现企业级统一管控。

Himmelblau本地提权漏洞CVE-2026-31979

Himmelblau开源托管于GitHub,填补 Linux 与微软企业云服务(Entra ID + Intune)的集成空白,让 Linux 成为企业可管理的标准端点。

栋科技漏洞库关注到 Himmelblau 受影响版本中存在的符号链接攻击导致本地提权漏洞,追踪为CVE-2026-31979,CVSS 3.X评分8.8。

二、漏洞分析

CVE-2026-31979是 Himmelblau 受影响版本的本地提权漏洞,本地用户可通过符号链接攻击关闭或覆盖任意文件,实现本地权限升级。

在受影响版本中,以 root 权限运行的 himmelblaud-tasks 守护进程在 /tmp/krb5cc_<uid> 下创建 Kerberos 缓存文件时未检查符号链接。

由于该组件在 systemd 配置中显式移除了 PrivateTmp 隔离保护,导致其工作目录暴露在全局 /tmp 中。

本地攻击者可通过预先创建指向敏感文件(如 /etc/shadow 或 /etc/passwd)的符号链接,诱导 root 进程修改文件所有者或覆盖其内容。

本地用户通过符号链接攻击利用漏洞以关闭或覆盖任意文件,实现本地权限升级,从而实现从普通用户到 root 本地权限提升(LPE)。

该漏洞可导致任何能够触发Kerberos身份验证流的本地用户都可以拥有系统上任意目录的所有权(通过目录级符号链接/chown攻击)。

或者用ccache内容覆盖任意文件(通过文件级符号链接/write攻击),任何一种变体都可能导致整个系统的妥协。

任何运行himmelblaud任务3.0.0-beta或更高版本并带有生成的systemd单元文件的Linux主机都受到该漏洞的潜在威胁。

该漏洞有四个促成因素:

1、从任务守护进程中删除PrivateTmp

服务生成器显式过滤掉himmelblaud任务的PrivateTmp=,而主himmelblaod守护进程保留它:

himmelblau/scripts/gen_servicefiles.py

Line 281 in 87a51ee

 {os.linesep.join([h for h in tasks_hardening if not h.startswith('ProtectSystem=') and not h.startswith('PrivateTmp=')])} 

这是在commit 87a51ee(“允许任务守护进程写入krb-ccache”)中引入的,允许守护进程写入用户可见的ccache文件。

但是,这会将根守护进程暴露给共享主机/tmp。

2、Ccache目录创建遵循符号链接

create_ccache_dir()使用DirBuilder::new().recursive(true)和std::os::unix::fs::chown(),

而不验证目标路径是否不是符号链接:

himmelblau/src/daemon/src/tasks_daemon.rs

Lines 371 to 392 in 87a51ee

 fn create_ccache_dir(ccache_dir: &Path, uid: uid_t, gid: uid_t) -> io::Result<()> { 
     DirBuilder::new() 
         .recursive(true) 
         .mode(0o700) 
         .create(ccache_dir) 
         .map_err(|e| { 
             error!( 
                 "Failed to create the krb5 ccache directory '{}': {:?}", 
                 ccache_dir.display(), 
                 e 
             ); 
             e 
         })?; 

     std::os::unix::fs::chown(ccache_dir, Some(uid), Some(gid)).map_err(|e| { 
         error!( 
             "Failed to set the krb5 ccache directory '{}' owner and group: {:?}", 
             ccache_dir.display(), 
             e 
         ); 
         e 
     }) 

如果本地攻击者预先创建/tmp/krb5cc_<uid>作为特权目录(例如/etc)的符号链接,

create_ccache_dir将跟随该符号链接,并将目标目录选择为攻击者的uid/gid。

3、文件写入缺少O_NOFOLLOW

write_bytes_to_file()使用OpenOptions::new().create(true).ctruncate(true).write(真)打开文件,

不使用O_NOFOLLOW或O_EXCL:

himmelblau/src/daemon/src/tasks_daemon.rs

Lines 348 to 369 in 87a51ee

 fn write_bytes_to_file(bytes: &[u8], filename: &Path, uid: uid_t, gid: uid_t, mode: mode_t) -> i32 { 
     let mut file = match OpenOptions::new() 
         .create(true) 
         .truncate(true) 
         .write(true) 
         .mode(mode) 
         .open(filename) 
     { 
         Ok(file) => file, 
         Err(_) => return 1, 
     }; 

     if chown(filename, uid, gid).is_err() { 
         return 3; 
     } 

     if file.write_all(bytes).is_err() { 
         return 2; 
     } 

     0 
 } 

ccache目录中的文件(例如primary、tkt、cloud_tkt)可以是符号链接,允许攻击者将文件写入任意路径。

注意:文件级chown包装器使用lchown(第103行),它不遵循符号链接——因此这里关注的是文件写入重定向,并非文件所有权更改。

4、Ccache path使用/tmp

ccache目录定义为/tmp/krb5cc_<uid>

himmelblau/src/common/src/constants.rs

Line 61 in 87a51ee

 pub const DEFAULT_CCACHE_DIR: &str = "/tmp/krb5cc_"; 

三、POC概念验证

1、作为具有uid 1000的无特权本地用户,创建一个符号链接:ln-s/etc/tmp/krb5cc_1000

2、通过任何触发Kerberos登录流的机制(PAM登录、aad工具等)进行身份验证,这会导致守护进程分派KerberosCCache任务。

3、himmelblaud任务守护进程(以root身份运行)调用create_ccache_dir(“/tmp/krb5cc_1000”,10001000)

4、由于符号链接目标/etc存在并且是一个目录,DirBuilder::recursive(true).create()成功(或者是一个no操作)。

5、然后,守护进程按照符号链接和chowning/etc调用如下函数

std::os::unix::fs::chown("/tmp/krb5cc_1000", 1000, 1000)(它使用libc chown,而不是lchown)到uid 1000。

6、攻击者现在拥有/etc,可以修改/etc/passwd、/etc/shadow、/etc/sudoers等,实现完全的根权限升级。

或者攻击者在/tmp/krb5cc_1000(由攻击者拥有)处创建真实目录,并在其中放置指向敏感文件的主或tkt符号链接,来针对单个文件。

守护进程将通过符号链接将ccache内容写入这些目标。

文件级chown使用不遵循符号链接的lchown,因此此变体允许任意文件覆盖,但不能更改所有权。

四、影响范围

himmelblau < 3.1.0

himmelblau < 2.3.8

五、修复建议

himmelblau >= 3.1.0

himmelblau >= 2.3.8

六、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接