Cloudanix VulnDB

CVE-2024-58237

None

CVSS

—

EPSS

0.2%

Published

May 5, 2025

CISA due date

—

Cloudanix analysis

Monitor only SSVC: Track

A bug in how the Linux kernel checks certain network programs could let attackers crash systems or bypass security protections on servers and devices using those programs.

Exploitation
Local Privilege
Attacker needs
High Privilege
Complexity
Theoretical
Impact
Full Compromise
Component
OS kernel
Class
Improper Input Validation
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

The vulnerability allows tail-called BPF programs to execute helpers that invalidate packet pointers without the verifier conservatively marking 'changes_pkt_data' effects, enabling unsafe post-tail-call accesses to packet data pointers in programs like those using bpf_tail_call_static.

Why it matters to the business

Linux-based systems and Android devices running affected kernels with eBPF networking programs face elevated risk of kernel instability, crashes, or security bypasses during packet processing; high ecosystem prevalence in servers, network appliances, and mobile devices amplifies operational disruption and potential data exposure.

How an attack unfolds

An attacker compiles and loads a malicious BPF program that performs a tail call to a subprogram, then dereferences a packet pointer previously obtained from sk->data; because the verifier no longer tracks invalidation across the tail call, the access succeeds and triggers memory corruption or information disclosure.

How to fix it

Upgrade the Linux kernel to a version containing commit f1692ee23dcaaddc24ba407b269707ee5df1301f; for Android devices apply the SoCVersion fix dated 2022-08-05 or later vendor patches.

How to confirm the fix worked

Confirm the patch is present by checking that bpf_helper_changes_pkt_data() now accounts for tail calls and that check_cfg() correctly propagates 'changes_pkt_data' for global subprograms; recompile and load test programs that previously triggered the unsafe pattern to ensure they are now rejected.

Typical attack path

  1. Compile and load a crafted eBPF program containing bpf_tail_call_static followed by packet data dereference
  2. Attach the program to a TC classifier or XDP hook on a network interface
  3. Send crafted network packets that trigger the program path
  4. Trigger verifier bypass leading to invalid pointer use after the tail call

How to detect it

Review kernel logs for BPF verifier messages referencing tail_call or changes_pkt_data; inspect loaded BPF programs via bpftool for tail calls followed by packet data accesses; correlate with unusual program attachment events in audit logs.

What your security team should do

  • Immediately schedule kernel upgrades on all systems running eBPF programs with tail calls
  • Audit custom BPF programs for use of tail calls and packet pointer assumptions
  • Enable kernel BPF verifier logging and monitor for rejected programs during rollout
  • Prioritize updates on high-traffic network devices given the 541 days since publication and rising EPSS trend

The record

In the Linux kernel, the following vulnerability has been resolved: bpf: consider that tail calls invalidate packet pointers Tail-called programs could execute any of the helpers that invalidate packet pointers. Hence, conservatively assume that each tail call invalidates packet pointers. Making the change in bpf_helper_changes_pkt_data() automatically makes use of check_cfg() logic that computes 'changes_pkt_data' effect for global sub-programs, such that the following program could be rejected: int tail_call(struct __sk_buff *sk) { bpf_tail_call_static(sk, &jmp_table, 0); return 0; } SEC("tc") int not_safe(struct __sk_buff *sk) { int *p = (void *)(long)sk->data; ... make p valid ... tail_call(sk); *p = 42; /* this is unsafe */ ... } The tc_bpf2bpf.c:subprog_tc() needs change: mark it as a function that can invalidate packet pointers. Otherwise, it can't be freplaced with tailcall_freplace.c:entry_freplace() that does a tail call.

Affected packages

Ecosystem Package Introduced Fixed
Debian:11 linux 0 No fix
Debian:12 linux 0 No fix
Debian:13 linux 0 6.12.9-1
Linux Kernel 5.6.0 6.6.90
SUSE:Linux Enterprise High Availability Extension 15 SP6 kernel-default 0 6.4.0-150600.23.53.1
SUSE:Linux Enterprise Live Patching 15 SP6 kernel-default 0 6.4.0-150600.23.53.1
SUSE:Linux Enterprise Live Patching 15 SP6 kernel-livepatch-SLE15-SP6-RT_Update_11 0 1-150600.1.3.2
SUSE:Linux Enterprise Live Patching 15 SP6 kernel-livepatch-SLE15-SP6_Update_12 0 1-150600.13.3.1
SUSE:Linux Enterprise Module for Basesystem 15 SP6 kernel-64kb 0 6.4.0-150600.23.53.1
SUSE:Linux Enterprise Module for Basesystem 15 SP6 kernel-default 0 6.4.0-150600.23.53.1
SUSE:Linux Enterprise Module for Basesystem 15 SP6 kernel-default-base 0 6.4.0-150600.23.53.1.150600.12.24.1
SUSE:Linux Enterprise Module for Basesystem 15 SP6 kernel-source 0 6.4.0-150600.23.53.1
SUSE:Linux Enterprise Module for Basesystem 15 SP6 kernel-zfcpdump 0 6.4.0-150600.23.53.1
SUSE:Linux Enterprise Module for Confidential Computing Technical Preview 15 SP6 kernel-coco 0 6.4.0-15061.28.coco15sp6.1
SUSE:Linux Enterprise Module for Confidential Computing Technical Preview 15 SP6 kernel-coco_debug 0 6.4.0-15061.28.coco15sp6.1
SUSE:Linux Enterprise Module for Confidential Computing Technical Preview 15 SP6 kernel-source-coco 0 6.4.0-15061.28.coco15sp6.1
SUSE:Linux Enterprise Module for Confidential Computing Technical Preview 15 SP6 kernel-syms-coco 0 6.4.0-15061.28.coco15sp6.1
SUSE:Linux Enterprise Module for Development Tools 15 SP6 kernel-docs 0 6.4.0-150600.23.53.1
SUSE:Linux Enterprise Module for Development Tools 15 SP6 kernel-obs-build 0 6.4.0-150600.23.53.1
SUSE:Linux Enterprise Module for Development Tools 15 SP6 kernel-source 0 6.4.0-150600.23.53.1
SUSE:Linux Enterprise Module for Development Tools 15 SP6 kernel-syms 0 6.4.0-150600.23.53.1
SUSE:Linux Enterprise Module for Legacy 15 SP6 kernel-default 0 6.4.0-150600.23.53.1
SUSE:Linux Enterprise Module for Public Cloud 15 SP6 kernel-azure 0 6.4.0-150600.8.40.1
SUSE:Linux Enterprise Module for Public Cloud 15 SP6 kernel-source-azure 0 6.4.0-150600.8.40.1
SUSE:Linux Enterprise Module for Public Cloud 15 SP6 kernel-syms-azure 0 6.4.0-150600.8.40.1
SUSE:Linux Enterprise Workstation Extension 15 SP6 kernel-default 0 6.4.0-150600.23.53.1
SUSE:Real Time Module 15 SP6 kernel-rt 0 6.4.0-150600.10.39.1
SUSE:Real Time Module 15 SP6 kernel-rt_debug 0 6.4.0-150600.10.39.1
SUSE:Real Time Module 15 SP6 kernel-source-rt 0 6.4.0-150600.10.39.1
SUSE:Real Time Module 15 SP6 kernel-syms-rt 0 6.4.0-150600.10.39.1
openSUSE:Leap 15.6 dtb-aarch64 0 6.4.0-150600.23.53.1
openSUSE:Leap 15.6 kernel-64kb 0 6.4.0-150600.23.53.1
openSUSE:Leap 15.6 kernel-azure 0 6.4.0-150600.8.40.1
openSUSE:Leap 15.6 kernel-debug 0 6.4.0-150600.23.53.1
openSUSE:Leap 15.6 kernel-default 0 6.4.0-150600.23.53.1
openSUSE:Leap 15.6 kernel-default-base 0 6.4.0-150600.23.53.1.150600.12.24.1
openSUSE:Leap 15.6 kernel-docs 0 6.4.0-150600.23.53.1
openSUSE:Leap 15.6 kernel-kvmsmall 0 6.4.0-150600.23.53.1
openSUSE:Leap 15.6 kernel-obs-build 0 6.4.0-150600.23.53.1
openSUSE:Leap 15.6 kernel-obs-qa 0 6.4.0-150600.23.53.1
openSUSE:Leap 15.6 kernel-rt 0 6.4.0-150600.10.39.1
openSUSE:Leap 15.6 kernel-rt_debug 0 6.4.0-150600.10.39.1
openSUSE:Leap 15.6 kernel-source 0 6.4.0-150600.23.53.1
openSUSE:Leap 15.6 kernel-source-azure 0 6.4.0-150600.8.40.1
openSUSE:Leap 15.6 kernel-source-rt 0 6.4.0-150600.10.39.1
openSUSE:Leap 15.6 kernel-syms 0 6.4.0-150600.23.53.1
openSUSE:Leap 15.6 kernel-syms-azure 0 6.4.0-150600.8.40.1
openSUSE:Leap 15.6 kernel-syms-rt 0 6.4.0-150600.10.39.1
openSUSE:Leap 15.6 kernel-zfcpdump 0 6.4.0-150600.23.53.1

Related vulnerabilities