⚔️ 1️⃣ permit() = aprobat fără a necesita tranzacție

Când semnați un mesaj EIP-2612 sau EIP-712, spuneți că:

„Permiteți adresei X să cheltuie Y token-uri de-ale mele până la momentul Z.”

Și doar cu acea semnătură (v, r, s), deținătorul său poate apela token.permit(...)

→ Pe blockchain, echivalentul este o comandă approve() adevărată.

→ Ei pot transferFrom() pentru a retrage token-urile tale fără să trimiți nicio tranzacție.

🧨 2️⃣ Modul în care hackerii profită

Atacatorul îți va trimite o fereastră pop-up MetaMask de genul:

„Semnează pentru a verifica portofelul” sau „Semnează mesajul pentru dApp”

Dar de fapt este permit() sau Permit2 cu

spender = portofelul hackerului, value = 2^256-1.

Dai clic pe „Semnează” → token-urile tale sunt considerate aprobate complet pentru hacker.

Fără gaz. Fără jurnal de explorare. Dar token-urile tot zboară 🕳️

🧩 3️⃣ Motivul pentru care MetaMask te face să fii neglijent

MetaMask afișează „Semnează date tipizate” sau „Semnează pentru verificare”

fără a specifica clar pentru cine semnezi permit().

Asta este motivul pentru care mulți oameni își pierd token-urile fără a ști de ce.

🧰 4️⃣ Cum să te protejezi

1️⃣ Privește popup-ul portofelului (MetaMask / WalletConnect)

• „Cerere de semnătură” / „Semnează” / „Semnează date tipizate” → Oprește-te, nu semna dacă nu ești sigur

• „Conectează-te” / „Conectează-te la site” → De obicei, verifici doar adresa, mai sigur, dar rămâi precaut

2️⃣ Deschide detaliile cererii

• Dă clic pe „Arată detalii” / „Avansat” / cele 3 puncte → vezi datele brute

• Dacă vezi JSON care conține domain, types, message, primaryType → Acesta este un EIP‑712 date tipizate, trebuie să verifici cu atenție

3️⃣ Caută cuvinte cheie periculoase în datele brute

• spender, owner, value, deadline, nonce, permit, PermitSingle/Batch/Transfer → 🚩 avertisment permit/aprobat

• Doar text simplu precum „Sunt de acord să mă conectez” → risc mic, dar nu absolut