Why
Four incidents in four months, and the interesting thing is not that they happened but that they share a root the usual threat model draws outside the boundary. On 2026-06-25 a compromised third-party vendor injected a wallet-drainer into Polymarket's frontend; about $2.94M left at least 11 wallets, the stolen pUSD was bridged from Polygon to Ethereum and consolidated into roughly 1,893 ETH, and every affected user was reimbursed — the vendor has still not been named publicly. On 2026-08-13 Trezor disclosed that its fulfilment partner ShipMonk had been breached, exposing 13,689 customers (11,742 with name, email, phone and shipping address; 1,947 partially) who ordered between 2026-05-10 and 2026-08-08 across seven countries — and ShipMonk's own root cause was a vulnerability in Metabase, a third party of the third party. On 2026-08-16 Bits of Gold, holder of Israel's first VASP licence, disclosed roughly 200,000 customers exposed through unauthorised access to a third-party support and analytics system. And back on 2026-05-22, $700,000 left a Polymarket internal top-up wallet in 5,000-POL batches every 30 seconds because a six-year-old private key was still valid. The reflex answer to the frontend case is to lock third-party scripts down with SRI and CSP, and that is exactly where the reflex fails. SRI verifies that a file matches a hash — the malicious script came from the trusted vendor's own infrastructure, so it was the expected file. CSP is a whitelist of where a script may load from — the vendor was on the whitelist. Both answer "was this script authorized?" and the attack's entire premise is that it was. The question worth building around is the one neither control asks: what is this authorized script allowed to do?
How it works
The build is an inventory and a containment test, in that order. Inventory: for one real frontend, list every third-party script and every vendor holding customer PII, and go one layer down where it is discoverable — ShipMonk's exposure arrived through Metabase, and a list that stops at direct vendors would have missed it. Capability rather than origin: for each entry, write what it could do if it turned hostile today, and for scripts make the test concrete — can it reach the wallet-signing path at all? Containment: since SRI and CSP shrink the origin set and nothing else, the thing worth prototyping is isolation — moving the signing surface into an origin that third-party JavaScript cannot address, and treating "our own page may prompt for a signature" as itself a privilege to be scoped rather than an ambient property of the site. Then the same question turned inward: a private key that has been valid for six years has a blast radius measured in years, so rotation age belongs in the inventory next to the vendors, not in a separate ops checklist. One consumer-side corollary was parked here for want of anywhere better; it now has its own card. See pick-a-signer-not-a-brand, which turns audit history, signing scheme, entropy source and fulfilment handling into a selection procedure rather than a maxim. July's Coldcard defect is the inside-the-device version of the same lesson: a 2021 build-configuration error routed seed generation to a software PRNG instead of the STM32 hardware RNG, leaving roughly 40 bits of effective entropy on Mk2/Mk3 devices, and at least 1,719 BTC — about $111M across more than 5,200 addresses — was swept once someone noticed. ShipMonk is the who-shipped-the-device version, and the leaked list is worse than it looks precisely because no key was touched: a verified roster of hardware-wallet owners with delivery addresses is raw material for targeted phishing and for the physical coercion this space calls a wrench attack, and it appears in no threat model drawn around the device.
Where it lands in Jayverse
- Wallet: isolate the signing surface from third-party scripts. Test capability, not origin — no vendor script on jaylabs.xyz, even a whitelisted one, should be able to reach the wallet-signing path.
- Rabbit portal: inventory every third-party script and PII-holding vendor, one layer past direct vendors. ShipMonk's exposure arrived through Metabase; a list that stops at direct vendors on the portal would miss the same kind of second-layer risk.
- gitboard: add a key/vendor rotation-age row. Track relayer and admin key age next to the vendor inventory so a six-year-old key doesn't sit unnoticed the way the Polymarket top-up wallet's did.
Key expressions
| Expression | 뜻 · 쓰이는 자리 |
|---|---|
| wallet-drainer | 지갑을 비우는 악성 프로그램 · 서명을 유도해 자산을 통째로 빼가는 코드. "injected a wallet-drainer into Polymarket's frontend" |
| reflex answer | 반사적인 대응, 즉각 나오는 해법 · 깊이 생각하지 않고 바로 튀어나오는 대책을 비판할 때. "The reflex answer to the frontend case is" |
| one layer down | 한 단계 더 들어가서, 하청의 하청까지 · 벤더의 벤더까지 조사 범위를 넓히는 것. "go one layer down where it is discoverable" |
| ambient property | 당연히 주어진(내재된) 속성 · 별도로 관리하지 않아도 원래부터 있는 특성으로 취급되는 것. "not an ambient property of the site" |
| wrench attack | 렌치 공격, 물리적 강압을 통한 탈취 · 신체적 위협으로 키를 뜯어내는 공격을 가리키는 업계 은어. "the physical coercion this space calls a wrench attack" |
| sweep (funds) | (자금을) 한 곳으로 쓸어 모으다 · 탈취한 자금을 정리해서 옮기는 행위. "roughly 1,719 BTC... was swept once someone noticed" |
| raw material for | ~의 원재료가 되다 · 유출된 정보가 다른 공격에 그대로 쓰일 수 있음을 비유. "raw material for targeted phishing" |
| rotation age | (키를) 교체한 지 얼마나 됐는지, 키 교체 주기 · 오래된 키일수록 위험 노출 기간이 길다는 뜻. "rotation age belongs in the inventory" |
| blast radius | 피해(영향) 반경 · 사고나 공격이 실제로 미치는 범위. "a private key... has a blast radius measured in years" |
| consolidate into | (여러 곳의 자금을) 한 곳으로 모으다/집중시키다 · 탈취 자금의 흐름을 설명할 때. "consolidated into roughly 1,893 ETH" |
| SRI | 하위 리소스 무결성(Subresource Integrity) · 스크립트 파일이 해시와 일치하는지만 검증, 출처가 맞으면 통과시키는 브라우저 보안 기능. "SRI verifies that a file matches a hash" |
| CSP | 콘텐츠 보안 정책(Content Security Policy) · 스크립트를 어디서 불러올 수 있는지 화이트리스트로 제한하는 브라우저 정책. "CSP is a whitelist of where a script may load from" |
| PII | 개인식별정보(Personally Identifiable Information) · 이름·주소 등 개인을 특정할 수 있는 유출 데이터. "every vendor holding customer PII" |
| ShipMonk | 트레저의 주문 이행(풀필먼트) 파트너사 · 이번 유출 사고의 실제 침해 경로가 된 외주 물류 업체. "its fulfilment partner ShipMonk had been breached" |
| VASP | 가상자산사업자(Virtual Asset Service Provider) · Bits of Gold가 보유한 이스라엘 최초의 라이선스 지위. "holder of Israel's first VASP licence" |
| POL | 폴리곤 네트워크의 네이티브 토큰 · 탈취 자금이 빠져나간 단위, 배치로 전송됨. "left a Polymarket internal top-up wallet in 5,000-POL batches" |
| PRNG | 의사난수생성기(Pseudo-Random Number Generator) · 하드웨어 대신 소프트웨어로 난수를 만들어 보안이 약해진 원인. "routed seed generation to a software PRNG" |
| STM32 | 콜드카드가 쓰는 하드웨어 난수 생성 칩(마이크로컨트롤러) · 원래 써야 했던 진짜 난수 소스. "instead of the STM32 hardware RNG" |