-
Notifications
You must be signed in to change notification settings - Fork 79
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Differential fuzzing of Neo Smart-Contract VMs (including neo-go) #3573
Comments
I haven't started working on this yet, wanted to get some opinions. |
It would be helpful for us to make such research, especially for Go/C# implementations and various set of edge-cases. We have a set of VM compatibility tests with C# node (integrated as VM git submodule), and currently there's no known incompatibility issues for our VMs, but may be you'll manage to find something. In general, some unexpected bugs may be found by fuzzing, so vote up from my side for the proposed experiment. |
Upd: made a repo https://github.com/Slava0135/N3onDiff and some setup. It uses custom harness for executing tests ( Also, I took a look at Mamba and Neon - they don't have VM implementation, so we just stick with C# and Go. |
Found 1 issue so far: #3598 |
fyi; mamba used to have a VM but the project pivoted to light SDK. Neon never had one. Looking forward to what you'll find :) |
Recently, I stumbled upon LibAFL paper which had a reimplementation of another fuzzer called NeoDiff. The goal was to mutate smart contract byte code and look for differences in the VM state, leading to potential chain splits. This was done to Neo v2 Python and C# implementations (though it seems like LibAFL version only fuzzed EVM implementations: 'go-etherium' and 'openetherium', but not Neo, though original work fuzzed it).
So the suggestion would be to make a differential fuzzer for Neo v3 VMs and try find behavior differences (potentially harmful) in current VM implementations: 'Neo' (C#) / 'neo-go' (Go) / 'mamba' (Python).
The text was updated successfully, but these errors were encountered: