
Solidity असेंबली return-data आकार भ्रम के लिए शैक्षिक PoC; इसमें असुरक्षित कॉन्ट्रैक्ट, एक्सप्लॉइट सिमुलेशन, और सुरक्षित ABI डिकोडिंग के लिए शमन मार्गदर्शन शामिल है।
// ReturnSizeConfusion.sol
contract Victim {
function callExternal(address target) external returns (bytes memory) {
(bool success, bytes memory ret) = target.call(abi.encodeWithSignature("someFunc()"));
require(success, "call failed");
// Vulnerability: assumes ret is at least 32 bytes, but could be empty
uint256 value;
assembly {
value := mload(add(ret, 32))
}
return ret;
}
}
एक Solidity अनुबंध लौटाए गए मान को पढ़ने के लिए इनलाइन असेंबली का उपयोग करता है, लेकिन यह सत्यापित नहीं करता कि रिटर्न डेटा की लंबाई पर्याप्त है। एक हमलावर खाली डेटा लौटा सकता है, जिससे असेंबली मनमाना स्टैक डेटा पढ़ लेती है, जिससे मेमोरी भ्रष्टाचार या सुरक्षा उल्लंघन होता है।
कमजोर अनुबंध और एक हमलावर अनुबंध तैनात करें जो खाली प्रतिक्रिया लौटाता है। mload पुराना डेटा पढ़ता है।
ret की लंबाई जांचें।abi.decode) का उपयोग करें।git clone https://github.com/yourorg/CVE-2026-23008.git
cd CVE-2026-23008
# Use Foundry to test