Buyer can grief auditor to receive nothing after rendering complete satistfying service. Yet contract attains finalized state (Resolved or Confirmed). Nothing anyone can do bout it. Griefed!!
Succintly,
I think a major solution @Codehawk would be bringing to the space is judging accuracy.
If this codebase were in sherlock, I wouldn't bother submitting this personal craft.
An imaginary biased example but true:
Imo if the Tornado Gov hack was presented in sherlock it may be invalidated cos such craft/novelty isn't expected 4rm a non-competitive-audit-popular-chad.
But that would become a real world BlackHat standard attack.
The attack u are about to see is novel, practicable, real world BlackHat standard & 99% success chance.
This stealthy technique is beyond human detection and this attack is well viable as long as seller address isn't programatically verified in contract.
All ethereum address are susceptible. I got the algorithm.
Isomers by def:
Are two biologically/optically active chemical compounds having same structural configuration but aren't superimposable. One may be synthesized.
eg: Levo-Alanine and Dextro-Alanine. (Pharmaceutical Chemistry definition)
Importing this model into Smart contract Security, import {Isomerism} from "PharmaceuticalChemistry.pharm";
Address Isomers are two checkSum valid/ active addresses having same structural configuration (same exact character component), but arent superimposable (not same account. each hold value seperately). One is usually synthesized/computed resulting in what I may call Levo and Dextro Addresses.
Pls see Isomerism Pair Samples section below.👇
pls see illustration in POC.testEachIsUniqueChecksumValidAndHoldValueIndependently()
Auditor and or Arbiter will not receive funds despite rendering complete service, yet contract reaches a resolved state.
Off-chain computation / checksum manipulation (EIP-55).
Disadvantage: Seller will spend gas.
Addresses levA, levB, levC & levD were each manipulated into their respective pair.
Each is a real world Ethereum address.
For each Pair, both are checksum valid and receive value. Illustrated in POC.testEachIsUniqueChecksumValidAndHoldValueIndependently() public {}
levD pairs were used in attack in POC for confirmation.
Attack is inevitable if seller address validation isn't onchain.
Most careful victim will still fall prey. 99% success chance.
Attack is just a vector and can be used in diff ways. eg:
Perfomed on arbiter and purposely initiate dispute resulting to locked funds (DOS on Arbiter, resulting to griefing on both arbiter & auditor).
Above manipulation isn't peculiar to some rare addresses. Recall that levD was foundry generated address auditorsWalletAddress = makeAddr("auditorsWalletAddress");
, yet buyer isomerized auditorsWalletAddress
into auditorsInputedAddresss
before attack.
Thats Proof i can isomerize any ethereum address.
I'll reproduce same effect on any randomly sent address and have both be compliant with EIP-55(valid addresses which can hold ETH & tokens).
I'll accept ur address as sample if sent.
I'm open to your futher enquiry. feel free to reach out.
Pharm. Cougar
Full-time Independent Security Researcher.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.