New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Seed Phrase Bug Bounty #3127

Open
danfinlay opened this Issue Jan 29, 2018 · 78 comments

Comments

Projects
None yet
@danfinlay
Contributor

danfinlay commented Jan 29, 2018

As part of our commitment to the best security we can offer, the MetaMask team is planning to continuously offer a bug bounty on our seed phrase functionality, we are starting the bounty at 1 ether, but anyone is free to add to the bounty as they like.

As we have written about before #2577, and have awarded a bounty for in the past, sometimes users have reported that the seed phrase they were originally given does not restore their original accounts.

We have continued to receive rare but concerning accounts of similar experiences: #2904 #3042 #4756 #4697

The bounty will be paid to anyone who can demonstrate a condition in MetaMask's code base, either through automated tests or manual reproduction, where MetaMask would show a user a seed phrase on first setup that would not work for later restoring their accounts.

Thanks for your interest and participation, we're available to answer any questions about our key management here.

@gitcoinbot

This comment has been minimized.

gitcoinbot commented Jan 29, 2018

This issue now has a funding of 1.0 ETH (1189.64 USD) attached to it.

  • If you would like to work on this issue you can claim it here.
  • If you've completed this issue and want to claim the bounty you can do so here
  • Questions? Get help on the Gitcoin Slack
  • $47191.73 more Funded OSS Work Available at: https://gitcoin.co/explorer
@YUUk37sR

This comment has been minimized.

YUUk37sR commented Feb 1, 2018

I had same issue with MetaMask chrome extension, a month back, i can reproduce what happened with my account. As i have not read MetaMask's code base, my understanding of seed phrase is limited. But what happened is still a issue.

@danfinlay

This comment has been minimized.

Contributor

danfinlay commented Feb 1, 2018

i can reproduce what happened with my account

If you can reproduce a problem that meets this description reliably, you'll be eligible for this bounty, no need to understand the code.

If you'd like to disclose it in secret, please submit your reproduction steps to support@metamask.io

@YUUk37sR

This comment has been minimized.

YUUk37sR commented Feb 2, 2018

On reading documentation and concept of loose accounts, what happened with my account was, i had imported few accounts with "import account" option, but after reinstalling metmask extension, these imported accounts were gone, luckily i had private keys for these imported accounts, so i had to import these again. In that sense "seed phrase" will only create HD wallet, and will recover only addresses in its derivation path?(Not the previous full state of your account).

@danfinlay

This comment has been minimized.

Contributor

danfinlay commented Feb 2, 2018

That's right, the seed phrase is not a password to some server we maintain, it is the secret from which we derive the accounts that you create with MetaMask. It can't help with restoring any other information.

Glad you figured it out!

@danfinlay danfinlay closed this Feb 2, 2018

@wong2

This comment has been minimized.

wong2 commented Feb 4, 2018

Why is this closed?

@ghost ghost referenced this issue Feb 12, 2018

Closed

I logged out :( #3229

@vs77bb

This comment has been minimized.

vs77bb commented Feb 13, 2018

@danfinlay Is this one still open? cc @owocki

@danfinlay

This comment has been minimized.

Contributor

danfinlay commented Feb 13, 2018

Sorry, I didn't mean to close this!

@owocki

This comment has been minimized.

owocki commented Feb 22, 2018

working on some issues with gitcoinbot erroneously commenting on issues... looks like it might have happened here. sorry yall, working on it!

@owocki owocki referenced this issue Feb 22, 2018

Closed

Integration branch triage issues #474

6 of 10 tasks complete
@owocki

This comment has been minimized.

owocki commented Feb 22, 2018

just put in a fix for the gitcoinbot craziness. gonna monitor for the next few hours to make sure we're all good.

@DavidFnck

This comment has been minimized.

DavidFnck commented Feb 24, 2018

Hi @danfinlay

METAMASK is really a good wallet. I am a fresh user of METAMASK, and teach my girlfriend to use it. Last night when we use it to join an ICO campaign. We got the TERRIBLE problem. DEEP SAD! We lost our all accounts although we take down the seed prase.

the reproduce progress as below:

  1. we created an account, setted a password and took the seed prase,this is Account 1;

  2. then we created Account 2, 3, 4, 5…… it very easy and there is no seed prase or password (I think this is the important reason)

  3. then we use the address to join the ICO, but we clear all the cache of the browser (this is why my accounts lost )

  4. when we login the metamask use the seed parse and reset the password, we only find the Account 1. the other accounts lost.

That's quite terrible! We lost many tokens which cost us a lot. And I didn't find a good way to get back the account. Maybe never. It really a big BUG, and Why don't you alert users to avoid it? Some advices as below:

  1. Alert all the user one seed parse can only recover the first Account.
  2. if you clear the cache of the browser, you will lose all the accounts.
  3. you should download or takedown every acoount's private key.

Good product but with quite big BUG for fresh users. Hope others good luck. :( a sad day for me.

@DanielRX

This comment has been minimized.

DanielRX commented Feb 25, 2018

EDIT: @DavidFnck if you press create account it will restore the rest, only account 1 shows but the rest will be there if you create account again

One thing to note, when I clear cache and use the password, it claims to be wrong (it was copied from a text file for testing) so I had to use the seed phrase to restore

@BinaryQuasar

This comment has been minimized.

BinaryQuasar commented Feb 25, 2018

@DavidFnck The accounts should be restored one-by-one when you perform "create account" in the fresh MetaMask.

EDIT: @DanielMReed edited their comment to say this as well.

@BGzetro

This comment has been minimized.

BGzetro commented Feb 27, 2018

I'm offering up to 20% of my account balance as a bounty if I can gain access to my original address again after being effected by this bug. The bounty I'm offering is worth than the bounty of this issue no (#3127) alone. The issue I created is no #3258 it has been closed but not solved and is the same issue as this one.

@BGzetro

This comment has been minimized.

BGzetro commented Feb 27, 2018

My original address balance can be seen here and is where I'll pay the bounty out from on regaining access:

https://etherscan.io/address/0xbc70688f0394d98c6016f670d2e2515d0ef63533

@BGzetro

This comment has been minimized.

BGzetro commented Feb 27, 2018

If the balance increases in value so does the bounty I'm offering i.e 20% of whatever my address is worth at the time of gaining access.

@bdresser

This comment has been minimized.

Member

bdresser commented Sep 10, 2018

Hey @EmanuelKuhn - thanks for reporting, and thanks for the thorough writeup and repro steps.

This appears to be a very small edge case. A user would have to pause after completing a substantial portion of onboarding, close the browser, then choose to import a different pre-existing seed. It's also worth noting that the user must have the correct seed saved somewhere, which makes the wrong seed marginally less harmful.

Still, it's definitely a bug, and we will continue to treat any issue in seed phrase logic with gravity. It very nearly fits the description of this bounty by "show[ing] a user a seed phrase on first setup that would not work for later restoring their accounts." Unsure if this counts as "first setup," but the team appreciates your report and will pay out the bounty. Expect a payment via Gitcoin from @danfinlay shortly.

A fix for this issue has been merged in #5229. This bounty will remain open for anyone who can find an issue in production with first-time seed phrase generation logic.

@danfinlay

This comment has been minimized.

Contributor

danfinlay commented Sep 11, 2018

Hey @EmanuelKuhn to pay you, you'll need to click "Start work" on the attached bounty via GitCoin.

Sorry @adipurnama83 for removing you, if you do find another instance of this issue, you will be paid out, but I had to remove you so I could pay out Emmanuel for now.

@EmanuelKuhn

This comment has been minimized.

EmanuelKuhn commented Sep 11, 2018

Do I also need to formally submit work through gitcoin?

@danfinlay

This comment has been minimized.

Contributor

danfinlay commented Sep 11, 2018

Yeah you do, sorry!

@vs77bb

This comment has been minimized.

vs77bb commented Sep 11, 2018

Hi @danfinlay just FYI - you're able to pay out @EmanuelKuhn without a submit work action now by using the 'Advanced Payout' feature... this sends a tip to @EmanuelKuhn via his Github username.

Even better in this case might be just simply sending a tip, because it seems like you guys want to keep this open for future hunters.

@danfinlay

This comment has been minimized.

Contributor

danfinlay commented Sep 11, 2018

Thanks for the tips!

It will be another bit before I can send, but I will send soon.

@danfinlay

This comment has been minimized.

Contributor

danfinlay commented Sep 12, 2018

Aha @vs77bb : This tip is over the per-transaction limit of $500.00. Please try again later or contact support..

Will have to do a normal payout.

@danfinlay

This comment has been minimized.

Contributor

danfinlay commented Sep 12, 2018

So that means I do need @EmanuelKuhn to click "submit work" before I can payout.

@owocki

This comment has been minimized.

owocki commented Sep 12, 2018

@danfinlay i just increased your payout amount limit to $5000 if that helps!

@gitcoinbot

This comment has been minimized.

gitcoinbot commented Sep 12, 2018

⚡️ A tip worth 10.00000 ETH (1735.47 USD @ $173.55/ETH) has been granted to @EmanuelKuhn for this issue from @danfinlay. ⚡️

Nice work @EmanuelKuhn! Your tip has automatically been deposited in the ETH address we have on file.

@danfinlay

This comment has been minimized.

@owocki

This comment has been minimized.

owocki commented Sep 13, 2018

Thanks @danfinlay -- do you want to close the issue on Gitcoin ?

@danfinlay

This comment has been minimized.

Contributor

danfinlay commented Sep 13, 2018

@gitcoinbot

This comment has been minimized.

gitcoinbot commented Oct 24, 2018

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


Work has been started.

These users each claimed they can complete the work by 316 years, 8 months from now.
Please review their action plans below:

1) DunnCreativeSS has started work.

I've noted that MetaMask team endevours to make the Seed recovery process as smooth as possible. While I don't have a specific way to recreate a failure in recovering seed phrases (have tried ethereum-js code I found on Reddit but couldn't recreate their failure) through manual or automated means, I do have some suggestions on how to improve the experience for people facing issues. I've noted that the vast majority of people complaining about their seed phrases are facing issues with properly remembering or inputting their seed phrase, and it's no particular issue with MetaMask at all.. I think I have a contribution that I thought of while trolling these errors, and would like to submit it even for a fraction of the bounty.

Learn more on the Gitcoin Issue Details page.

2) wazdevelopment has started work.

web phishers bugs detection have experience as a advanced malware detector and security analysis data mining and data recovery

Learn more on the Gitcoin Issue Details page.

@DunnCreativeSS

This comment has been minimized.

DunnCreativeSS commented Oct 24, 2018

@danfinlay

https://goo.gl/44G1Rc

To reproduce:

  1. install a /dist or /builds app to a browser
  2. click MetaMask in browser, use Beta (unsure how to change legacy behavior - willing to learn how)
  3. Accept all EULA etc
  4. 'Import Existing DEN'
  5. Give it a password, and import 'shoudl hat few pupil letter program soon rude ski exhaust brain bleu'
  6. Note that the interface returns "The following provided words are not valid seed words: shoudl,bleu"

We need additional translations for other supported languages other than EN.

https://drive.google.com/file/d/1RwyHcuCvQJPWPIQHws7taXXkpflEXhdL/view?usp=sharing

@kumavis

This comment has been minimized.

Member

kumavis commented Oct 27, 2018

@DunnCreativeSS are you suggesting localizing the "the following seed words are not valid seed words" into different languages?

@DunnCreativeSS

This comment has been minimized.

DunnCreativeSS commented Oct 27, 2018

Yes @kumavis so long as it's accepted as a viable solution to help streamline the seed recovery process and make it more user-friendly.

For lurkers: I'd written @danfinlay on Twitter and as he's away this week and next he'd asked me to contact the team via support@ email address, which I did yesterday.

I'm looking forward to seeing if this will help the user experience as I'd noted MM folks say they're always looking to help make this process easier, but no response from the team as-yet. This solution helps 1. people that obfuscate a word or all the words realize which ones so they can hopefully deobfuscate 2. people that mispelled words they were copying down 3. other chair-->keyboard errors, which I found most of the outstanding Github issues surrounding these issues to involve.

@gitcoinbot

This comment has been minimized.

gitcoinbot commented Nov 8, 2018

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


Work for 10.0 ETH (2120.45 USD @ $212.04/ETH) has been submitted by:

  1. @wazdevelopment
  2. @omidmahboubian

@danfinlay please take a look at the submitted work:


@wazdevelopment

This comment has been minimized.

wazdevelopment commented Nov 8, 2018

Popup of connect request appears every time when browser restarted even if the website have been accepted before. during payment on meta-mask must refresh to Rinkeby and then main eth network to confirm payment.

@wazdevelopment

This comment has been minimized.

wazdevelopment commented Nov 9, 2018

Issue Status: 1. Open 2. Started 3. Submitted 4. Done

Work for 10.0 ETH (2166.02 USD @ $216.6/ETH) has been submitted by:

  1. @wazdevelopment

@danfinlay please take a look at the submitted work:

Popup of connect request appears every time when browser restarted even if the website have been accepted before. during payment on meta-mask must refresh to Rinkeby and then main eth network to confirm payment.

how do i find out if i get bounty paid for the work ? thanks

@bdresser

This comment has been minimized.

Member

bdresser commented Nov 12, 2018

@wazdevelopment this bounty is specifically for issues related to MetaMask's seed phrase logic, so your bug report does not qualify.

Thanks for pointing this out, though! Please file as a separate issue with additional details (browser, MM version, etc) so we can address it.

@DunnCreativeSS

This comment has been minimized.

DunnCreativeSS commented Nov 12, 2018

@bdresser was there any word whether my submission was worth part of the bounty? It doesn't point out an issue with the seed phrase logic or code, however it addresses some of the most common issues faced with seed phrase recovery.

Thanks,

@bdresser

This comment has been minimized.

Member

bdresser commented Nov 13, 2018

hey @DunnCreativeSS, thanks for opening your issue and pointing out a reasonable UX improvement. But as the original bounty states, we're looking for

a condition in MetaMask's code base, either through automated tests or manual reproduction, where MetaMask would show a user a seed phrase on first setup that would not work for later restoring their accounts.

@logvik

This comment has been minimized.

logvik commented Nov 21, 2018

This issue does not reproduce. Tested on Windows Firefox and Chrome with version 5.0.3

@hatgit

This comment has been minimized.

hatgit commented Nov 26, 2018

I noticed 12 dependencies with the word "stream" in https://github.com/MetaMask/metamask-extension/blob/develop/package.json and sharing this out of caution in case MetaMask isn't already aware in case it applies, with regard to the exploits found in the event-stream NPM package (which I just saw headlines that bitpay/copay wallets were affected): dominictarr/event-stream#116

@tmashuang

This comment has been minimized.

Contributor

tmashuang commented Nov 26, 2018

@hatgit as FallingSnow has mentioned, reverting/updating/pinning to event-stream@3.3.4.

metamask-extension [develop] :> npm ls event-stream flatmap-stream
metamask-crx@0.0.0 /Users/Desktop/metamask-extension
├─┬ gulp-livereload@4.0.0
│ └── event-stream@3.3.4
└─┬ shell-parallel@1.0.3
  └─┬ ps-tree@1.1.0
    └── event-stream@3.3.4  deduped

Thanks for the report and we are continuing to monitor these packages that have the dependency.

@hatgit

This comment has been minimized.

hatgit commented Nov 26, 2018

@hatgit as FallingSnow has mentioned, reverting/updating/pinning to event-stream@3.3.4.

metamask-extension [develop] :> npm ls event-stream flatmap-stream
metamask-crx@0.0.0 /Users/Desktop/metamask-extension
├─┬ gulp-livereload@4.0.0
│ └── event-stream@3.3.4
└─┬ shell-parallel@1.0.3
  └─┬ ps-tree@1.1.0
    └── event-stream@3.3.4  deduped

Thanks for the report and we are continuing to monitor these packages that have the dependency.

Great! Just saw this: 486f993

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment