
No. 25 · 13 November 2026 · Security · Supply Chain
The Binance heist, Part Two: the route to the signing service, and where the assets went
Binance says a tampered install, a fake job interview and an internal AI tool led to its signing service. Part Two tests the one detail that public source code can check, and follows the stolen assets two hops on chain.
On 29 October 2026 an attacker took control of Binance's hot wallet "Binance14", using 50 valid signatures from that wallet's key 1. Binance says the attacker reached an internal wallet signing service, and gives no mechanism 2. A hot wallet is an exchange account kept online so it can pay customers quickly. Part One measured how those signatures worked on the Ethereum blockchain. Part Two asks two other questions: how the attacker reached the signing service, and where the assets went. The first is known only from Binance's self-reported initial report, which describes a tampered software install, a fake job interview and an internal AI tool, and gives no mechanism for the last step 2. We test the one part of it that can be checked against public source code, a file size, and find it consistent with a clean install by our arithmetic, untested on a real machine 1. For the second question, our own measurements from the replies of two public Ethereum data providers follow the assets two hops from the wallets that received them. Before the theft, the attacker's fuel money that we traced came through a mixer. After it, at the addresses we followed, we saw speed, fresh addresses and waiting, and no mixer on our incomplete list 1. We compute no dollar values. Sources are read through 12 November 2026.
- The route is Binance's account alone. A tampered install in June, a fake recruiter in September, an internal AI tool on 20 October, and on 29 October "unauthorized access to an internal wallet signing service", with no mechanism given 2.
- One checkable detail checks out on paper. Binance's 3,344-byte pyenv file matches a clean install under
/opt/homebrew, by our arithmetic on public source. We have not tested a real install 1. - Attribution. The FBI names North Korea. Three tracing vendors agree. North Korea denies it 49101117.
- Before the theft, the payments we traced into the attacker's account came through Tornado Cash 120.
- After the theft, 700,000,000 USDT left the first receiving address within nine minutes, and on 12 November about 214,720 ETH sat at two fresh addresses that had never sent a transaction 1.
- Not established. Where the assets went past the addresses we followed, and whether a mixer was used later.
- Endpoint and detection teams. By Binance's account, the route began on developers' own computers, with a tampered install and a take-home "assignment" 2.
- Reverse engineers. A published byte count is a small, checkable fact. It does not make a good hunting rule 1.
- Security leaders evaluating AI tools. Binance says the attacker "used an internal AI tool to gain control over" two engineers' machines, and gives no mechanism 2.
- Tracing and compliance teams. The stolen assets moved by speed and fresh addresses, not, as far as we followed them, through a mixer 1.
- Anyone reading the attribution. The FBI, three vendors who sell tracing, and a denial are not three independent confirmations 49101117.
"We" is hwtn.io's research pipeline. AI models read the sources, ran the measurements and drafted this text. Three AI models from three different labs fact-checked the text it was split from, and a person, the author, made the rulings.
We decoded the transactions ourselves from the replies of two public Ethereum data providers 1. A node is a computer running Ethereum's software with a copy of the shared record. A provider answers questions through an endpoint that may sit in front of several nodes or shared infrastructure, so two providers are not proven to be two independent nodes. We followed the attacker's funding, the two receiving addresses and the two USDT hop addresses to 12 November 2026 1. An address is the public identifier of an account on the chain, a string beginning 0x. We used no explorer for these values, except where a Blockscout read is cited. An explorer is a website that indexes the chain for searching. We computed no dollar values, so every USD figure here belongs to the party named beside it1. (If you see a dollar sign, it isn't ours.) We also measured the size of one source-code file at a published version 1.
The admission rule is short. A factual point appears only if it rests on a primary source, a legitimate secondary source marked for what it is, or two weak sources that do not derive from each other. Our own readings stay in, labeled as readings. The claim register at the end gives each claim's status.
Binance's 3 November report is the victim's own account, and it calls itself "our initial report" 2. Our copy is text saved on 11 November 2026, not compared with the live page. We have read no later Binance statement. Chain times are UTC. Binance gives no time zone for its reported deployment interval of 17:15 to 19:56.
A reading note. This is Part Two of two, and each part is meant to stand alone. If a term is new, it is in bold where it first appears and again in the glossary at the end. The long strings beginning 0x are addresses and transaction IDs. They are there so anyone can check our work. You are allowed to skip them.
Part One measured the theft itself on Ethereum. You need five facts from it here, and a little vocabulary to carry them. A smart contract is a program stored on the chain. Under EIP-7702, a 2025 change to Ethereum, an ordinary key-controlled account can sign a short authorization letting it run a contract's code as its own. That arrangement is called a delegation3. At 20:20:59 UTC on 29 October, one transaction carried 50 such authorizations, every one carrying a valid signature from Binance 14's key, and one took effect 1. Binance 14 then ran the attacker's sweeper, a contract for moving everything out of an account, until Binance cleared it 3 hours 49 minutes 36 seconds later 1. The assets went to two receiving addresses, the attacker's first destinations, of which 0x5227f603…
2f8c
took most 1. A token issuer can blacklist an address, which freezes the issuer's tokens there. Tether did so to that address at 21:01:35 1.
One party tells the story of how the attacker reached the signing service, and that party is the victim. Only one detail of the story can be checked against public code. Everything attributed to Binance here is self-reported. Binance does not say how each event led to the next, so we do not treat the series as an established chain of cause and effect 2. Four dated events follow. Read them as a list of things Binance says happened, in order, and no more than that.

June 2026. Engineer A "downloaded a tampered Homebrew installation". Homebrew is a popular tool for installing software on Macs. Binance says it "detected the anomaly, replaced the device, and rotated all related credentials", and that his role "was exposed to the hacker" 2. Palo Alto Networks, a security vendor, goes further and states without hedging that the engineer clicked a poisoned search ad that delivered MacSync Stealer, a password-stealing program. Binance's report links to a write-up of that chain without saying it applies 132.
September 2026. A fake recruiter approached Engineer B through "a legitimate job-hunting platform" and, after two interviews, he ran an "assignment" on his work computer2. Fortune reports that Binance executives named LinkedIn 16. Binance does not say whether June's exposure led to September's approach. We ask.
20 October. The attacker "used an internal AI tool to gain control over" Engineers A and C, and found a container deployment token on A's computer 2. A container deployment token is a credential that lets someone launch software on a company's servers. A hypothesis, and only that: if the tool held standing access to engineers' machines, it acted as a privileged go-between. Binance gives no mechanism.
29 October. "between 17:15 and 19:56", a container was deployed from C's computer with A's credentials 2. Then: "The attacker exploited unauthorized access to an internal wallet signing service to initiate transactions outside the normal withdrawal process" 2. A signing service is the internal system that produces the cryptographic signatures a company's wallets need. Again, Binance gives no mechanism.

The pyenv trace. This is the one detail we can check, so it gets the slow treatment. pyenv is a tool developers use to manage versions of the Python programming language. Its main program is a short script at libexec/pyenv. When Homebrew installs it, Homebrew writes its own install location, the install prefix, into the file. The prefix is /opt/homebrew on Apple Silicon (M-series) Macs and /usr/local on older Intel Macs. Binance's September account lists pyenv file operations on Engineer B's work computer. A file .../libexec/pyenv of 3,344 bytes was deleted and replaced by a 3,414-byte file, 70 bytes longer, which was created as /opt/homebrew/Cellar/pyenv/2.8.0/libexec/pyenv_ and renamed into place 2. The Cellar is the folder where Homebrew keeps installed programs. The report shortens the deleted file's path, and we take it to be the same Cellar directory.

Now the arithmetic, which is short. libexec/pyenv at version 2.8.0 is 3,341 bytes, and Homebrew's recipe for 2.8.0, its install instructions for pyenv (commit bf0434b5e824, one recorded change in the recipe's history), replaces the file's one /usr/local with the install prefix 156. /opt/homebrew is three characters longer, so that adds 3 bytes. Does Binance's number match? By our arithmetic, yes: a clean Homebrew install of pyenv 2.8.0 on an Apple Silicon Mac would be 3,344 bytes, matching Binance's figure. We have not tested a real install 1. pyenv 2.8.0 was released on 13 July 2026, and Homebrew carried it until 18 July 18. Homebrew's documented install records include no per-file fingerprints that would show a later change to the file 7. The short version: by our arithmetic, the deleted file was the size an ordinary install would produce. That is consistent with it being untouched. It is not proof.
Binance calls the malware "0-day malware" without defining the phrase. A zero-day usually means a flaw or tool unknown to defenders when it is first used. Binance says its endpoint protection, the security software on employees' computers, did not detect the malware at the time. That is a statement about detection. It does not establish whether the malware or any exploited vulnerability was previously unknown 2. Binance also reports that it "detected and prevented 57 suspected North Korea-linked cyber threat cases" in 2026, a count with no denominator 2. (Fifty-seven of how many? The report doesn't say.) It lists remediation steps. StepSecurity, a security vendor, notes "These remediation steps have not yet been independently verified", and we found no verification 212.
By Binance's account the route ran through developers' own machines, and the one detail we could check against public code, a byte count, is consistent with a clean install, not proof of one.
Attribution. The FBI's alert of 31 October 2026, as reported by The Record and BleepingComputer, says North Korea "was responsible for the theft of more than $6 billion USD in virtual assets from cryptocurrency exchange Binance, on or about October 29, 2026", and calls the activity "TraderTraitor" 41415. Binance's report, as published on 3 November, relays the FBI and makes no attribution of its own 2. TRM Labs, Chainalysis and Elliptic, which sell tracing services, each attribute the theft to North Korea 91011. Elliptic hedges: its page, as read on 12 November 2026, says the FBI named a group "which Elliptic has already assessed as the likely culprit" 11. North Korea denies involvement and calls the claims "fabrication", according to Reuters citing KCNA, North Korea's state news agency, read in a syndicated copy, and SBS, read in machine translation 1718.
Tracing means following assets from address to address on the public chain. Each step from one address to the next is a hop. Follow the money, the advice goes, and it never says how far. We followed the attacker's funding backwards and the stolen assets forwards, to a limited depth.
Funding. Every Ethereum transaction pays a small fee in ETH, often called gas money, so the attacker's account needed ETH before it could act. A mixer is a service that pools many people's deposits, so that a withdrawal cannot easily be linked to the deposit that funded it. Tornado Cash is one. On 28 and 29 October the attacker's account received three payments of about 0.098 ETH, each from contract 0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc in a call to 0xd90e2f925DA726b50C4Ed8D0Fb90Ad053324F31b, and 1.082218 ETH from a second account, itself paid by that contract and by 0x47CE0C6eD5B0Ce3d3A51fdb1C52DC66a7c3c2936 through the same route 1. Tornado Cash's own documentation lists those addresses as its 0.1 ETH pool, router and 1 ETH pool 20. A pool holds deposits of one fixed size, and the router is the contract users call to reach the pools. The designation, or sanctions listing, that the US Treasury's sanctions office (OFAC) issued on 8 August 2022 listed all three 21, and Treasury lifted it on 21 March 2025 22. Maborak had labeled two of the payments as Tornado Cash withdrawals 19. The table below lists every rise in the two funding accounts' ETH balances that we traced before the theft.
| Time (UTC) | Paid to | ETH | Paid by |
|---|---|---|---|
| 28 Oct 07:39:47 | Attacker's account 0x7c8601d4…5ca0 | 0.098257 | Tornado Cash 0.1 ETH pool, through the router |
| 28 Oct 08:53:59 | Attacker's account | 0.097893 | Tornado Cash 0.1 ETH pool, through the router |
| 29 Oct 07:08:35 | Second account 0xe4f9070e…74cd | 0.097942 | Tornado Cash 0.1 ETH pool, through the router |
| 29 Oct 08:23:11 | Attacker's account | 0.097943 | Tornado Cash 0.1 ETH pool, through the router |
| 29 Oct 14:54:47 | Second account | 0.994396 | Tornado Cash 1 ETH pool, through the router |
| 29 Oct 16:47:23 | Second account | 1.0 | No payer traced; received in the block in which the attacker's account called its third test account |
| 29 Oct 18:20:47 | Attacker's account | 1.082218 | Second account, direct transfer |
Data: Hawthorne's on-chain measurements 1: the payments into the attacker's two accounts, as measured 12 November 2026.

The first receiving address. It did not dawdle. 0x5227f603…2f8c sent on 700,000,000 USDT within nine minutes of the first sweep, in two transfers, 500,000,000 at 20:30:11 and
200,000,000 at 20:33:23, both before Tether's blacklist 123. USDT is Tether's stablecoin, a token designed to hold the value of one US dollar. Each transfer went to an address that had never sent a transaction, and each of those was sent 0.5 ETH a minute or two before its USDT 1. What stayed at the receiving address is frozen: on 12 November 2026 it held 1,175,464,712.88 USDT and exactly 823,000,000 USDC, Circle's stablecoin 1.
Nearly all the ETH it sent went to two more fresh addresses: 197,460 ETH to 0x8532fa14… 43d4, of which 195,460 at 20:38:47 on 29 October, and 17,260.1 ETH to 0x03b0ee5d…20ea on 30 October 1. On 12 November neither had ever sent a transaction, and they held 197,460.0169 and 17,260.1065 ETH, 214,720.12 ETH together 1. That is more than the 172,624.4046 ETH that the attacker's five sweeps took from Binance 14 directly 1. Where did the extra come from? The likeliest source of the difference is ETH the attacker got by selling other stolen tokens. That is our reading, and we did not measure the other sources1.

The receiving address sent 729 transactions, the last at 08:17:59 on 31 October. Of those, 655 fell between 01:00 and 04:00 UTC on 30 October, and 598 were calls with swap-router selectors to five contracts 1. That sentence needs three definitions. A decentralized exchange is a set of smart contracts that swaps one token for another with no company in the middle, and a router is the contract you call to make a swap. A function selector is the first four bytes of a call's input, naming the function called, the way a menu number names a dish without saying what is in it. A selector shows which function was named, not what the call did. Our reading is that these calls sold the other stolen tokens for ETH. We have not checked the contracts' code or traced the calls to confirm it.
Counted by the hour each was sent, the address's 729 transactions show the burst.
| Hour beginning (UTC) | Sent |
|---|---|
| 29 Oct 20:00 | 5 |
| 29 Oct 21:00 | 7 |
| 29 Oct 22:00 | 8 |
| 29 Oct 23:00 | 4 |
| 30 Oct 00:00 | 13 |
| 30 Oct 01:00 | 168 |
| 30 Oct 02:00 | 338 |
| 30 Oct 03:00 | 149 |
| 30 Oct 04:00 | 7 |
| 30 Oct 05:00 | 2 |
| 30 Oct 10:00 | 1 |
| 30 Oct 11:00 | 1 |
| 30 Oct 17:00 | 2 |
| 31 Oct 04:00 | 5 |
| 31 Oct 05:00 | 1 |
| 31 Oct 06:00 | 2 |
| 31 Oct 07:00 | 15 |
| 31 Oct 08:00 | 1 |

Data: Hawthorne's on-chain measurements 1: the receiving address's 729 transactions, counted by hour, as measured 12 November 2026.
The two hop addresses. 0x9749292d…c762, which received the 500,000,000 USDT, sent 11 transactions, all on 29 October, including 175,000,000 USDT to one further address and 122,310 ETH to another 1. 0x0ddf0480…697e, which received the 200,000,000 USDT, sent 6, including 190,000,000 USDT and 3,552 ETH to a single further address 1. On 12 November each held under 0.001 USDT 1. How either came to hold ETH is not measured. Neither sent a swap for those amounts, and we traced neither the spenders they approved nor the ETH arriving. A token holder can approve another address to spend its tokens, and that address is then an approved spender. Chainalysis, a tracing vendor, describes a stablecoin-to-ETH swap 10. We measured none at these addresses.
The second receiving address. 0xa97bf783…8d10 received the ETH of the last two sweeps, sent 1,318 transactions, 1,147 of them calls with swap-router selectors to four contracts, and passed on 11,137.5332 ETH, nearly all to four addresses. It held no ETH on 12 November 1.
The diagram below also shows a third source wallet. It is the one Part One describes from another publisher's label, Binance 16, which sent the first receiving address 55,739,800.50 USDT at 20:24:47 1.
| From | To | Amount | When (UTC) |
|---|---|---|---|
| 0x5227f603…2f8c (first receiving address) | 0x9749292d… c762 (hop) | 500,000,000 USDT | 20:30:11, 29 Oct |
| 0x5227f603…2f8c | 0x0ddf0480… 697e (hop) | 200,000,000 USDT | 20:33:23, 29 Oct |
| 0x5227f603…2f8c | 0x8532fa14… 43d4 | 197,460 ETH | 195,460 at 20:38:47, 29 Oct; the rest on 30 Oct |
| 0x5227f603…2f8c | 0x03b0ee5d… 20ea | 17,260.1 ETH | 30 Oct |
| 0x9749292d…c762 | one further address; another | 175,000,000 USDT; 122,310 ETH | 29 Oct |
| 0x0ddf0480…697e | one further address | 190,000,000 USDT and 3,552 ETH | 29 Oct |
| 0xa97bf783…8d10 (second receiving address) | nearly all to four addresses | 11,137.5332 ETH | 29 Oct onward |
| Held on 12 November 2026 | Amount |
|---|---|
| 0x5227f603…2f8c | 1,175,464,712.88 USDT and 823,000,000 USDC (frozen) |
| 0x8532fa14…43d4 | 197,460.0169 ETH |
| 0x03b0ee5d…20ea | 17,260.1065 ETH |
| Each hop address | under 0.001 USDT |
| 0xa97bf783…8d10 | no ETH |

Data: the rows above restate figures given in this essay, from Hawthorne's on-chain walks 1 of four addresses, as measured 12 November 2026.
Mixing (our reading). As far as we followed things, the mixer was for the gas money. Before the theft, all of the attacker's gas money that we traced came through a mixer: four payments from the 0.1 ETH pool and one from the 1 ETH pool, to two accounts 120. The 1.0 ETH that reached the second account at 16:47:23 has no payer traced, so it counts neither for nor against this reading 1. And after the theft? Our list of mixer contracts has eleven entries and is not complete. None of the eleven appears at any address we followed 1. What appears instead is speed, hop addresses funded with gas beforehand, round-amount splits, apparent exchange sales, and parking, assets left untouched at fresh addresses. We followed two hops for USDT and one for ETH, to 12 November. "No mixer seen" describes these addresses in this window, not the funds' later path, and a check against eleven known contracts is weak evidence of absence. Eleven is what we had.
As far as we followed them, the gas money came through a mixer, and what moved the stolen assets was speed, fresh addresses and waiting.
A byte count is not a hunting rule. Our reading: a "not 3,344 bytes" rule would flag clean installs under other prefixes, such as 3,341 bytes under /usr/local1.
Self-reported is not established. The June, September, 20 October and 29 October events are Binance's account alone. Vendor write-ups that restate it are not independent of it 21213.
Three vendors are not three witnesses. TRM Labs, Chainalysis and Elliptic each attribute the theft to North Korea, after or alongside the FBI. They sell tracing services, and we have not established how far their attributions rest on the same evidence 91011.
A selector is not a swap. Our "sales" reading rests on function names, not traced calls 1.

Our recommendations are afterwit, the wisdom that arrives after it was needed, and none has been tested:
- Treat a developer's take-home "assignment" from an outside contact as untrusted code, and run it away from work credentials. This follows Binance's September account 2.
- Hypothetically, and only if the deployment token was not bound to one device, which Binance does not say, binding it could have stopped its replay from Engineer C's computer, but not its use through Engineer A's own compromised computer 2.
- Do not hunt on a single published byte count. Compare against a clean install with the same prefix 1.
- How the attacker went from the 29 October deployment to the signing service. Binance's own logs, or a fuller Binance report.
- Whether June's exposure led to September's approach. Binance's investigation records.
- What the internal AI tool could do, and with whose permissions. Binance's description of the tool's access.
- Whether a clean Apple Silicon install is 3,344 bytes. One install. Not done.
- Where the assets went beyond the addresses we followed, and whether a mixer was used later. Walks of the next addresses, a trace of the hop addresses' approved spenders, and a complete, sourced list of mixer contracts. We have done none of these.
- Whether the 598 and 1,147 router calls were sales, and what they sold. Traces of the calls and the token transfers they produced.
Each claim names the result that would disprove it, and you are welcome to go find one. Claims not marked as readings are measurements.
- FC1 (reading). A clean Homebrew pyenv 2.8.0 under
/opt/homebrewhas a 3,344-bytelibexec/pyenv156. Disproof: an install at that recipe revision gives another size. - FC2. At block 26,399,863,
0x8532fa14…43d4and0x03b0ee5d…20eaheld 197,460.0169 and 17,260.1065 ETH and had never sent a transaction 1. Disproof: for either address at that block, a node returns a balance differing at the four decimal places given, or a transaction the address sent. A nonzero transaction counter alone is not enough, because an EIP-7702 authorization that takes effect also raises its signer's counter 3. - FC3 (reading, not established). Through 12 November 2026, neither receiving address and neither USDT hop address sent a transaction to a mixer contract. What we measured is narrower: no transaction from those four addresses to any of the eleven contracts on our incomplete list 1. Disproof: of the measurement, one such transaction to a listed contract. Of the reading, one to any documented mixer contract. Surviving both would not show that no mixer was used later or by another route.
- FC4. The first receiving address sent 700,000,000 USDT in two transfers, at 20:30:11 and 20:33:23 on 29 October, both before Tether's blacklist at 21:01:35 123. Disproof: a node shows a different amount or time for either transfer, or a blacklist event earlier than either.
- One interested source for the intrusion. June, September, 20 October and the signing service are Binance's account alone, in a report it calls initial 2. Vendor analyses restating it are not independent of it 1213.
- An untested byte count. Our 3,344-byte figure is arithmetic on source code, not a measured install 1.
- The assets' path. We followed both receiving addresses and the two USDT hop addresses to 12 November 2026 1, not the addresses those passed funds to, or the small gas recipients. The walks do not list plain ETH arriving.
- Sales not traced. We read swap-router calls by their selectors only.
- What a chain cannot show. Who owns an address, or who directed a transaction.
- One measurer. The measurements come from one set of scripts, cross-checked against a second data provider, not a second analyst 1. A second provider is not a second opinion, and may not even be a second, independent node. The evidence folder has no public address. (We know how that sounds.) A Blockscout read during fact-checking confirmed the receiving address's two USDT transfers out 23. The rest has not been independently reproduced.
- Checking. Code confirmed 62 of the 73 excerpts behind the v6 fact-check rulings word for word against the pages. No automated check has covered every reference. This Part Two text has not yet been fact-checked as a separate essay.
- Sources. The cited vendors sell related services. Chainalysis and Elliptic have revised their pages 1011. We did not open the KCNA original 1718.
- Held back. Points that met no admission test are absent by decision.
- Shelf life. Sources are read through 12 November 2026, and we have read no Binance statement after its 3 November report. A fuller Binance report would supersede parts of this essay. We would like to read it.
Every term below is also defined where it first appears.
- Address. The public identifier of an account on the chain.
- Afterwit. The wisdom that arrives after it was needed. Our word for our recommendations.
- Approve; approved spender. A token holder can let another address spend its tokens. That address is an approved spender.
- Authorization; delegation (EIP-7702). A signed message letting an ordinary account run a contract's code as its own. The resulting arrangement is a delegation.
- Blacklist. A token issuer's freeze. The token's contract refuses to move tokens from a listed address.
- Commit. One recorded change in a software project's history.
- Container deployment token. A credential that lets someone launch software on a company's servers.
- Decentralized exchange; router. Contracts that swap one token for another. The router is the one you call.
- Endpoint protection. Security software on employees' computers.
- Explorer. A website that indexes the chain for searching, such as Blockscout.
- Function selector. The first four bytes of a call's input, naming the function called.
- Hop. One step from one address to the next when following assets.
- Homebrew; Cellar; install prefix. Homebrew installs software on Macs. The Cellar is its folder of installed programs. The install prefix is its top folder,
/opt/homebrewon Apple Silicon Macs and/usr/localon Intel Macs. - Hot wallet. An exchange account kept online so it can pay customers quickly.
- Mixer. A service that pools deposits so withdrawals cannot easily be linked to them. Tornado Cash is one.
- Node; data provider. A node is a computer running Ethereum's software with a copy of the chain. A data provider answers questions about the chain through an endpoint that may front several nodes.
- Parking. Leaving assets untouched at fresh addresses.
- OFAC. The US Treasury's Office of Foreign Assets Control, which imposes sanctions.
- Pool (Tornado Cash). A contract holding deposits of one fixed size. The router is the contract users call to reach the pools.
- pyenv. A tool for managing versions of the Python programming language.
- Signing service. An internal system that produces the cryptographic signatures a company's wallets need.
- Smart contract. A program stored on the chain that runs when called.
- Stablecoin. A token designed to hold the value of one US dollar. USDT is Tether's and USDC is Circle's.
- Sweeper. A contract built to move everything out of an account.
- Zero-day ("0-day"). Usually, a flaw or tool unknown to defenders when it is first used. Binance does not define its use.
libexec/pyenv
at tag v2.8.0. https://raw.githubusercontent.com/pyenv/pyenv/v2.8.0/libexec/pyenv (accessed 2026-11-11; measured 2026-11-12). Primary: source code at a tag.
bf0434b5e824
(pyenv 2.8.0). https://raw.githubusercontent.com/Homebrew/homebrew-core/bf0434b5e824/Formula/p/pyenv.rb (accessed 2026-11-12). Primary: source code at a pinned revision.
general/tornado-cash-smart-contracts.md
; title not captured. https://github.com/tornadocash/docs (archived copy read; accessed 2026-11-12). Primary: the project's own documentation of its contract addresses.
"Measured" means read or computed by us from node data on 12 November 2026. It is our own provenance label, and apart from the Blockscout read described under Limits, no second party has reproduced the values. "Stated" means the named party says it and we have not verified it. "Our reading" is editorial.
| Claim (short) | Ref | Test | Status |
|---|---|---|---|
| Recap: one transaction at 20:20:59 UTC carried 50 authorizations with valid Binance 14 signatures; one took effect; the delegation stood 3 h 49 min 36 s | [1][3] | primary | Measured (Part One) |
| Recap: Tether blacklisted the first receiving address at 21:01:35 | [1] | primary | Measured (Part One) |
| June: tampered Homebrew, device replaced, credentials rotated, role exposed | [2] | primary, self- reported | Stated by Binance |
| June vector: poisoned ad delivering MacSync Stealer | [13][2] | legit secondary | Palo Alto Networks' assertion; not in Binance's report |
| September: fake recruiter, two interviews, "assignment" on a work computer | [2] | primary, self- reported | Stated by Binance |
| The platform was LinkedIn | [16] | legit secondary | Fortune's reporting; one outlet |
| Did June's exposure select September's target? | [2][16] | editorial | Open question |
| 20 October: internal AI tool used to gain control over A and C; token found | [2] | primary, self- reported | Stated by Binance; no mechanism |
| The AI tool acted as a privileged intermediary | [2][12] | editorial | Hypothesis |
| 29 October, 17:15 to 19:56: container deployed from C's computer with A's credentials | [2] | primary, self- reported | Stated by Binance |
| Unauthorized access to an internal wallet signing service | [2] | primary, self- reported | Stated by Binance; no mechanism |
| pyenv trace (September, Engineer B's work computer): 3,344 bytes replaced by 3,414; difference 70 | [2] | primary, self- reported | Stated by Binance |
| libexec/pyenv at v2.8.0 is 3,341 bytes; formula substitution gives 3,344 under /opt/homebrew | [1][5][6] | primary | Measured (arithmetic on source) |
| A clean Apple Silicon install would be 3,344 bytes | [1][2] | editorial | Our reading; not tested |
| A "not 3,344 bytes" rule would flag 3,341 under / usr/local | [1] | editorial | Our reading |
| pyenv 2.8.0 released 13 July 2026; Homebrew carried it until 18 July | [1][8] | primary | Measured |
| Homebrew's documented receipt fields include no per-file hashes | [7] | primary | Read from documentation |
| "0-day malware" was not detected by endpoint tools at the time; the phrase is not defined | [2] | primary, self- reported | Stated by Binance; novelty not established |
| 57 suspected cases "detected and prevented" in 2026 | [2] | primary, self- reported | Stated by Binance; no denominator |
| Remediation steps not independently verified | [2][12] | primary, legit secondary | Bounded by what we read |
| FBI: North Korea "was responsible"; activity called "TraderTraitor" | [4][14][15] | primary | The FBI's attribution |
| Binance relays the FBI and makes no attribution of its own | [2] | primary | True of the report as published 3 November |
| TRM Labs, Chainalysis and Elliptic attribute the theft to North Korea | [9][10][11] | legit secondary | Each vendor's attribution; Elliptic's own assessment is worded "likely" |
| North Korea denies involvement, calling the claims "fabrication" | [17][18] | legit secondary | Reported; KCNA original not opened |
| Attacker's account funding: three payments of about 0.098 ETH (28 Oct 07:39:47, 28 Oct 08:53:59, 29 Oct 08:23:11) from 0x12D66f87…b8Fc through 0xd90e2f92…f31b ; 1.082218 ETH at 18:20:47 on 29 Oct from a second account paid by 0x12D66f87…b8Fc and 0x47CE0C6e…2936 the same way | [1] | primary | Measured |
| Those three contracts are Tornado Cash's 0.1 ETH pool, router and 1 ETH pool | [20][21]; two payments labeled earlier by [19] | primary | Established from Tornado Cash's documentation; the same addresses were on OFAC's designation of 8 August 2022, which Treasury lifted on 21 March 2025 [22] |
| All of the attacker's gas money came through a mixer: four payments from the 0.1 ETH pool and one from the 1 ETH pool, to two accounts | [1][20] | primary; editorial | Payments measured, for the two accounts walked; that they were all of the gas money is our reading |
| First receiving address sent 700,000,000 USDT in two transfers, 20:30:11 and 20:33:23, before Tether's blacklist | [1][23] | primary | Measured; confirmed in Blockscout's index |
| The two USDT recipients had never sent a transaction; each was sent 0.5 ETH (20:29:11 and 20:31:35) a minute or two before its USDT; the 700,000,000 USDT left within nine minutes of the first sweep | [1] | primary | Measured |
| Receiving address held 1,175,464,712.88 USDT and 823,000,000 USDC on 12 November 2026 | [1] | primary | Measured as of 12 November 2026 |
| First receiving address sent 197,460 ETH to 0x8532fa14…43d4 (195,460 at 20:38:47 on 29 Oct; 2,000 on 30 Oct) and 17,260.1 ETH to 0x03b0ee5d…20ea on 30 Oct; on 12 Nov these held 197,460.0169 and 17,260.1065 ETH, 214,720.12 together, and had never sent a transaction | [1] | primary | Measured as of 12 November 2026 |
| The 214,720.12 ETH exceeds the 172,624.4046 ETH swept from Binance 14; the likeliest source of the difference is ETH from selling other stolen tokens | [1] | primary; editorial | Excess measured; source is our reading, not measured |
| First receiving address sent 729 transactions, the last at 08:17:59 on 31 Oct; 655 between 01:00 and 04:00 UTC on 30 Oct; 598 calls with swap-router selectors to five contracts | [1] | primary | Measured |
| Those contracts are decentralized-exchange routers and the calls sold the other tokens for ETH | [1] | editorial | Our reading; selectors only; no calls traced; no exchange named |
| Hop 0x9749292d…c762 (500,000,000 USDT in): 11 transactions, all 29 Oct, incl. 175,000,000 USDT and 122,310 ETH to two further addresses. Hop 0x0ddf0480…697e (200,000,000 USDT in): 6 transactions, incl. 190,000,000 USDT and 3,552 ETH to one further address. Each held under 0.001 USDT on 12 Nov | [1] | primary | Measured |
| How the hop addresses came to hold ETH | none | none | Not measured |
| A stablecoin-to-ETH swap | [10] | legit secondary | Chainalysis's statement; no such swap measured by us at the hop addresses |
| Second receiving address 0xa97bf783…8d10 received the ETH of the last two sweeps; 1,318 transactions, 1,147 of them calls with swap- router selectors to four contracts; 11,137.5332 ETH sent, nearly all to four addresses; no ETH on 12 Nov | [1] | primary | Measured as of 12 November 2026 |
| No mixer contract on our list of eleven appears at any address we walked | [1] | primary | Measured; the list is not complete |
| After the theft, at the addresses walked: speed, hop addresses funded with gas a minute or two ahead, round-amount splits, apparent exchange sales and parking, and no match to our eleven- contract mixer list | [1] | editorial | Our reading; two hops for USDT, one for ETH; these addresses in this window only |
| Funding table: 0.097893 ETH (28 Oct 08:53:59) and 0.097943 ETH (29 Oct 08:23:11) to the attacker's account; 0.097942 ETH (29 Oct 07:08:35) and 0.994396 ETH (29 Oct 14:54:47) to the second account from the 0.1 ETH and 1 ETH pools; 1.0 ETH to the second account at 16:47:23 on 29 Oct with no payer traced | [1] | primary | Measured |
| Hourly counts of the first receiving address's 729 transactions (table F2-3) | [1] | primary | Measured |
| A device-bound token could have restricted replay from C's computer | [2] | editorial | Hypothetical |
| Treat outside "assignments" as untrusted code; do not hunt on a single byte count | [1][2] | editorial | Our recommendations; untested |
References
- 01Hawthorne (hwtn.io). "Hawthorne on-chain measurements, t0401, 12 November 2026: PLAN.md, measure.py, results.json, RESULTS.md." Evidence folder, measured 2026-11-12 from JSON-RPC replies of two public Ethereum data providers (eth.drpc.org, ethereum-rpc.publicnode.com). Includes the funding traces and address walks added the same day (RESULTS.md sections M8 to M13; walk_address.py, walk60.py and their output files), and the pyenv byte-count measurement. Primary (our own measurements; items we mark as readings are editorial).
- 02Binance. "29 October 2026 Binance Security Incident: Initial Findings and Response Update." Binance Blog, 2026-11-03. https://www.binance.com/en/blog/community/3229153443759566763 (accessed 2026-11-11). Primary, self-reported: Binance's own account of itself. Text saved to our files; not compared with the live page.
- 03Ethereum Improvement Proposals. "EIP-7702." https://eips.ethereum.org/EIPS/eip-7702 (accessed 2026-11-11). Primary: the specification.
- 04Federal Bureau of Investigation. Alert, title as recorded in our notes: "North Korea Responsible for $6 Billion+ Binance Attack." fbi.gov, 2026-10-31. https://www.fbi.gov/investigate/cyber/alerts/2026/north-korea-responsible-for-6-billion-binance-attack (archived copy read; accessed 2026-11-11). Primary: government record, cited for its own words.
- 05pyenv.
- 06Homebrew. Formula for pyenv at commit
- 07Homebrew. Tab class documentation. https://docs.brew.sh/rubydoc/Tab.html (accessed 2026-11-11). Primary: documentation generated from Homebrew's source.
- 08pyenv. v2.8.0 release page. GitHub, 2026-07-13. https://github.com/pyenv/pyenv/releases/tag/v2.8.0 (accessed 2026-11-11). Primary: the project's release record.
- 09TRM Labs. "North Korea Steals USD 6.36 Billion From Binance in the Largest Hack in History." https://www.trmlabs.com/resources/blog/north-korea-steals-usd-6-36-billion-from-binance-in-the-largest-hack-in-history (accessed 2026-11-11). Secondary (vendor analysis; sells related services).
- 10Chainalysis. "The $6.4 Billion Binance Hack: Tracing the North Korea Link." 2026-10-30, revised. https://www.chainalysis.com/blog/binance-exploit-latest-findings-and-response/ (accessed 2026-11-11). Secondary (vendor analysis; sells related services).
- 11Elliptic. "The largest theft in history: North Korea behind the $6.4 billion Binance hack." Headline as read on 12 November 2026; the page's browser title reads "North Korea likely behind". 2026-10-30, updated 2026-11-01. https://www.elliptic.co/insights/binance-largest-hack-in-history/ (accessed 2026-11-11). Secondary (vendor analysis; sells related services); quotes Binance.
- 12StepSecurity. Title not captured. 2026-10-30, updated 2026-11-03. https://www.stepsecurity.io/blog/binance-hack-developer-machine-security (accessed 2026-11-11). Secondary (vendor analysis; sells related services); reads .
- 13Palo Alto Networks. Title not captured. 2026-11-09. https://www.paloaltonetworks.com/blog/security-operations/how-a-developer-endpoint-became-the-path-to-binances-6-3b-heist (accessed 2026-11-11). Secondary (vendor analysis; sells related services); reads and adds its own unhedged assertion about June.
- 14The Record. Title not captured. https://therecord.media/fbi-blames-tradertraitor-for-binance-hack (accessed 2026-11-11). Secondary (journalism); restates .
- 15BleepingComputer. Title not captured. 2026-11-01. https://www.bleepingcomputer.com/news/security/fbi-links-63-billion-binance-crypto-heist-to-north-korean-hackers/ (accessed 2026-11-11). Secondary (journalism); restates .
- 16Fortune. Title not captured. 2026-11-03. https://fortune.com/2026/11/03/binance-hack-details-linkedin/ (accessed 2026-11-11). Secondary (journalism); Binance executives speaking to reporters.
- 17Reuters, via Devdiscourse. "North Korea says claims linking it to Binance heist are 'fabrication,' KCNA says." 2026-11-03. https://www.devdiscourse.com/article/international/4000913-north-korea-says- claims-linking-it-to-binance-heist-are-fabrication-kcna-says (accessed 2026-11-11). Secondary (journalism); a Reuters wire report read on a syndicating site; restates KCNA.
- 18SBS News. Title not captured. 2026-11-03. https://news.sbs.co.kr/english/endPagePrintPopup.do?news_id=N1008827440 (accessed 2026-11-11). Secondary (journalism); the cited English page is labeled by SBS as AI-translated and potentially containing errors.
- 19Maborak. Title not captured. https://www.maborak.com/blog/binance-incident-root-cause-evidence (accessed 2026-11-11). Weak: individual's blog. Cited only as prior publication.
- 20Tornado Cash. Documentation file
- 21US Department of the Treasury, Office of Foreign Assets Control. Recent actions, 8 August 2022: designation of Tornado Cash; title not captured. https://ofac.treasury.gov/recent-actions/20220808 (archived copy read; accessed 2026-11-12). Primary: government record, cited only for the addresses it lists.
- 22US Department of the Treasury. "Tornado Cash Delisting." Press release, 2025-03-21. https://home.treasury.gov/news/press-releases/sb0057 (accessed 2026-11-12). Primary: government record, cited only for the removal of the 2022 designation.
- 23Blockscout. Ethereum mainnet explorer API: USDT transfers of the receiving address. https://eth.blockscout.com/api/v2/addresses/0x5227f603C1eE34CE3C06eFe6477003BDfCCB2f8c/token-transfers?type=ERC-20&filter=from&token=0xdAC17F958D2ee523a2206206994597C13D831ec7 (accessed 2026-11-12). Primary: an explorer's index of chain data, read during fact-checking; not part of ; address labels are Blockscout's.