Re: ulogd: out of bounds array access in ulogd_filter_HWHDR

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2025-01-13, at 10:33:10 +0000, James Dingwall wrote:
> This report relates to https://bugs.launchpad.net/ubuntu/+source/ulogd2/+bug/2080677.
> 
> # apt-cache policy ulogd2
> ulogd2:
>   Installed: 2.0.8-2build1
>   Candidate: 2.0.8-2build1
>   Version table:
>  *** 2.0.8-2build1 500
>         500 http://gb.archive.ubuntu.com/ubuntu noble/universe amd64 Packages
>         100 /var/lib/dpkg/status
> 
> # lsb_release -a
> No LSB modules are available.
> Distributor ID: Ubuntu
> Description: Ubuntu 24.04.1 LTS
> Release: 24.04
> Codename: noble
> 
> It seems that there is an out of bounds array access in ulogd_filter_HWHDR.c
> which leads to ulogd2 being terminated with SIGABRT and the following message
> when it is compiled with -D_FORTIFY_SOURCE=3:
> 
> *** buffer overflow detected ***
> 
> The hwac_str array is defined as:
> 
>   static char hwmac_str[MAX_KEY - START_KEY][HWADDR_LENGTH];
> 
> Which translates to:
> 
>   static char hwmac_str[4 - 2][128];
> 
> i.e. an array of two elements, valid indexes 0, 1.
> 
> Adding a debug print statement in the parse_mac2str function:
> 
>   fprintf(stderr, "using hwmac_str index %d\n", okey - START_KEY);
> 
> will result in the following message:  
> 
>   using hwmac_str index 2
> 
> So the for loop attempts to format the mac address in to an invalid index in
> hwmac_str.
> 
> As a simple test I made the definition of hwmac_str an array of 3 elements
> which prevented the crash.  I don't know if it is correct to simply make
> the array longer or if the bug is actually in the value of 'okey' passed to
> the function.  However based on the final return in interp_mac2str I think
> the array definition is too short.  The attached patch allows ulog2 to
> run after rebuilding with dpkg-buildpackage.

> --- filter/ulogd_filter_HWHDR.c.orig	2025-01-13 09:25:18.937977335 +0000
> +++ filter/ulogd_filter_HWHDR.c	2025-01-13 09:25:51.337824820 +0000
> @@ -109,7 +109,7 @@
>  	},
>  };
>  
> -static char hwmac_str[MAX_KEY - START_KEY][HWADDR_LENGTH];
> +static char hwmac_str[(MAX_KEY + 1) - START_KEY][HWADDR_LENGTH];
>  
>  static int parse_mac2str(struct ulogd_key *ret, unsigned char *mac,
>  			 int okey, int len)

This was fixed a couple of years ago:

  https://git.netfilter.org/ulogd2/commit/?id=49f6def6fcbaf01f395fbe00543a9ab2c4bb106e

and the fix should have made it into the Debian & Ubuntu packages.  I
will investigate.

J.

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Netfitler Users]     [Berkeley Packet Filter]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux