漏洞报告 #2559404:精心构造的智能合约因巨大错误字符串构造导致约23秒执行延迟
时间线
- guido 向 Rootstock Labs 提交报告 - 2024年6月18日 20:18 UTC
- Rootstock Labs 确认分析中 - 2024年6月19日 10:31 UTC
- Rootstock Labs 确认正在修复 - 2024年6月24日 09:20 UTC
- 漏洞修复确认 - 2024年7月13日 19:29 UTC
- 奖励发放 - 2024年7月17日 14:12 UTC
- 报告披露 - 2025年6月12日 18:52 UTC
技术详情
问题描述
调用原生合约(rskj-core/src/main/java/co/rsk/pcc/NativeContract.java)时,通过无效的大输入(1081344字节)在无限循环中执行(直到gas耗尽),在测试机器上耗时约70秒(预计在目标机器上约23秒),比先前报告(https://hackerone.com/reports/2489843)略快。
根本原因
NativeContract.execute 方法为日志记录和异常抛出将整个输入消息构造为十六进制字符串:
|
|
如果将上述代码修改为:
|
|
复现程序在大约4.4秒内完成(测试机器上)。
复现步骤
以下复现程序禁用了日志记录;如果在生产节点上默认启用,耗时可能更长。
- 环境准备
|
|
- 构建配置修改
|
|
- 禁用日志记录
|
|
- 构建RSKJ
|
|
-
创建复现程序(Poc.java) 完整Java代码详见原始报告
-
编译和运行
|
|
影响
- 网络延迟阻塞
修复状态
- 已通过提交 https://github.com/rsksmart/rskj/commit/5f9158ad4cf90e37dbf24f30369f89f436fd101b 修复
- 状态:已解决
- 严重性:中等(6.1)
- 弱点类型:不受控制的资源消耗
- CVE ID:无
参与者
- 报告者:guido (ID验证通过)
- 处理团队:Rootstock Labs (vrongusername, bernacodesido)