Fluffy - Just on the cookie issue because that's what i'm looking at, MyMonero is definitely serving the account.js?2 verison *with* the priv key being sent to the server in the cookie on every http request (so like 10 times on every page refresh and I think there is even a keep alive to send it up too...)
Ok so just to clarify: with AngularJS you basically just get index.html + a bunch of JS files, and then it gets "partials" (kinda like views in an MVC pattern) as it needs. BUT that's just static files. The stuff that is polled regularly / any actual interaction with MyMonero is done through the API. Now the MyMonero API is on a different domain (api.mymonero.com), so cookies are never sent to it (the cookie was explicitly for "mymonero.com", not ".mymonero.com" which would have included subdomains). So the risk we identified with it (ie. why we dropped that functionality) was because it would be included in static object requests, which is something that the developer who added that functionality in the very initial version never considered.
...same on Firefox / Chrome / Tor and from a few different locations so it is being served, for whatever reason, at least for me.
And on the web-archive you linked that's indexed today, it's there too if you just change the query string to a 2:
I understand that - what I meant is that ?2 should never be served by index.html:)
Seems like something that should be fixed pretty quick e.g. just delete that code from the server and I would guess existing users need to be alerted that they may have had cookies with their priv key stored in clear-text on disk that can be recovered potentially unless it's been manually shredded?
That code hasn't existed on the server (except as a git blob) for ages, so there's nothing to delete on that side. When you add ?2 to the file you're being served a cached file somewhere along the line, which is why I went and cleared a bunch of things server-side that could be caching it. I suspect the reason that actual file can still be accessed is because CloudFlare has longer lived caching on some of their endpoints. But beyond that nobody should ever be served ?2, so the caching of the actual JS should be/have been largely irrelevant.
Re: shredding, we don't log static object requests, as that just clutters the log, and we've never logged cookies (even when we do receive them). Since all the heavy lifting is done client-side, and then on the server side by the API, the static objects are just cached aggressively and served as quickly as possible. Logging would interfere with that. We also don't log much of anything else, because I don't want to have an environment where I've got metadata that can be requested by LEA.
One question about your comment: "As mentioned, there's little to no useful information I can gleam from MyMonero that would give me some edge in trading."
...but with the private keys being sent up to the server, that could be used to get a picture on distribution / richlist, plus if you see some of the large balances going up or down with withdrawals / deposits, wouldn't that be good for predicting pumps and dumps? (as statistically most of it I guess would be to Poloniex)
I appreciate what you are saying, but MyMonero has been live for what a year now (?) with the private keys going up to the server so assuming you fix it now, it has been happening up to this point.. at least for some people.......
Nowhere near a year:) It's been up since the end of last year (so about 5 months), and as mentioned above private keys weren't going to the API, and static requests weren't logged.
...So potentially some accounts are compromised and need to have funds moved because if those keys were intercepted in transit (like man in the middle / cross domain cookie hack / server breach / data retained on server was hacked) then those coins can be stolen at some point in the future too?
Yes absolutely to the MITM risk that existed with that code snippet, or to the risk that I'm outright lying and we've logged everything. But, at the same time, the risk profile doesn't change: if I really wanted to I could serve up some obfuscated JS buried deep in the code (not obvious and outright like you've seen) that surreptitiously sends me private keys. That's the risk you take with any webwallet, Bitcoin or otherwise, and that is why
it doesn't matter how much is done client-side, you still have to trust the operator 100%. I don't think (or hope) that anyone that uses MyMonero is under any illusions there. They have to trust me, it's the nature of using a web wallet.
How come there is the secrecy too, why is the backend closed source, and also why no indication of how many people use MyMonero - yes its private but you know yourself as do Google Analytics so why not share this with everyone?
It's a commercial project that cost a lot of money to develop and build out by a small team of accomplished developers. This isn't something I hacked up on a weekend, and I'm also not the only owner (Risto Pietilä owns half of it). There's no secrecy with the backend, it's just a commercial project that isn't going to be made open-source just yet. We do have long-term plans to provide a user-hostable version, but right now it's just too complex and "delicate" to release.
No you can't have an indication as to the userbase for two reasons. Firstly, it's a commercial project, and the Google Analytics stats are not public. Secondly, even if I provided stats on the number of viewkeys it's all rather meaningless, as it's really easy to create multiple accounts.
Do you plan to keep MyMonero going and as the #1 option for a wallet presented to users? - how does that tie in with Monero being designed for untraceability / security, it doesn't seem to be achieving that?
No, it'll be replaced by Monero Core as the first option when that is completed. MyMonero fills a usability gap that couldn't be filled with Monero Core fast enough, and there was (and is) a need for those that are interested in tinkering around with Monero to have something that they could use.
I would never, ever recommend anyone store large quantities of value in Monero itself (which is somewhat trivially attacked by a motivated attacker with enough mining power) and definitely not in MyMonero. But overall I think you misunderstand what Monero is trying to achieve. It's not designed to be some super-secret currency that is so private that nobody even knows it exists. It's not designed to fill some specific use-case like "buying dildos on the dark web". It
is designed to be truly fungible, sure, but that is only one aspect of its design.
Things like our eternal emission (to retain mining incentives), or the move to a 6-month rolling hard fork window, are there to make Monero
useful. Things like OpenAlias, and the slowly-increasing easy-to-understand content on GetMonero.org, are there to make Monero
usable. Transactional privacy is a core feature, but even that is not yet complete (eg. we still have to implement the changes posited in
MRL-0004). We ultimately want Monero to be easy to use by everyone, whether they're very familiar with cryptocurrencies or not.