[Disclosure: I work for AgileBits, the makers of 1Password]<p>We've talked about this several times, most recently was in June. Please see <a href="https://blog.agilebits.com/2015/06/17/1password-inter-process-communication-discussion/" rel="nofollow">https://blog.agilebits.com/2015/06/17/1password-inter-proces...</a><p>This falls into the question of what can we do to prevent attacks from malicious processes running on the user's machine. For the most part, we do try to defend against something where we can. For example, we take steps to make key logging a little more difficult.<p>In this case, the steps (other than mere obfuscation) that would be necessary to properly encrypt that channel would require that the user be confronted with a "pairing" request and prompt almost every time they restart their browser.<p>Again, it would be easy to obfuscate this communication, say by using wss; but the private key for that server would still need to be stored en clare on the computer.<p>There are other approaches as well, but all have unpleasant side effects that risk user data in other ways.
By no means an expert but is this even exploitable if the machine is not already otherwise compromised? Loopback is used for communication between two network applications on the same machine but it doesn't actually use the network device. Of course you'll be able to see it listening on your own computer but an outside computer can't sniff something that doesn't actually get transmitted over the network.<p>Also in order to populate the password/credit card fields at some point doesn't the information need to be decrypted? I'd be more concerned if 1Password was storing the keys to decrypt passwords in a browser plugin as that is a way easier attack vector
Serious question: Why is this a bad thing, and how would you do it differently?<p>You need the password to be "plaintext" in the input field in the browser, so how do you get it there?<p>Give the extension access to your private keys and master password to do decryption there? Is the browser a safer environment than an app on your machine?
At least on OSX 10.11 (not sure about others), you can't sniff loopback as a normal user.<p>So, if you could sniff this, you'd have elevated privs anyway, which means you could read the keyboard device, memory, etc.<p>Not ideal, but not sure it's a glaring hole. IMHO. I'd love to hear other thoughts on how to exploit this / how I'm underestimating this hole.
Encrypted or not, if 1Password is sending passwords to the browser extension, that means its keychain is unlocked and malware, should it really want to grab data out of the keychain, could just request it from the 1Password helper itself. No need to passively sniff for passwords.<p>I don't really see what the vulnerability is here.
In february 2015 I had contact with agilebits at support@agilebits.com and they answered me within a day. Seriously, you claim you tried to reach them, but I have a hard time believing that. What is 'not too long ago'?
I'm not sure what the implications are. What has access to that information? Is it public to all services on the machine?<p>Either way, I don't think this is 100% responsible disclosure.
I believe this is the same issue that AgileBits has been aware of for some time.
<a href="https://blog.agilebits.com/2015/06/17/1password-inter-process-communication-discussion/" rel="nofollow">https://blog.agilebits.com/2015/06/17/1password-inter-proces...</a>
I'm trying to understand when this can be a problem. I guess if you are sharing a VPN / socks proxy with multiple people? And then they are sniffing the loopback and catch your plaintext? Or something?
Do other browser extensions have the ability to look at this data? Could a malicious extension have the necessary permissions to read the loopback interface data? Seems like if the 1Password extension has access, I'm not sure what would prevent others from exploiting that access as-well.
I mucked with this a while back. You can dump all your passwords over the websocket pretty easily (provided your 1password is unlocked):<p><a href="https://gist.github.com/joevennix/438782cbe447e86f2506" rel="nofollow">https://gist.github.com/joevennix/438782cbe447e86f2506</a><p>It would be more interesting if an arbitrary website could do this, but they prevent that attack by checking the Origin header on the initial websocket request.
I'm very skeptical of any attempts to secure already compromised machine. It's just unnecessary complications for user, bloat for software and determined attacker is likely to overcome them anyway.
So how vulnerable is loopback on a machine in general? This is almost certainly not a best practice, but I can't help but wonder how practically exploitable this is.
Is this post about the 1Password browser extension communicating to the Mac app?<p>I'd like to understand better to know whether it a similar issue affects LastPass. Though at least with LastPass we're able to use the browser extension without having the native app. I don't think that's possible with 1Password for Mac.
The SASL authentication protocol sends cleartext passwords across a local UNIX domain socket. That's very similar: local IPC.<p>I use this in a web service to authenticate users. The form containing the password is submitted over HTTPS. The CGI script opens the socket, and sends it to saslauthd, which replies OK or not.
On a quick look this seems to be the same as the vuln discussed in <a href="http://arxiv.org/abs/1505.06836" rel="nofollow">http://arxiv.org/abs/1505.06836</a>.<p>1Password responded in a blog post here <a href="https://blog.agilebits.com/2015/06/17/1password-inter-process-communication-discussion/" rel="nofollow">https://blog.agilebits.com/2015/06/17/1password-inter-proces...</a>
If you can't trust your system, there is no point in encryption. There is an innumerable number of ways an attacker can get your password if you assume the attacker has system privileges.<p>If you have loopback sniffing privileges, you could just also ReadProcessMemory the password right out of 1passwords memory.
For the record, as it's been asked in the blog post: Enpass uses loopback as well, but encrypts or decodes (obfuscates?) the data somehow. I looked into decoding the data, but I wasn’t able to do it (just tried for half an hour).
General question: why is it so common to use loopback, vs unix domain sockets? I haven't seen the latter used outside of mail infrastructure, and they seem slightly more secure to me regarding who can connect to them.
On a side note I find 1Password Mini makes the browser extensions irrelevant. I think the extra steps that Mini requires are not a big deal, and you get a smaller surface area.
While we're talking about 1Password: Why do they obscure the text editing area while I'm typing, but then de-obscure it when I'm done typing? The text I typed is visible when I'm done typing.
That is obviously sloppy work on the part of the developers. And bad. But anyone that can snoop on loopback already owns the machine and he could just cheat engine the passwords from the browser ram.<p>So it is not making safe situation bad, but bad situation worse. Of course with Blizzard Warden, Steam anti cheat, driver level firewalls and all the other little helpers that collect information about your system - this could lead to a leak to some entity's logs in the cloud.