一句话:首个系统研究533个Solidity编译器缺陷,并揭示现有模糊测试器的局限。
论文关注 Solidity 编译器缺陷理解不足及其对智能合约安全的重要影响。作者收集并人工分析 533 个 Solidity 编译器缺陷,从症状、根因、分布和触发测试用例等维度进行系统刻画,总结出七条可启发测试与修复的发现。为评估现有工具,作者构建缺陷基准,并测试三个 Solidity 编译器模糊测试器,发现它们在检测这些缺陷时效率低下,主要因为未充分考虑诱发缺陷的语言特性、与缺陷相关的编译选项以及合适测试预言。该研究为后续 Solidity 编译器缺陷检测提供实证基础。
Solidity compiler plays a key role in enabling the development of smart contract applications on Ethereum by governing the syntax of a domain-specific language called Solidity and performing compilation and optimization of Solidity code. The correctness of Solidity compiler is critical in fostering transparency, efficiency, and trust in industries reliant on smart contracts. However, like other software systems, Solidity compiler is prone to bugs, which may produce incorrect bytecodes on blockchain platforms, resulting in severe security concerns. As a domain-specific compiler for smart contracts, Solidity compiler differs from other compilers in many perspectives, posing unique challenges to detect its bugs. To understand the bugs in Solidity compiler and benefit future research, in this paper, we present the first systematic study on 533 Solidity compiler bugs. We carefully examined their characteristics (including symptoms, root causes, and distribution), and their triggering test cases. Our study leads to seven bug-revealing takeaways for Solidity compiler. Moreover, to study the limitations of Solidity compiler fuzzers and bring our findings into practical scenarios, we evaluate three Solidity compiler fuzzers on our constructed benchmark. The results show that these fuzzers are inefficient in detecting Solidity compiler bugs. The inefficiency arises from their failure to consider the interesting bug-inducing features, bug-related compilation flags, and test oracles.
@inproceedings{paperbot8568,
title = {Towards Understanding the Bugs in Solidity Compiler},
author = {Haoyang Ma and Wuqi Zhang and Qingchao Shen and Yongqiang Tian and Junjie Chen and Shing-Chi Cheung},
booktitle = {ISSTA},
year = {2024},
doi = {10.1145/3650212.3680362}
}