arm64:探测:修复大端内核的 uprobes(CVE-2024-50194)
CVE编号
CVE-2024-50194利用情况
暂无补丁情况
N/A披露时间
2024-11-08漏洞描述
在Linux内核中,已经解决了以下漏洞:针对大端架构的arm64的uprobes代码存在问题。由于它并未将在内存中的指令编码(始终为小端)转换为内核的本机字节序进行分析和模拟指令,这可能导致几个不同的问题:1. 内核可能会错误地拒绝探测一个其实可以安全探测的指令。2. 内核可能会错误地允许一个无法安全跳过的指令被跳过。3. 由于错误地解释了字节顺序颠倒的编码,内核可能会错误地模拟指令。编译器和稀疏工具未能捕获到字节序的不匹配问题,因为:* arch_uprobe::{insn,ixol}字段被编码为u8数组,因此编译器和稀疏工具并不知道这些字段包含一个小端32位值。核心uprobes代码使用memcpy()填充这些字段,同样不处理字节序问题。* 虽然uprobe_opcode_t类型是__le32的别名,但arch_uprobe_analyze_insn()和arch_uprobe_skip_sstep()函数将u8[]转换为同样命名的probe_opcode_t(别名为u32),因此没有进行字节序转换警告。通过改变arch_uprobe::{insn,ixol}字段为__le32,并在消费指令编码之前添加适当的__le32_to_cpu()转换来解决这个问题。核心uprobes会将这些字段复制为不透明的字节范围,因此这个改变不会对其产生影响。同时,移除MAX_UINSN_BYTES,为了清晰一致地使用AARCH64_INSN_SIZE。使用以下代码进行了测试:测试代码中包含一个名为adrp_self的函数,该函数使用汇编语言进行 adrp(取地址寄存器指针)操作。在函数被编译后,对其进行了跟踪调试。在修复漏洞之前,ADRp指令无法被正确识别并模拟,导致结果出现错误。在修复漏洞后,ADRp指令被正确识别并模拟。测试结果表明漏洞修复后的内核能够正确处理和模拟adrp指令。解决建议
"将组件 Linux 升级至 4.10 及以上版本"受影响软件情况
# | 类型 | 厂商 | 产品 | 版本 | 影响面 | ||||
1 | |||||||||
---|---|---|---|---|---|---|---|---|---|
运行在以下环境 | |||||||||
系统 | debian_12 | linux | * | Up to (excluding) 6.1.115-1 |
- 攻击路径 N/A
- 攻击复杂度 N/A
- 权限要求 N/A
- 影响范围 N/A
- 用户交互 N/A
- 可用性 N/A
- 保密性 N/A
- 完整性 N/A
CWE-ID | 漏洞类型 |
Exp相关链接

版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
评论