- Web3 developer Brian Guan lost $40,000 after accidentally posting his wallet’s secret keys publicly on GitHub, with the funds being drained in just two minutes.
- The crypto community’s reactions were mixed, with some offering support and others mocking Guan’s previous comments about developers using AI tools like ChatGPT for coding.
- This incident highlights ongoing debates about security practices and the role of AI in software development within the crypto community.
The developer said he forgot that his secret keys were in the repository.
If you have your secret keys in your repository you’ve already fucked up, long before you accidentally make that repository public.
One of the first things you should do in a repo is add a .gitignore file and make sure there are rules to ignore things like
*secret*
or*private*
etc. Also, I pretty much never usegit add .
because I don’t like the laziness of it and EVERY TIME one of my coworkers checked in secrets they were using that command.Even though that’s a good extra precaution, per person config data, such as keys, should be stored outside of the repo, eg. in the parent directory or better in the users home dir. There is zero reason to have it in the repo. Even if you use a VM/containers, you can add the config in an extra mount/share.
What’s the general consensus on storing encrypted data in the repo with the keys outside? I see people recommend that but I’m too paranoid and my secrets are very small in size so it hasn’t been necessary.
the format of the encrypted file can give the attackers an advantage. if your code reads the decrypted file, the attacker can guess the first line is a comment or the name of a setting. a savvy person can combine that with the algorithm to perform a “known plaintext attack”, for example by generating a number of possible passwords that would lead to files starting like that.
That’s smart. Anyone trying that should definitely have a machine-generated strong password!
I basically always do a
git add -p
Very useful command and it works with other git commands as well.
Everytime a colleague asks me for help with git that’s the one rule I suggest them to use.
What does that do?
Instead of just adding whole changed files, it starts an interactive mode where it shows every hunk of diffs one by one, and asks you to input yes or no for each change. Very helpful for doing your own mini code review or sanity check before you even commit.
That’s exactly why I do it
The
s
option is very useful to split the chunks.I use vscode with plugins and manually add my files now. The workflow is beautiful.
git add -u
is pretty nice, it only adds modified files.I usually do
git add -p
which is interactive (helps avoid committing debugging prints and whatnot), but the other is nice for bigger refactors.
And that’s why you always
leave a noterecheck your .gitignore file before committingdeleted by creator
I use this as a pre-commit hook https://github.com/americanexpress/earlybird
I can’t believe someone would be so stupid and careless as to develop Web3 software.
Got me good
deleted by creator
I have no sympathy for him, if he is a crypto developer he knows how important those private keys are. And he also knows people scrape public areas all the time looking for keys just like that. The whole point of crypto is to be immutable, so that money is simply lost to him now.
He seems to know how much of a dumb mistake that was, although his description of himself was a bit more colorful.
You’re not wrong about how important those keys are and how he definitely should have known better. But I at least have a little sympathy for the guy. Everyone makes mistakes from time to time, even with important stuff. Hopefully they are lucky enough not to lose 40k on one but unfortunately he wasn’t. Whether he should have known better or not, that just plain sucks.
The whole point of crypto is to be immutable, so that money is simply lost to him now.
IIRC there are several cases where some group of people lost big enough coins and force most of the miners to fork to get their money back. Not bitcoin though.
If that doesn’t make everyone lose 100% trust in coins that do that, I don’t know what will.
It must be automated for it to happen in 2 minutes. Which implies these kind of things happen often enough for someone to write a script for it.
Yes, it absolutely is automated.
There are bots running constantly looking for things that match patterns for exploitable credentials in public commits.
AWS credentials
SSH keys
Crypto wallets
Bank card info
If you push secrets to a public github repo, they will be exploited almost immediately.
The scanning part is definitely automated by many different actors (for the gains or the “lulz”), but being this fast, also automated key usage (account draining) must have been implemented which is a bit more impressive…
Not really. All of the underlying mechanics of crypto are so simple that they can be very easily interacted with by bots. Bots make up the vast majority of all crypto trades; mostly wash trading, but also front-running attacks, scams or outright thefts like this one. There are so many exploitable flaws in crypto that every bug is basically a self-executing bug bounty.
If it was a script I wrote, it would have successfully stolen the $40k, but also stolen my own money and deposit both sets of money into a second intended victims account because I forgot to clear a variable before the main loop runs again.
You always mess up some mundane detail!
It would have deposited the funds in an account “foobar123” and been lost forever
There must be bots trolling GitHub for API keys, crypto secret keys, and other such valuable data
That’s the kind of mistake you only make once.
I wouldn’t survive that mistake.
Well, either you do it once :P
Some speculate that AI assisting him in programming could have made the error, in which case I hope he gets fucked by it again in the future.
There’s a reason we use .env files and put them in gitignore.
I use a text file version of a novel to back up my keys, then I store the key map in multiple cloud drives. For example, if the word is “lighting” then my key map for that word would be 487,5 (line 487, word 5). Easy to crack, if you know what novel I am using.
That’s the copy protection on dozens of computer games from the 90s.
Well, I am a Gen-X’r.
It’s also even older in use in communicating secretly, known as a Book Cipher. You and your recipient get the same copy of a book and agree to one of a few numbering schemes, the plaintext message becomes numbers that correspond with words in the book.
What a muppet
I’m sad I didn’t see any comments saying he shouldn’t be using a $40k wallet key to test his software in the first place. Anything could happen with simple code mistakes…just get an empty wallet or one with a few bucks in it.
They made 2 errors.
-
Use crypto
-
Storing the key anywhere close to the repo.
- Letting AI code for you
You need an escape backslash character (\) before the #3 so it doesn’t show as a #1.
Works fine for me, lemmy.today on desktop browser.
Sucks that your medium for viewing is wrong, maybe you should go complain about the wrongness to the people who maintain it?
-
Incredibly funny story, incredibly awful website.
If there was any sort of password / highly entropic string detection in their build pipeline it would have caught a wallet’s keys. They aren’t an excuse for lack of diligence, but they should still be in every pipeline where passwords or keys might have to get used.
I’m terrible about building pipelines for most of my personal projects though, so I’m throwing rocks from my glass house here.
A CI pipeline wouldn’t fix this since the code would be committed before the pipelines run. This needs to be caught on the dev’s machine with a pre-commit or pre-push hook.
I like your CI plan but maybe they just needed some sort of sane policy. Like never commit plaintext keys to any repo. Never work with a $40k key in a new project under development. Never convert a private repo to public.