Recently, a vulnerability was found in an open-source project used by some bitcoin wallet software (such as CoPay and BitPay).

Are there any other wallets known to be affected by this vulnerability?

If I am a user of this software, what steps can I take to secure my bitcoin?


Only Copay is affected by this vulnerability.

Although the package was included by many, many projects (both within and outside the crypto space), the attack payload was encrypted, and used the package description as a decryption key. They key in question was found to be (via brute force) A Secure Bitcoin Wallet, which is the npm description for the copay-dash package.

Thus, packages which did not have that as their description would be unable to decrypt, and hence execute, the payload.

Note that such attacks are feasible on any package that does not verify and pin its dependencies, even outside the nodejs ecosystem. Developers should work to ensure that they are importing vetted code, and pin (or even vendor) their dependencies. This is especially important for programs that deal with private keys.

  • Can you define the verb "vendor"? I could only find the noun in major dictionaries.
    – Kevin
    Nov 27 '18 at 15:42
  • 1
    @Kevin Vendoring means to keep a copy of a specific version of an external code dependency within your repository, so that you are always sure of what code you are running. It also prevents a third party from changing code without changing the version number and slipping it into your application. Nov 27 '18 at 16:09
  • 1
    Ah. We do that all the time. It also makes it easier to fork the dependency and/or submit pull requests (which can be a double-edged sword if you don't have enough people or expertise to support a fork, but at least it gives you options).
    – Kevin
    Nov 27 '18 at 16:15
  • 2
    I think "self-hosting" is a clearer, more common term for what you call "vendoring" here, unless that's an established term in the JS community.
    – Nic
    Nov 27 '18 at 18:09
  • 1
    I picked vendoring based on what we call it in golang, I'm not 100% certain if the js folks have a specific term for it. Nov 27 '18 at 18:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.