🤖 AI Summary
This work addresses a long-standing class of miscompilation bugs in the Solidity compiler that produce incorrect bytecode and compromise smart contract security. To tackle this issue, the authors propose SolSmith, a semantic-aware differential fuzzing tool that generates semantically valid programs capable of rigorously stress-testing the compiler’s code generation and optimization modules. By comparing outputs across multiple compiler versions and configurations, SolSmith enables the first systematic classification and impact analysis of Solidity miscompilations. Over a three-year period, the approach uncovered 25 previously unknown miscompilation vulnerabilities—some of which had remained latent for years—significantly enhancing both compiler reliability and the overall security of the smart contract ecosystem.
📝 Abstract
Smart contract compilers are critical to ensuring the correctness of public blockchains whose defining characteristics are open-source and immutable code. We created SolSmith, a semantics-aware differential fuzz testing tool, to improve the quality of the Solidity compiler -- the most popular compiler for the Ethereum blockchain -- and spent over three years finding compiler defects that produce incorrect code. We call these defects miscompilation bugs. During this time period, we have discovered 25 miscompilation bugs that went unnoticed, some for multiple years. Our first contribution is to make compiler testing more rigorous. SolSmith achieves this goal by generating valid test programs that are likely to stress test code generation and optimization components. This helps SolSmith find bugs missed during routine testing that could potentially have serious implications for smart contracts and their users. Our second contribution is a qualitative and quantitative analysis of miscompilation bugs that we found in the Solidity compiler. We classify miscompilation bugs found by SolSmith based on their nature, root-causes, and impact on end-users. This sheds light on some pitfalls of optimizing compilers.