108 Star 69 Fork 293

src-openEuler/kernel

 / 详情

CVE-2024-47702

已完成
CVE和安全问题 拥有者
创建于  
2024-10-21 20:42

一、漏洞信息
漏洞编号:CVE-2024-47702
漏洞归属组件:kernel
漏洞归属的版本:4.19.140,4.19.194,4.19.90,5.10.0,6.1.0,6.1.14,6.1.19,6.1.5,6.1.6,6.1.8,6.4.0,6.6.0
CVSS V3.0分值:
BaseScore:5.5 Medium
Vector:CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
漏洞简述:
In the Linux kernel, the following vulnerability has been resolved:bpf: Fail verification for sign-extension of packet data/data_end/data_metasyzbot reported a kernel crash due to commit 1f1e864b6555 ( bpf: Handle sign-extenstin ctx member accesses ).The reason is due to sign-extension of 32-bit load forpacket data/data_end/data_meta uapi field.The original code looks like: r2 = *(s32 )(r1 + 76) / load __sk_buff->data */ r3 = *(u32 )(r1 + 80) / load __sk_buff->data_end */ r0 = r2 r0 += 8 if r3 > r0 goto +1 ...Note that __sk_buff->data load has 32-bit sign extension.After verification and convert_ctx_accesses(), the final asm code looks like: r2 = *(u64 *)(r1 +208) r2 = (s32)r2 r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1 ...Note that r2 = (s32)r2 may make the kernel __sk_buff->data address invalidwhich may cause runtime failure.Currently, in C code, typically we have void *data = (void *)(long)skb->data; void *data_end = (void *)(long)skb->data_end; ...and it will generate r2 = *(u64 *)(r1 +208) r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1If we allow sign-extension, void *data = (void *)(long)(int)skb->data; void *data_end = (void *)(long)skb->data_end; ...the generated code looks like r2 = *(u64 *)(r1 +208) r2 <<= 32 r2 s>>= 32 r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1and this will cause verification failure since r2 <<= 32 is not allowedas r2 is a packet pointer.To fix this issue for case r2 = *(s32 )(r1 + 76) / load __sk_buff->data */this patch added additional checking in is_valid_access() callbackfunction for packet data/data_end/data_meta access. If those accessesare with sign-extenstion, the verification will fail. [1] https://lore.kernel.org/bpf/000000000000c90eee061d236d37@google.com/
漏洞公开时间:2024-10-21 20:15:06
漏洞创建时间:2024-10-21 20:42:30
漏洞详情参考链接:
https://nvd.nist.gov/vuln/detail/CVE-2024-47702

更多参考(点击展开)
参考来源 参考链接 来源链接
416baaa9-dc9f-4396-8d5f-8c081fb06d67 https://git.kernel.org/stable/c/92de36080c93296ef9005690705cba260b9bd68a
416baaa9-dc9f-4396-8d5f-8c081fb06d67 https://git.kernel.org/stable/c/f09757fe97a225ae505886eac572e4cbfba96537
416baaa9-dc9f-4396-8d5f-8c081fb06d67 https://git.kernel.org/stable/c/f1620c93a1ec950d87ef327a565d3907736d3340
suse_bugzilla http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2024-47702 https://bugzilla.suse.com/show_bug.cgi?id=1231924
suse_bugzilla https://www.cve.org/CVERecord?id=CVE-2024-47702 https://bugzilla.suse.com/show_bug.cgi?id=1231924
suse_bugzilla https://git.kernel.org/stable/c/92de36080c93296ef9005690705cba260b9bd68a https://bugzilla.suse.com/show_bug.cgi?id=1231924
suse_bugzilla https://git.kernel.org/stable/c/f09757fe97a225ae505886eac572e4cbfba96537 https://bugzilla.suse.com/show_bug.cgi?id=1231924
suse_bugzilla https://git.kernel.org/stable/c/f1620c93a1ec950d87ef327a565d3907736d3340 https://bugzilla.suse.com/show_bug.cgi?id=1231924
suse_bugzilla https://git.kernel.org/pub/scm/linux/security/vulns.git/plain/cve/published/2024/CVE-2024-47702.mbox https://bugzilla.suse.com/show_bug.cgi?id=1231924
suse_bugzilla https://bugzilla.redhat.com/show_bug.cgi?id=2320179 https://bugzilla.suse.com/show_bug.cgi?id=1231924
redhat_bugzilla https://lore.kernel.org/bpf/000000000000c90eee061d236d37@google.com/ https://bugzilla.redhat.com/show_bug.cgi?id=2320179
redhat_bugzilla https://lore.kernel.org/linux-cve-announce/2024102115-CVE-2024-47702-c5c4@gregkh/T https://bugzilla.redhat.com/show_bug.cgi?id=2320179
debian https://security-tracker.debian.org/tracker/CVE-2024-47702

漏洞分析指导链接:
https://gitee.com/openeuler/cve-manager/blob/master/cve-vulner-manager/doc/md/manual.md
漏洞数据来源:
openBrain开源漏洞感知系统
漏洞补丁信息:

详情(点击展开)
影响的包 修复版本 修复补丁 问题引入补丁 来源
https://git.kernel.org/stable/c/92de36080c93296ef9005690705cba260b9bd68a nvd
https://git.kernel.org/stable/c/f09757fe97a225ae505886eac572e4cbfba96537 nvd
https://git.kernel.org/stable/c/f1620c93a1ec950d87ef327a565d3907736d3340 nvd

二、漏洞分析结构反馈
影响性分析说明:
In the Linux kernel, the following vulnerability has been resolved:bpf: Fail verification for sign-extension of packet data/data_end/data_metasyzbot reported a kernel crash due to commit 1f1e864b6555 ("bpf: Handle sign-extenstin ctx member accesses").The reason is due to sign-extension of 32-bit load forpacket data/data_end/data_meta uapi field.The original code looks like: r2 = *(s32 )(r1 + 76) / load __sk_buff->data */ r3 = *(u32 )(r1 + 80) / load __sk_buff->data_end */ r0 = r2 r0 += 8 if r3 > r0 goto +1 ...Note that __sk_buff->data load has 32-bit sign extension.After verification and convert_ctx_accesses(), the final asm code looks like: r2 = *(u64 *)(r1 +208) r2 = (s32)r2 r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1 ...Note that 'r2 = (s32)r2' may make the kernel __sk_buff->data address invalidwhich may cause runtime failure.Currently, in C code, typically we have void *data = (void *)(long)skb->data; void *data_end = (void *)(long)skb->data_end; ...and it will generate r2 = *(u64 *)(r1 +208) r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1If we allow sign-extension, void *data = (void *)(long)(int)skb->data; void *data_end = (void *)(long)skb->data_end; ...the generated code looks like r2 = *(u64 *)(r1 +208) r2 <<= 32 r2 s>>= 32 r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1and this will cause verification failure since "r2 <<= 32" is not allowedas "r2" is a packet pointer.To fix this issue for case r2 = *(s32 )(r1 + 76) / load __sk_buff->data */this patch added additional checking in is_valid_access() callbackfunction for packet data/data_end/data_meta access. If those accessesare with sign-extenstion, the verification will fail. [1] <ahref= https://lore.kernel.org/bpf/000000000000c90eee061d236d37@google.com/ >https://lore.kernel.org/bpf/000000000000c90eee061d236d37@google.com/The Linux kernel CVE team has assigned CVE-2024-47702 to this issue.
openEuler评分:
5.5
Vector:CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
受影响版本排查(受影响/不受影响):
1.openEuler-24.03-LTS(6.6.0):受影响
2.openEuler-20.03-LTS-SP4(4.19.90):不受影响
3.openEuler-22.03-LTS-SP1(5.10.0):不受影响
4.openEuler-22.03-LTS-SP3(5.10.0):不受影响
5.openEuler-22.03-LTS-SP4(5.10.0):不受影响
6.master(6.6.0):不受影响
7.openEuler-24.03-LTS-Next(6.6.0):不受影响

修复是否涉及abi变化(是/否):
1.openEuler-20.03-LTS-SP4(4.19.90):否
2.openEuler-22.03-LTS-SP1(5.10.0):否
3.openEuler-22.03-LTS-SP3(5.10.0):否
4.master(6.6.0):否
5.openEuler-24.03-LTS(6.6.0):否
6.openEuler-24.03-LTS-Next(6.6.0):否
7.openEuler-22.03-LTS-SP4(5.10.0):否

原因说明:
1.master(6.6.0):
2.openEuler-20.03-LTS-SP4(4.19.90):
3.openEuler-22.03-LTS-SP1(5.10.0):
4.openEuler-22.03-LTS-SP3(5.10.0):
5.openEuler-22.03-LTS-SP4(5.10.0):
6.openEuler-24.03-LTS(6.6.0):
7.openEuler-24.03-LTS-Next(6.6.0):
8.openEuler-24.03-LTS-SP1:

三、漏洞修复
安全公告链接:https://www.openeuler.org/zh/security/safety-bulletin/detail/?id=openEuler-SA-2024-2423

评论 (5)

openeuler-ci-bot 创建了CVE和安全问题 5个月前
openeuler-ci-bot 添加了
 
CVE/UNFIXED
标签
5个月前
展开全部操作日志

Hi openeuler-ci-bot, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: Kernel, and any of the maintainers.

openeuler-ci-bot 添加了
 
sig/Kernel
标签
5个月前
openeuler-ci-bot 修改了描述 5个月前
openeuler-ci-bot 修改了描述 5个月前
openeuler-ci-bot 修改了描述 5个月前
openeuler-ci-bot 修改了描述 5个月前
openeuler-ci-bot 计划开始日期设置为2024-10-21 5个月前
openeuler-ci-bot 计划截止日期设置为2024-11-20 5个月前
openeuler-ci-bot 优先级设置为次要 5个月前

CVE-2024-47702

影响性分析说明:
In the Linux kernel, the following vulnerability has been resolved:

bpf: Fail verification for sign-extension of packet data/data_end/data_meta

syzbot reported a kernel crash due to
commit 1f1e864b6555 ("bpf: Handle sign-extenstin ctx member accesses").
The reason is due to sign-extension of 32-bit load for
packet data/data_end/data_meta uapi field.

The original code looks like:
r2 = *(s32 )(r1 + 76) / load __sk_buff->data */
r3 = *(u32 )(r1 + 80) / load __sk_buff->data_end */
r0 = r2
r0 += 8
if r3 > r0 goto +1
...
Note that __sk_buff->data load has 32-bit sign extension.

After verification and convert_ctx_accesses(), the final asm code looks like:
r2 = *(u64 *)(r1 +208)
r2 = (s32)r2
r3 = *(u64 *)(r1 +80)
r0 = r2
r0 += 8
if r3 > r0 goto pc+1
...
Note that 'r2 = (s32)r2' may make the kernel __sk_buff->data address invalid
which may cause runtime failure.

Currently, in C code, typically we have
void *data = (void *)(long)skb->data;
void *data_end = (void *)(long)skb->data_end;
...
and it will generate
r2 = *(u64 *)(r1 +208)
r3 = *(u64 *)(r1 +80)
r0 = r2
r0 += 8
if r3 > r0 goto pc+1

If we allow sign-extension,
void *data = (void *)(long)(int)skb->data;
void *data_end = (void *)(long)skb->data_end;
...
the generated code looks like
r2 = *(u64 *)(r1 +208)
r2 <<= 32
r2 s>>= 32
r3 = *(u64 *)(r1 +80)
r0 = r2
r0 += 8
if r3 > r0 goto pc+1
and this will cause verification failure since "r2 <<= 32" is not allowed
as "r2" is a packet pointer.

To fix this issue for case
r2 = *(s32 )(r1 + 76) / load __sk_buff->data */
this patch added additional checking in is_valid_access() callback
function for packet data/data_end/data_meta access. If those accesses
are with sign-extenstion, the verification will fail.

[1] https://lore.kernel.org/bpf/000000000000c90eee061d236d37@google.com/

The Linux kernel CVE team has assigned CVE-2024-47702 to this issue.

openEuler评分:(评分和向量)
5.5
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

受影响版本排查(受影响/不受影响):
1.openEuler-20.03-LTS-SP4:不受影响
2.openEuler-22.03-LTS-SP1:不受影响
3.openEuler-22.03-LTS-SP3:不受影响
4.openEuler-22.03-LTS-SP4:不受影响
5.master(6.1.0):不受影响
6.openEuler-24.03-LTS:受影响
7.openEuler-24.03-LTS-Next:不受影响

修复是否涉及abi变化(是/否):
1.openEuler-20.03-LTS-SP4:否
2.openEuler-22.03-LTS-SP1:否
3.openEuler-22.03-LTS-SP3:否
4.master(6.1.0):否
5.openEuler-24.03-LTS:否
6.openEuler-24.03-LTS-Next:否
7.openEuler-22.03-LTS-SP4:否

openeuler-ci-bot 修改了描述 5个月前

@ 经过 cve-manager 解析, 已分析的内容如下表所示:

状态 分析项目 内容
已分析 1.影响性分析说明 In the Linux kernel, the following vulnerability has been resolved:bpf: Fail verification for sign-extension of packet data/data_end/data_metasyzbot reported a kernel crash due to commit 1f1e864b6555 ("bpf: Handle sign-extenstin ctx member accesses").The reason is due to sign-extension of 32-bit load forpacket data/data_end/data_meta uapi field.The original code looks like: r2 = *(s32 )(r1 + 76) / load __sk_buff->data */ r3 = *(u32 )(r1 + 80) / load __sk_buff->data_end */ r0 = r2 r0 += 8 if r3 > r0 goto +1 ...Note that __sk_buff->data load has 32-bit sign extension.After verification and convert_ctx_accesses(), the final asm code looks like: r2 = *(u64 *)(r1 +208) r2 = (s32)r2 r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1 ...Note that 'r2 = (s32)r2' may make the kernel __sk_buff->data address invalidwhich may cause runtime failure.Currently, in C code, typically we have void *data = (void *)(long)skb->data; void *data_end = (void *)(long)skb->data_end; ...and it will generate r2 = *(u64 *)(r1 +208) r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1If we allow sign-extension, void *data = (void *)(long)(int)skb->data; void *data_end = (void *)(long)skb->data_end; ...the generated code looks like r2 = *(u64 *)(r1 +208) r2 <<= 32 r2 s>>= 32 r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1and this will cause verification failure since "r2 <<= 32" is not allowedas "r2" is a packet pointer.To fix this issue for case r2 = *(s32 )(r1 + 76) / load __sk_buff->data */this patch added additional checking in is_valid_access() callbackfunction for packet data/data_end/data_meta access. If those accessesare with sign-extenstion, the verification will fail. [1] <ahref="https://lore.kernel.org/bpf/000000000000c90eee061d236d37@google.com/">https://lore.kernel.org/bpf/000000000000c90eee061d236d37@google.com/The Linux kernel CVE team has assigned CVE-2024-47702 to this issue.
已分析 2.openEulerScore 5.5
已分析 3.openEulerVector AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
已分析 4.受影响版本排查 openEuler-24.03-LTS:受影响,openEuler-20.03-LTS-SP4:不受影响,openEuler-22.03-LTS-SP1:不受影响,openEuler-22.03-LTS-SP3:不受影响,openEuler-22.03-LTS-SP4:不受影响,master:不受影响,openEuler-24.03-LTS-Next:不受影响
已分析 5.是否涉及abi变化 openEuler-20.03-LTS-SP4:否,openEuler-22.03-LTS-SP1:否,openEuler-22.03-LTS-SP3:否,master:否,openEuler-24.03-LTS:否,openEuler-24.03-LTS-Next:否,openEuler-22.03-LTS-SP4:否
已分析 6.原因说明

请确认分析内容的准确性, 确认无误后, 您可以进行后续步骤, 否则您可以继续分析.

openeuler-ci-bot 计划开始日期2024-10-21 修改为2024-11-04 5个月前
openeuler-ci-bot 计划截止日期2024-11-20 修改为2024-12-04 5个月前
ci-robot 通过合并 Pull Request !13064: CVE-2024-47702任务状态待办的 修改为已完成 5个月前
openeuler-ci-bot 移除了
 
CVE/UNFIXED
标签
5个月前
openeuler-ci-bot 移除了
 
sig/Kernel
标签
5个月前
openeuler-ci-bot 添加了
 
CVE/FIXED
标签
5个月前
openeuler-ci-bot 添加了
 
sig/Kernel
标签
5个月前

CVE-2024-47702

影响性分析说明:
In the Linux kernel, the following vulnerability has been resolved:

bpf: Fail verification for sign-extension of packet data/data_end/data_meta

syzbot reported a kernel crash due to
commit 1f1e864b6555 ("bpf: Handle sign-extenstin ctx member accesses").
The reason is due to sign-extension of 32-bit load for
packet data/data_end/data_meta uapi field.

The original code looks like:
r2 = *(s32 )(r1 + 76) / load __sk_buff->data */
r3 = *(u32 )(r1 + 80) / load __sk_buff->data_end */
r0 = r2
r0 += 8
if r3 > r0 goto +1
...
Note that __sk_buff->data load has 32-bit sign extension.

After verification and convert_ctx_accesses(), the final asm code looks like:
r2 = *(u64 *)(r1 +208)
r2 = (s32)r2
r3 = *(u64 *)(r1 +80)
r0 = r2
r0 += 8
if r3 > r0 goto pc+1
...
Note that 'r2 = (s32)r2' may make the kernel __sk_buff->data address invalid
which may cause runtime failure.

Currently, in C code, typically we have
void *data = (void *)(long)skb->data;
void *data_end = (void *)(long)skb->data_end;
...
and it will generate
r2 = *(u64 *)(r1 +208)
r3 = *(u64 *)(r1 +80)
r0 = r2
r0 += 8
if r3 > r0 goto pc+1

If we allow sign-extension,
void *data = (void *)(long)(int)skb->data;
void *data_end = (void *)(long)skb->data_end;
...
the generated code looks like
r2 = *(u64 *)(r1 +208)
r2 <<= 32
r2 s>>= 32
r3 = *(u64 *)(r1 +80)
r0 = r2
r0 += 8
if r3 > r0 goto pc+1
and this will cause verification failure since "r2 <<= 32" is not allowed
as "r2" is a packet pointer.

To fix this issue for case
r2 = *(s32 )(r1 + 76) / load __sk_buff->data */
this patch added additional checking in is_valid_access() callback
function for packet data/data_end/data_meta access. If those accesses
are with sign-extenstion, the verification will fail.

[1] https://lore.kernel.org/bpf/000000000000c90eee061d236d37@google.com/

The Linux kernel CVE team has assigned CVE-2024-47702 to this issue.

openEuler评分:(评分和向量)
5.5
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

受影响版本排查(受影响/不受影响):
1.openEuler-20.03-LTS-SP4:不受影响
2.openEuler-22.03-LTS-SP1:不受影响
3.openEuler-22.03-LTS-SP3:不受影响
4.openEuler-22.03-LTS-SP4:不受影响
5.master(6.1.0):不受影响
6.openEuler-24.03-LTS:受影响
7.openEuler-24.03-LTS-Next:不受影响

修复是否涉及abi变化(是/否):
1.openEuler-20.03-LTS-SP4:否
2.openEuler-22.03-LTS-SP1:否
3.openEuler-22.03-LTS-SP3:否
4.master(6.1.0):否
5.openEuler-24.03-LTS:否
6.openEuler-24.03-LTS-Next:否
7.openEuler-22.03-LTS-SP4:否

openeuler-ci-bot 修改了描述 4个月前

登录 后才可以发表评论

状态
负责人
项目
预计工期 (小时)
开始日期   -   截止日期
-
置顶选项
优先级
分支
参与者(2)
5329419 openeuler ci bot 1632792936 hulk-robot-zhixiuzhou
1
https://gitee.com/src-openeuler/kernel.git
git@gitee.com:src-openeuler/kernel.git
src-openeuler
kernel
kernel

搜索帮助

371d5123 14472233 46e8bd33 14472233