Kupotoshwa kwa Web3 Signing Workflow & Kukamatwa kwa Proxy ya Safe kwa Delegatecall
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Muhtasari
Mlolongo wa wizi wa cold-wallet uliunganisha supply-chain compromise of the Safe{Wallet} web UI na on-chain delegatecall primitive that overwrote a proxy’s implementation pointer (slot 0). Mambo muhimu ya kujifunza ni:
- Ikiwa dApp inaweza kuingiza code katika njia ya kusaini, inaweza kumfanya signer atengeneze saini halali ya EIP-712 signature over attacker-chosen fields wakati ikirejesha data ya UI ya awali ili signers wengine waendelee kutojua.
- Safe proxies hifadhi
masterCopy(implementation) katika storage slot 0. Delegatecall kwa mkataba unaoandika kwenye slot 0 kwa ufanisi “inaboresha” Safe kwa logic ya mshambuliaji, ikitoa udhibiti kamili wa wallet.
Nje ya mnyororo: Ubadilishaji uliolengwa wa kusaini katika Safe
Bundle ya Safe iliyodanganywa (_app-*.js) ilishambulia kwa uteuzi anwani maalum za Safe + signer. Mantiki iliyochomwa ilitekelezwa tu kabla ya wito la kusaini:
// Pseudocode of the malicious flow
orig = structuredClone(tx.data);
if (isVictimSafe && isVictimSigner && tx.data.operation === 0) {
tx.data.to = attackerContract;
tx.data.data = "0xa9059cbb..."; // ERC-20 transfer selector
tx.data.operation = 1; // delegatecall
tx.data.value = 0;
tx.data.safeTxGas = 45746;
const sig = await sdk.signTransaction(tx, safeVersion);
sig.data = orig; // restore original before submission
tx.data = orig;
return sig;
}
Sifa za shambulio
- Context-gated: allowlists zilizowekwa kwa hard-coded kwa Safe/signers wa wahanga ziliizuia kelele na kupunguza ugunduzi.
- Last-moment mutation: mashamba (
to,data,operation, gas) yaliandikwa upya mara moja kabla yasignTransaction, kisha yarudi kama awali, hivyo payloads za mapendekezo kwenye UI zilionekana salama wakati saini zililingana na payload ya mshambuliaji. - EIP-712 opacity: wallets zilionyesha data iliyopangwa lakini hazikutafsiri calldata ya ndani wala kuangazia
operation = delegatecall, jambo lililofanya ujumbe uliobadilishwa kusainiwa bila kusomewa kwa undani.
Umuhimu wa uthibitisho wa Gateway
Mapendekezo ya Safe yanwasilishwa kwenye Safe Client Gateway. Kabla ya ukaguzi kuwa mkali, gateway inaweza kukubali pendekezo ambapo safeTxHash/sahihi zililingana na mashamba tofauti kuliko mwili wa JSON ikiwa UI iliandika upya baada ya kusaini. Baada ya tukio, gateway sasa inakataa mapendekezo ambayo hash/sahihi hazilingani na muamala uliotumwa. Uthibitisho wa hash upande wa server unafanana unapaswa kutekelezwa kwenye API yoyote ya signing-orchestration.
Mambo muhimu kuhusu tukio la Bybit/Safe 2025
- Mnamo Februari 21, 2025 uvujaji wa cold-wallet wa Bybit (~401k ETH) ulitumia muundo ule ule: Safe S3 bundle iliyojeruhiwa ilizingatiwa tu kwa signers wa Bybit na ilibadilisha
operation=0→1, ikiwekeatokwa kontrakta ya mshambuliaji iliyowekwa kabla iliyoyandikisha slot 0. - Wayback-cached
_app-52c9031bfa03da47.jsinaonyesha mantiki iliyotegemea Safe ya Bybit (0x1db9…cf4) na anwani za signers, kisha mara moja ikarudishwa kwenye bundle safi baada ya dakika mbili ya utekelezaji, ikifanana na mbinu ya “badilisha → saini → rejesha”. - Kontrakta ya uharibifu (km,
0x9622…c7242) ilikuwa na funguo rahisisweepETH/sweepERC20pamoja natransfer(address,uint256)ambayo inaandika slot ya implementation. Utekelezaji waexecTransaction(..., operation=1, to=contract, data=transfer(newImpl,0))ulibadilisha implementation ya proxy na kutoa udhibiti kamili.
On-chain: Delegatecall proxy takeover via slot collision
Safe proxies huweka masterCopy katika storage slot 0 na kutoa mantiki yote kwake. Kwa sababu Safe inaunga mkono operation = 1 (delegatecall), muamala wowote uliosainiwa unaweza kuelekeza kwa kontrakta yoyote na kutekeleza msimbo wake katika muktadha wa storage wa proxy.
Kontrakta ya mshambuliaji ilifanya kama ERC-20 transfer(address,uint256) lakini badala yake iliandika _to katika slot 0:
// Decompiler view (storage slot 0 write)
uint256 stor0; // slot 0
function transfer(address _to, uint256 _value) external {
stor0 = uint256(uint160(_to));
}
Execution path:
- Waathiriwa wanafanya saini
execTransactionkwaoperation = delegatecall,to = attackerContract,data = transfer(newImpl, 0). - Safe
masterCopyinathibitisha saini juu ya vigezo hivi. - Proxy inafanya delegatecall kwenye
attackerContract; mwili watransferunaandika slot 0. - Slot 0 (
masterCopy) sasa inaelekeza kwenye logic inayodhibitiwa na mshambulizi → kuchukuliwa kabisa kwa pochi na kuondolewa kwa fedha.
Guard & version notes (kuimarisha usalama baada ya tukio)
- Safes >= v1.3.0 zinaweza kusakinisha Guard kuzipinga
delegatecallau kutekeleza ACLs kwato/selectors; Bybit ilikimbia v1.1.1, hivyo hakuna Guard hook iliyokuwepo. Kusasisha contracts (na kuwarudisha wamiliki) kunahitajika ili kupata mchakato huu wa udhibiti.
Orodha ya uchunguzi na kuimarisha usalama
- UI integrity: weka JS assets kwa pin / SRI; fuatilia bundle diffs; chukulia signing UI kama sehemu ya mpaka wa uaminifu.
- Sign-time validation: hardware wallets zenye EIP-712 clear-signing; onyesha wazi
operationna decode calldata iliyofungwa ndani. Kataa kusaini wakatioperation = 1isipokuwa sera inaruhusu. - Server-side hash checks: gateways/services zinazotuma mapendekezo lazima zitatekeleza upya
safeTxHashna kuthibitisha kuwa saini zinaendana na mashamba yaliyowasilishwa. - Policy/allowlists: sheria za preflight kwa
to, selectors, aina za mali, na kataadelegatecallisipokuwa kwa mtiririko uliokaguliwa. Inahitaji huduma ya sera ya ndani kabla ya kutuma fully signed transactions. - Contract design: epuka kufichua delegatecall bila mpangilio katika multisig/treasury wallets isipokuwa inahitajika kabisa. Weka upgrade pointers mbali na slot 0 au zingatia kwa mantiki ya upgrade wazi na access control.
- Monitoring: tuma tahadhari kuhusu utekelezaji wa delegatecall kutoka kwa wallets zinazoimiliki fedha za hazina, na kwa mapendekezo yanayobadilisha
operationkutoka kwenye mifumo ya kawaida yacall.
References
- AnChain.AI forensic breakdown of the Bybit Safe exploit
- Zero Hour Technology analysis of the Safe bundle compromise
- In-depth technical analysis of the Bybit hack (NCC Group)
- EIP-712
- safe-client-gateway (GitHub)
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.


