Headline
CVE-2023-37281: Out-of-bounds read during IPHC address decompression
Contiki-NG is an operating system for internet-of-things devices. In versions 4.9 and prior, when processing the various IPv6 header fields during IPHC header decompression, Contiki-NG confirms the received packet buffer contains enough data as needed for that field. But no similar check is done before decompressing the IPv6 address. Therefore, up to 16 bytes can be read out of bounds on the line with the statement memcpy(&ipaddr->u8[16 - postcount], iphc_ptr, postcount);
. The value of postcount
depends on the address compression used in the received packet and can be controlled by the attacker. As a result, an attacker can inject a packet that causes an out-of-bound read. As of time of publication, a patched version is not available. As a workaround, one can apply the changes in Contiki-NG pull request #2509 to patch the system.
Impact
When processing the various IPv6 header fields during IPHC header decompression, Contiki-NG confirms the received packet buffer contains enough data as needed for that field. But no similar check is done before decompressing the IPv6
address. Therefore, up to 16 bytes can be read out of bounds on the line with the statement
memcpy(&ipaddr->u8[16 - postcount], iphc_ptr, postcount);.
The value of postcount depends on the address compression used in the received packet and can be controlled by the attacker. As a result, an attacker can inject a packet that causes an out-of-bound read.
Patches
The problem has been patched in the “develop” branch of Contiki-NG.
Workarounds
One can apply the changes in Contiki-NG pull request #2509 to patch the system.
References
If you have any questions or comments about this advisory:
Open an issue in https://github.com/contiki-ng/contiki-ng
Email us at [email protected]