mythsthe peopleLedger Connect Kit2023crypto / web3

everyone assumed:

a small front-end library we embed can't drain our users

what was actually true:

A dependency you embed runs with your users' trust, not its own.

how it happened

  1. whoattackersphished a former employee
  2. the gappackage registryex-employee access never removed
  3. thenapps using the libraryserved it automatically
  4. the result~5 hours livewallets drained
the gap that let it happen the result

what everyone assumed

Modern front ends are assembled from many small parts, and each one feels too minor to be a threat. A wallet connector is a convenience widget. The reasonable belief is that the danger lives in the contracts and the keys, not in a helper library that just brokers a connection, so when the package updates, you ship the update, because that is what keeping current means.

what happened

The quiet stretch here was measured in hours rather than months, which is its own lesson about how fast a shared dependency moves. A former Ledger employee was targeted by a phishing campaign that gave attackers access to that person’s account on the npm package registry. Using that access, the attackers published malicious versions of the Connect Kit, numbered 1.1.5, 1.1.6, and 1.1.7, carrying a wallet-draining payload. Because the affected applications pulled the library from the registry, they served the poisoned code to their own users automatically, without changing anything on their own side. The teams running those applications had made no mistake that day. They had simply embedded a library and let it update.

step by step

  1. a former employee is phishedThe attacker gets their npm account.
  2. malicious versions 1.1.5 to 1.1.7 are publishedWith a wallet-draining payload.
  3. apps pull the library automaticallyDownstream sites serve the poisoned code without changing anything.the assumption breaks here
  4. 1.1.8 replaces it after about five hoursAround 600,000 US dollars drained.

how it surfaced

Ledger identified the compromise and replaced the malicious package with a clean version, 1.1.8, ending the exposure after roughly five hours. Reporting placed the amount drained at around 600,000 US dollars, with some estimates higher, taken from users of downstream applications who had never heard of the library at the center of it. The realization arrived in the ratio: a few kilobytes of borrowed code, loaded by dozens of sites, turned every one of them into a delivery channel for the same theft.

A dependency you embed runs with your users’ trust, not its own.

However small the library, whatever it can reach, it can reach through you, which makes its supply chain part of yours.

picture it at a company like yours

The company here is made up. The other two paths are not: they happened, and each links to the story.

your company
a normal dayYour website uses a small piece of code from a public library to power one feature.
the gap nobody seesYour site loads whatever the latest version is, automatically.trusting what a supplier ships
  1. in this story
    the day it mattersThe library's publisher is hacked and a malicious version goes out.
    what it costs youYour site serves the attack to your own customers for hours, without you changing a thing.
  2. or it goes like this
    howA genuine, signed update from a certified vendor carries a backdoor.
    what leavesa quiet way into your networkwho ends up with ita state intelligence service
    it happenedSolarWinds / Sunburst, 2020
  3. or it goes like this
    howA build helper everyone uses is hijacked and its versions repointed.
    what leavessecret keys, printed into build logswho ends up with itanyone reading public logs
    it happenedtj-actions/changed-files, 2025

sources

  1. Ledger, Security Incident Report ,
  2. Ledger, A letter from Chairman and CEO Pascal Gauthier Regarding the Connect Kit Exploit ,
  3. Cointelegraph, Multiple DApps using Ledger connector compromised ,

← all myths

your turn

what you can do about it

  1. this week

    List the third-party scripts and packages that run in front of your users, find which ones auto-update versus which are pinned, and ask who would notice, and how fast, if one of them started behaving differently.

    Your application loads code you did not write, from registries you do not control, and some of it updates on its own. That convenience is the assumption.

  2. go deeper

  3. if you're not sure where to start

    Run the offboarding checklist on one leaver. It covers every account and token to close when someone leaves.

    open the checklist →

the letter · every two weeks

one access gap in your inbox, with the fix.

Every issue takes one way access creeps in, shows a real incident where it went wrong, and ends with one thing to check that week. Written for the people who run the tools, without a security team behind them.

  • 1one mechanism, explained plainly
  • 2one real incident, taken apart
  • 3one step you can take on Monday

get the next issue

One email every two weeks. Your address stays here and is never passed to vendors. One click to unsubscribe. Privacy.