All vulnerabilities
CRITICALWeb3

WEB3-COINCHECK-2018

Web3 · CEX · Coincheck

Summary

On January 26, 2018, Japanese exchange Coincheck lost 523 million NEM (XEM) tokens, worth roughly $530 million at the time, in what was then the largest crypto theft ever. The root cause was a hot-wallet private-key compromise enabled by weak custody design: Coincheck held the entire NEM balance in a single internet-connected hot wallet that used an ordinary single-signature NEM account and did not implement NEM's built-in multisignature feature, despite that capability being available. Attackers used a phishing/social-engineering campaign to plant malware on an employee terminal that had access to the key, extracted the single private key, and then swept all the XEM in one go to attacker addresses. With no multisig threshold and no cold storage for the bulk of funds, one compromised key was sufficient to drain everything. No attacker was formally charged, though later analyses pointed to the malware-based intrusion. Coincheck reimbursed roughly 260,000 affected holders from its own capital at about 88.5 JPY per XEM.

How to avoid it in your code

  • Store the bulk of assets in cold storage; cap hot-wallet balances to operational needs.
  • Require multisig or MPC/threshold signing on hot wallets so a single key cannot move funds.
  • Harden and isolate signing terminals; block email/web access on machines holding keys.
  • Enforce least-privilege infra and key segregation with hardware security modules.
  • Add withdrawal rate limits and anomaly detection to catch mass single-transaction sweeps.

References

Related vulnerabilities

All Web3 →