IPBUF安全漏洞报告
English
CVE-2023-53634 CVSS 5.5 中危

CVE-2023-53634:Linux内核arm64 BPF trampoline BTI异常漏洞

披露日期: 2025-10-07
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2023-53634
漏洞类型
BTI分支目标检查异常/内核崩溃
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux kernel (arm64架构)

相关标签

Linux kernelarm64BPFBTI内核崩溃拒绝服务本地提权trampoline分支目标识别PAC指针认证

漏洞概述

CVE-2023-53634是Linux内核arm64架构中BPF(Berkeley Packet Filter)子系统的一个安全漏洞。当BPF trampoline使用BPF_TRAMP_F_CALL_ORIG标志时,会通过BLR指令跳转回调用点之后的指令以调用被patch的函数。对于启用了BTI(Branch Target Identification,分支目标识别)的内核,调用点之后的指令通常是PACIASP,在这种情况下使用BLR跳转是安全的。但是当调用点后面不是PACIASP或bti指令时,会触发BTI异常,导致内核panic。

该漏洞在运行BPF测试程序(test_progs)时被发现,触发时系统会输出"Unhandled 64-bit el1h sync exception on CPU0, ESR 0x0000000034000002 -- BTI"的错误日志,并导致"Kernel panic - not syncing: Unhandled exception"。漏洞的根本原因在于BPF trampoline生成代码时没有考虑到调用点之后的指令可能不是BTI兼容指令(如PACIASP),导致BTI分支目标检查失败。

此漏洞的CVSS评分为5.5,属于中危级别。攻击向量为本地(AV:L),需要低权限(PR:L),无需用户交互(UI:N)。虽然机密性和完整性影响为低和无,但可用性影响为高(A:H),因为触发该漏洞会导致内核panic,造成系统拒绝服务。

技术细节

该漏洞的技术原理涉及arm64架构的BTI(Branch Target Identification)机制和BPF trampoline的代码生成逻辑。

BTI是armv8.5-A引入的一种安全特性,用于防止分支目标被恶意篡改。BTI通过在合法分支目标处放置BTI指令(如BTI C),并在分支指令(如BLR)执行时检查目标地址是否包含有效的BTI指令来工作。如果目标地址没有BTI指令,则触发异常。

在Linux内核的BPF trampoline实现中,当设置了BPF_TRAMP_F_CALL_ORIG标志时,trampoline需要调用原始的被patch函数。它使用BLR指令跳转到调用点之后的指令。对于BPF程序,JIT编译器总是在调用点之后放置PACIASP指令(用于PAC指针认证),因此BTI检查可以通过。

但是,对于普通的内核函数(如bpf_fentry_test1),调用点之后的指令可能不是PACIASP。例如在漏洞触发的场景中,调用点之后的指令是ADD指令,不是PACIASP。当BPF trampoline使用BLR跳转到这个ADD指令时,由于该地址没有BTI指令,触发了BTI异常。

修复方案是将BLR指令替换为RET指令。RET指令不受BTI分支目标检查的约束,因此可以安全地跳转到任何地址。通过这种方式,BPF trampoline可以绕过BTI检查,避免触发异常。

利用方式:本地用户可以通过加载特定的BPF程序(如使用bpf()系统调用)并触发BPF trampoline执行来触发该漏洞,导致内核panic和系统拒绝服务。

攻击链分析

STEP 1
步骤1:准备环境
攻击者需要在arm64架构的Linux系统上,该系统需要启用BTI(Branch Target Identification)功能,通常需要较新的arm64处理器(如Cortex-A77及以上)
STEP 2
步骤2:获取本地权限
攻击者需要拥有系统的本地访问权限(低权限即可),能够执行用户态程序
STEP 3
步骤3:加载BPF程序
攻击者通过bpf()系统调用加载一个BPF fentry或tracing类型的程序,附加到调用点后不是PACIASP指令的内核函数上
STEP 4
步骤4:触发BPF trampoline执行
当目标内核函数被调用时,BPF trampoline会执行,并通过BLR指令跳转回调用点之后的指令
STEP 5
步骤5:触发BTI异常
由于调用点之后的指令不是PACIASP或BTI指令,BTI分支目标检查失败,触发BTI异常(ESR 0x0000000034000002)
STEP 6
步骤6:内核panic
异常未被处理,导致内核panic,系统拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2023-53634 // This PoC demonstrates how to trigger the BTI exception in Linux kernel BPF trampoline // on arm64 architecture when BPF_TRAMP_F_CALL_ORIG is used with a function whose // call site is not followed by PACIASP or BTI instruction. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/syscall.h> #include <linux/bpf.h> // Simplified BPF program to trigger the vulnerability // In real scenario, use libbpf to load a tracing/fentry BPF program // attached to a function whose call site is not followed by PACIASP int main() { // The vulnerability is triggered when: // 1. BPF_TRAMP_F_CALL_ORIG is set in trampoline // 2. The target function's call site is followed by ADD instruction // instead of PACIASP or BTI // // Example trigger: load a BPF fentry program on bpf_fentry_test1 // which has the following instruction sequence: // bpf_fentry_test1: // bti c // nop // nop // add w0, w0, #0x1 <-- not PACIASP, triggers BTI exception // paciasp // // When BPF trampoline uses BLR to jump to the ADD instruction, // BTI branch target check fails, causing kernel panic. printf("CVE-2023-53634 PoC\n"); printf("Load BPF fentry program on bpf_fentry_test1 to trigger BTI exception\n"); printf("Requires arm64 hardware with BTI enabled\n"); printf("Run: ./test_progs -t fentry\n"); // Use bpf() syscall to load and attach BPF program // The actual implementation requires libbpf and proper BPF program loading return 0; }

影响范围

Linux kernel < 738a96c4a8c36950803fdd27e7c30aca92dccefd (stable分支)
Linux kernel < 8b9c64942ada229f52fe6f1b537a50f88b3c2673 (stable分支)
Linux kernel < eabc166919d169e105263974991f52b0351e431a (stable分支)

防御指南

临时缓解措施
在无法立即升级内核的情况下,可以通过以下方式临时缓解:1)限制普通用户加载BPF程序的权限,通过设置/sys/kernel/security/lockdown为integrity模式;2)使用seccomp或AppArmor限制bpf()系统调用的使用;3)在内核启动参数中添加`pti=on`和`kpti=on`等安全选项;4)监控BPF相关的系统调用,及时发现异常行为。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表