Skip to content

Conversation

cblichmann
Copy link
Contributor

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.

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.
@plusvic plusvic merged commit 84f93ac into VirusTotal:master Aug 16, 2023
cblichmann added a commit to cblichmann/yara that referenced this pull request Aug 17, 2023
This is a follow-up to PR VirusTotal#1949, replacing all remaingin uses of
`read_uleb128()` in `dex.c`.

It also fixes another heap-buffer-overflow, again found by fuzzing.

Tested with `test-dex.c`
plusvic pushed a commit that referenced this pull request Aug 18, 2023
This is a follow-up to PR #1949, replacing all remaingin uses of
`read_uleb128()` in `dex.c`.

It also fixes another heap-buffer-overflow, again found by fuzzing.

Tested with `test-dex.c`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants