Add Absolution-based fuzzing - #1059
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## develop #1059 +/- ##
============================================
- Coverage 88.00% 59.48% -28.52%
============================================
Files 136 162 +26
Lines 9786 14540 +4754
Branches 1612 3476 +1864
============================================
+ Hits 8612 8649 +37
- Misses 990 5703 +4713
- Partials 184 188 +4
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
elf sizes
Stack consumption summary (clone_app_stack_consumption)
Stack consumption summary
|
Code Coverage OverviewLanguages: C C / code-coverage/unittestsThe overall coverage in commit 14fd424 in the Show a code coverage summary of the most covered files.
Updated |
69e1276 to
9bbddb3
Compare
9bbe16e to
cc2242c
Compare
b96f763 to
d605851
Compare
67ef1d0 to
b137628
Compare
b137628 to
8ef88da
Compare
Wiz Scan Summary
To detect these findings earlier in the dev lifecycle, try the Wiz Code extension for VS Code, JetBrains, or Visual Studio. |
1b58caf to
6ba3cdc
Compare
Found by the fuzzing harness added in this PR: - NULL source passed to memcpy() when an EIP-712 struct-impl APDU or a zero-length typed-data leaf carries no payload, which apdu_parser() reports as a NULL data pointer whenever Lc is 0 - missing bounds and NULL checks across the generic tx parser fields - zero-length copies while streaming a personal message - out-of-range integer conversions in the signature parity byte and the ETH2 public-key status word
6ba3cdc to
7bb89c5
Compare
688ba56 to
e9621f9
Compare
e9621f9 to
14fd424
Compare
Code coverage reportPer-file coverage
|
Description
This PR integrates the SDK's Absolution-based, state-aware fuzzing framework into the Ethereum app, the app ships three targets: fuzz_app drives a sequence of APDUs through the real apdu_parser() → handleApdu() path; fuzz_plugin drives one internal plugin through the production eth_plugin_call() sequence; fuzz_parser drives the generic tx parser, EIP-712 and the calldata store at their own entry points. The latter two exist because the APDU path structurally cannot reach that code. All three go through the framework contract, so they inherit the prefix-aware mutator and the lane split.
Input is [ prefix | tail ]: the prefix restores globals to a target state via the declarative Absolution model, the tail drives the harness. Sequences matter because tlv_from_apdu() accumulates a descriptor across APDUs and one APDU carries at most 253 bytes — a single dispatch can never complete a descriptor carrying a signature.
Changes include