☠
🐛
CIFS 漏洞分析笔记
2026.06.05  |  QVD-2026-29453  |  19年暗门
1. 什么是 CIFS?
CIFS 是 Linux 访问 Windows 共享文件夹的协议。当你用 Linux 挂载一个 Windows 共享目录的时候,系统需要做 Kerberos 认证。
2. 正常流程
这个认证过程会通过一个叫 request_key 的机制,叫醒一个 root 权限 的帮手程序——cifs.upcall。
内核 CIFS 模块 ➞ 发出认证请求 ➞ request_key ➞ cifs.upcall ➞ 完成认证
请求里带着一串描述信息,告诉 cifs.upcall 去哪认证、用什么凭据、找哪个进程。一切基于一个默认的前提——这些描述信息来自内核,是可信的。
注意!root 权限的进程被"叫醒"了!
3. 漏洞核心:校验缺失
但内核没有验证这个前提啊!本来内核有个校验机制叫 vet_description,专门验证请求是不是真的来自 CIFS 模块。
CIFS 没有实现这个校验!
结果就是,本地任何用户都能伪造一段描述信息,内核分不清这是真的 CIFS 认证请求还是用户手搓的假货。
19年了,这个校验一直是空的...
4. 关键问题
root 进程被叫醒之后,为什么会去执行攻击者的代码?
5. 攻击链路拆解
1 伪造描述信息(带恶意 pid 字段)
2 cifs.upcall 根据 pid 切换到对应进程的命名空间
3 root 进程走进了攻击者的地盘
4 攻击者在命名空间里改掉"查用户"的配置
5 让"查用户"变成"加载我写的恶意代码"
6 root 进程一查用户,恶意代码就跑起来了
6. 最终效果
恶意代码也很简单:往 sudoers 里加一条,让用户免密 sudo。也就是不用密码提权到 root。
普通用户 ➞ 伪造请求 ➞ 进入恶意命名空间 ➞ root 权限
—— 笔记整理完毕。核心就一句话:内核太信任用户空间的数据了。