2020年3月28日, John Toman 发现该漏洞。

影响版本 version < 0.6.5, 低危。

漏洞详情

如果动态数组的长度用户可控。则会越界读到其他内存空间。也可能因为过长导致DoS。

contract C {
        function f(uint length, AnotherContract c, uint index) public {
            uint[] memory x = new uint[](length);
            uint[] memory y = new uint[](4);
            y[0] = c.g(x[index]);
            y[1] = c.g(x[index + 1]);
            y[2] = c.g(x[index + 2]);
            y[3] = c.g(x[index + 3]);
            c.h(y);
        }
    }