VirusTotal / yara

The pattern matching swiss knife
https://virustotal.github.io/yara/
BSD 3-Clause "New" or "Revised" License
8.08k stars 1.43k forks source link

DEX: `read_uleb128_bounded()`, fix buffer-overflow #1949

Closed cblichmann closed 1 year ago

cblichmann commented 1 year ago

This allows us to read ULEB128 encoded values close to the end of a buffer.

This change fixes a heap-buffer-overflow in load_encoded_method(), found by fuzzing. In that method, the fits_in_dex() check is not sufficient, as each uint32_t can occupy up to 5 bytes in ULEB128 encoding.

I did not replace all uses of read_uleb128() in dex.c, but follow-up changes should probably do that.