Sunday, May 31, 2026
The BLOCKCHAIN Page
No Result
View All Result
  • Home
  • Cryptocurrency
  • Blockchain
  • Bitcoin
  • Market & Analysis
  • Altcoins
  • DeFi
  • Ethereum
  • Dogecoin
  • XRP
  • Regulations
  • NFTs
The BLOCKCHAIN Page
No Result
View All Result
Home Ethereum

Solidity Optimizer and ABIEncoderV2 Bug

by admin
October 1, 2023
in Ethereum
0
Dodging a bullet: Ethereum State Problems
0
SHARES
14
VIEWS
Share on FacebookShare on Twitter


Solidity Optimizer and ABIEncoderV2 Bug Announcement

Via the Ethereum bug bounty program, we acquired a report a couple of flaw inside the new experimental ABI encoder (known as ABIEncoderV2). Upon investigation, it was discovered that the element suffers from just a few completely different variations of the identical kind. The primary a part of this announcement explains this bug intimately. The brand new ABI encoder continues to be marked as experimental, however we nonetheless assume that this deserves a distinguished announcement since it’s already used on mainnet.

Moreover, two low-impact bugs within the optimizer have been recognized over the previous two weeks, one in every of which was fastened with Solidity v0.5.6. Each have been launched with model 0.5.5. See the second a part of this announcement for particulars.

The 0.5.7 release incorporates the fixes to all bugs defined on this weblog submit.

All of the bugs talked about right here ought to be simply seen in exams that contact the related code paths, at the very least when run with all combos of zero and nonzero values.

Credit to Melonport crew (Travis Jacobs & Jenna Zenk) and the Melon Council (Nick Munoz-McDonald, Martin Lundfall, Matt di Ferrante & Adam Kolar), who reported this by way of the Ethereum bug bounty program!

Who ought to be involved

You probably have deployed contracts which use the experimental ABI encoder V2, then these is likely to be affected. Because of this solely contracts which use the next directive inside the supply code could be affected:

pragma experimental ABIEncoderV2;

Moreover, there are a variety of necessities for the bug to set off. See technical particulars additional beneath for extra data.

So far as we will inform, there are about 2500 contracts dwell on mainnet that use the experimental ABIEncoderV2. It isn’t clear what number of of them comprise the bug.

Learn how to verify if contract is weak

The bug solely manifests itself when the entire following situations are met:

  • Storage information involving arrays or structs is shipped on to an exterior operate name, to abi.encode or to occasion information with out prior task to an area (reminiscence) variable AND
  • there may be an array that incorporates components with dimension lower than 32 bytes or a struct that has components that share a storage slot or members of kind bytesNN shorter than 32 bytes.

Along with that, within the following conditions, your code is NOT affected:

  • if all of your structs or arrays solely use uint256 or int256 varieties
  • if you happen to solely use integer varieties (that could be shorter) and solely encode at most one array at a time
  • if you happen to solely return such information and don’t use it in abi.encode, exterior calls or occasion information.

You probably have a contract that meets these situations, and need to confirm whether or not the contract is certainly weak, you’ll be able to attain out to us by way of security@ethereum.org.

Learn how to forestall most of these flaws sooner or later

In an effort to be conservative about adjustments, the experimental ABI encoder has been out there solely when explicitly enabled, to permit folks to work together with it and check it with out placing an excessive amount of belief in it earlier than it’s thought-about secure.

We do our greatest to make sure top quality, and have lately began engaged on ‘semantic’ fuzzing of sure elements on OSS-Fuzz (we now have beforehand crash-fuzzed the compiler, however that didn’t check compiler correctness).

For builders — bugs inside the Solidity compiler are tough to detect with instruments like vulnerability detectors, since instruments which function on supply code or AST-representations don’t detect flaws which might be launched solely into the compiled bytecode.

The easiest way to guard towards most of these flaws is to have a rigorous set of end-to-end exams on your contracts (verifying all code paths), since bugs in a compiler very seemingly will not be “silent” and as an alternative manifest in invalid information.

Attainable penalties

Naturally, any bug can have wildly various penalties relying on this system management circulation, however we count on that that is extra prone to result in malfunction than exploitability.

The bug, when triggered, will below sure circumstances ship corrupt parameters on methodology invocations to different contracts.

Timeline

2019-03-16:

  • Report by way of bug bounty, about corruption precipitated when studying from arrays of booleans immediately from storage into ABI encoder.

2019-03-16 to 2019-03-21:

  • Investigation of root trigger, evaluation of affected contracts. An unexpectedly excessive depend of contracts compiled with the experimental encoder have been discovered deployed on mainnet, many with out verified source-code.
  • Investigation of bug discovered extra methods to set off the bug, e.g. utilizing structs. Moreover, an array overflow bug was present in the identical routine.
  • A handful of contracts discovered on Github have been checked, and none have been discovered to be affected.
  • A bugfix to the ABI encoder was made.

2019-03-20:

  • Choice to make data public.
  • Reasoning: It could not be possible to detect all weak contracts and attain out to all authors in a well timed method, and it could be good to stop additional proliferation of weak contracts on mainnet.

2019-03-26:

  • New compiler launch, model 0.5.7.
  • This submit launched.

Technical particulars

Background

The Contract ABI is a specification how information could be exchanged with contracts from the skin (a Dapp) or when interacting between contracts. It helps quite a lot of sorts of information, together with easy values like numbers, bytes and strings, in addition to extra advanced information varieties, together with arrays and structs.

When a contract receives enter information, it should decode that (that is carried out by the “ABI decoder”) and previous to returning information or sending information to a different contract, it should encode it (that is carried out by the “ABI encoder”). The Solidity compiler generates these two items of code for every outlined operate in a contract (and likewise for abi.encode and abi.decode). Within the Solidity compiler the subsystem producing the encoder and decoder is known as the “ABI encoder”.

In mid-2017 the Solidity crew began to work on a recent implementation named “ABI encoder V2” with the purpose of getting a extra versatile, secure, performant and auditable code generator. This experimental code generator, when explicitly enabled, has been supplied to customers because the finish of 2017 with the 0.4.19 launch.

The flaw

The experimental ABI encoder doesn’t deal with non-integer values shorter than 32 bytes correctly. This is applicable to bytesNN varieties, bool, enum and different varieties when they’re a part of an array or a struct and encoded immediately from storage. This implies these storage references have for use immediately inside abi.encode(…), as arguments in exterior operate calls or in occasion information with out prior task to an area variable. Utilizing return doesn’t set off the bug. The kinds bytesNN and bool will lead to corrupted information whereas enum would possibly result in an invalid revert.

Moreover, arrays with components shorter than 32 bytes is probably not dealt with appropriately even when the bottom kind is an integer kind. Encoding such arrays in the best way described above can result in different information within the encoding being overwritten if the variety of components encoded shouldn’t be a a number of of the variety of components that match a single slot. If nothing follows the array within the encoding (notice that dynamically-sized arrays are at all times encoded after statically-sized arrays with statically-sized content material), or if solely a single array is encoded, no different information is overwritten.


Unrelated to the ABI encoder concern defined above, two bugs have been discovered within the optimiser. Each have been launched with 0.5.5 (launched on fifth of March). They’re unlikely to happen in code generated by the compiler, except inline meeting is used.

These two bugs have been recognized by means of the latest addition of Solidity to OSS-Fuzz – a safety toolkit for locating discrepancies or points in quite a lot of tasks. For Solidity we now have included a number of completely different fuzzers testing completely different facets of the compiler.

  1. The optimizer turns opcode sequences like ((x << a) << b)), the place a and b are compile-time constants, into (x << (a + b)) whereas not dealing with overflow within the addition correctly.
  2. The optimizer incorrectly handles the byte opcode if the fixed 31 is used as second argument. This will occur when performing index entry on bytesNN varieties with a compile-time fixed worth (not index) of 31 or when utilizing the byte opcode in inline meeting.

This submit was collectively composed by @axic, @chriseth, @holiman



Source link

Tags: ABIEncoderV2BugOptimizerSolidity
admin

admin

Recommended

Binance Launches Capital Connect for VIP Program Users

Binance Launches Capital Connect for VIP Program Users

3 years ago
The Evolving Risk Landscape in DeFi: What Should Projects Account for In Risk Management Strategies?

The Evolving Risk Landscape in DeFi: What Should Projects Account for In Risk Management Strategies?

2 years ago

Popular News

  • Protocol-Owned Liquidity: A Sustainable Path for DeFi

    Protocol-Owned Liquidity: A Sustainable Path for DeFi

    0 shares
    Share 0 Tweet 0
  • Cryptocurrency for College: Exploring DeFi Scholarship Models

    0 shares
    Share 0 Tweet 0
  • What are rebase tokens, and how do they work?

    0 shares
    Share 0 Tweet 0
  • What is Velodrome Finance (VELO): why it’s a next-gen AMM

    0 shares
    Share 0 Tweet 0
  • $10 XRP Price Envisioned By Fund Manager As Ripple Mounts Trillion-Dollar Payment Markets ⋆ ZyCrypto

    0 shares
    Share 0 Tweet 0

Latest

Your TV’s RS-232 port is a versatile automation tool – how to unlock its full potential

Your TV’s RS-232 port is a versatile automation tool – how to unlock its full potential

May 31, 2026
I tried Microsoft’s Windows 365 Cloud PC on MacOS, Android, and iOS – here’s what it’s like

I tried Microsoft’s Windows 365 Cloud PC on MacOS, Android, and iOS – here’s what it’s like

May 30, 2026

Categories

  • Altcoins
  • Bitcoin
  • Blockchain
  • Cryptocurrency
  • DeFi
  • Dogecoin
  • Ethereum
  • Market & Analysis
  • NFTs & Metaverse
  • Regulations
  • XRP

Follow us

Recommended

  • Your TV’s RS-232 port is a versatile automation tool – how to unlock its full potential
  • I tried Microsoft’s Windows 365 Cloud PC on MacOS, Android, and iOS – here’s what it’s like
  • ReMarkable Paper Pure vs. Boox Go 10.3: I used both tablets at work, and it comes down to this
  • Amazon is selling this 75-inch Hisense TV for over $500 off – and I highly recommend it
  • Ripple Makes New Demands From SEC, What Are They Asking For?
  • About us
  • Privacy Policy
  • Terms & Conditions

© 2023 TheBlockchainPage | All Rights Reserved

No Result
View All Result
  • Home
  • Cryptocurrency
  • Blockchain
  • Bitcoin
  • Market & Analysis
  • Altcoins
  • DeFi
  • Ethereum
  • Dogecoin
  • XRP
  • Regulations
  • NFTs

© 2023 TheBlockchainPage | All Rights Reserved