An issue was discovered in Suricata 4.1.4. By sending multiple IPv4 packets that have invalid IPv4Options, the function IPV4OptValidateTimestamp in decode-ipv4.c tries to access a memory region that is not allocated. There is a check for o->len < 5 (corresponding to 2 bytes of header and 3 bytes of data). Then, "flag = *(o->data + 3)" places one beyond the 3 bytes, because the code should have been "flag = *(o->data + 1)" instead.
{
"binaries": [
{
"binary_version": "3.2-2ubuntu3",
"binary_name": "libhtp-0.5.23-1"
},
{
"binary_version": "3.2-2ubuntu3",
"binary_name": "suricata"
},
{
"binary_version": "3.2-2ubuntu3",
"binary_name": "suricata-hyperscan"
},
{
"binary_version": "3.2-2ubuntu3",
"binary_name": "suricata-oinkmaster"
}
]
}