206

I recently signed up for Privacy.com, which uses a service called Plaid to link a bank account. To do this, it requires the user to provide their banking username and password to a webpage from Plaid, not their bank. Then, Plaid accesses the user’s bank account with those credentials on the user’s behalf to get information. Plaid provides an API for websites and apps to easily access this banking information.

In addition to Privacy.com, plenty of other popular services use Plaid, including Venmo, Robinhood, and Coinbase.

Despite the popularity, this service appears to break two "fundamental" Internet security rules:

  1. Never give credentials to a third party. The standard is to redirect the user to a login page on the website of the service providing the login. Plaid doesn’t do this, instead providing the login form on their own website. Even worse, Plaid allows services to embed the form in their websites (as an iframe). It’s not possible for casual internet users to tell the difference between this and an “unsecured” form on some random website, so this appears to be encouraging bad security practice. Worse still, Plaid provides a login page that looks very official, showing the bank logo and using the bank’s color scheme.
  2. Never store passwords in plaintext. The only way for Plaid to access bank account details is with the password, and since my banking password was only required by Plaid once, they must be storing it in plaintext, or "encrypted" but convertible to plain text, so they can continue to use it to access my account.

Plaid login screen example

The problem seems to be that most banks do not provide an API to retrieve customer data, so a service like Plaid (and all the services that use Plaid) simply wouldn't be possible without breaking these "fundamental" security rules. But I'm not convinced that's justification for breaking them. If it's not possible to do it securely, should it be done at all?

My confusion here is that all of these services are "legitimate". None of them are scams; they're all providing a valuable service and have a solid reputation. Plaid has raised billions in funding!

I would think with Plaid using bank logos to make their “fake” bank login forms look legitimate, banks would be after Plaid with lawsuits. But apparently some of them are investors! On Plaid’s website Citi, American Express, and others are listed as investors. It appears that banks aren’t against this bad practice, and are, in some cases, actually encouraging it.

This makes me think that I might be missing something. Maybe Plaid has some special access to banking systems and it isn’t as bad as it seems. On the other hand, maybe Plaid’s reputation is held up only by the fact that they haven't been hacked yet. If (when) they are hacked it will be devastating, since the worst case scenario means the leaking of millions of user's active bank usernames and passwords. Also, many banks don’t protect users if they knowingly gave their credentials to a third party, so a lot of people could lose a lot of money. But if that's the case, wouldn't banks be working to stop Plaid and protect their customers?

I think many of the services provided by Plaid are neat and would like to use them, but if my suspicious here are correct I don’t think I can do so while remaining secure. Of course, I hope I’m completely wrong here and Plaid has some way to operate securely.

So, does Plaid have some special access to banking systems, or is it using user passwords to log in to bank accounts, which requires storing them in plaintext (or convertible to plaintext) and convincing users to give their credentials to a third-party, encouraging bad security practice?

If it’s the latter, I’m afraid I’ll have to pass on Plaid services for now and consider my banking password compromised.

18
  • 29
    I wish I asked this question about Plaid years ago. And I finally came here just now to write this question, and you have done a PERFECT job writing it already. Thanks.
    – Ryan
    Jul 17, 2019 at 14:29
  • 13
    My comment doesn't address your security question, but it does address your decision to pass on Plaid. Our company switched to Plaid via Expensify, and many of us had the same concern about security. However, in the Plaid UI when linking your bank account, you can close the "select your bank" dialog using the "X" in the upper-right corner, and then you'll be presented with a new option to add your account "manually". At this point, you are only prompted for normal ACH info (routing and account numbers). I suspect this option is intentionally hidden. Hope this helps.
    – Jared
    Dec 10, 2019 at 1:58
  • 4
    @Jared That is interesting. I don't see that option with waveapps.com (which now uses Plaid). I really don't like the Plaid model and won't be using Wave, Mint, or other services that rely on me sharing a plaintext password with a 3rd party. That takes so much trust that they're super secure and well-meaning.
    – Ryan
    Jan 6, 2020 at 0:51
  • 14
  • 12
    It is completely crazy for all these financial institutions to allow and cooperate with Plaid to do this. This is just insanity plain and simple. Apr 15, 2021 at 12:15

4 Answers 4

106

I want to point out that despite Plaids apparently honest attempts at security, their approach is a privacy nightmare, as you give full access to Plaid, to all and every single information your bank has on you, including loans, funds, investment accounts, credit card statements, address, etc. This makes Plaid differ substantially from other payment services, such as PayPal, as they only have your account number.

If you don't believe me, here's their data collection description from their privacy statement (Effective Date: February 22, 2021, my italics):

Information we collect from your financial accounts. The information we receive from the financial product and service providers that maintain your financial accounts varies depending on a number of factors, including the specific Plaid services developers use, as well as the information made available by those providers. But, in general, we collect the following types of identifiers, commercial information, and other personal information from your financial product and service providers:

  • Account information, including financial institution name, account name, account type, account ownership, branch number, IBAN, BIC, account number, routing number, and sort code;

  • Information about an account balance, including current and available balance;

  • Information about credit accounts, including due dates, balances owed, payment amounts and dates, transaction history, credit limit, repayment status, and interest rate;

  • Information about loan accounts, including due dates, repayment status, balances, payment amounts and dates, interest rate, guarantor, loan type, payment plan, and terms;

  • Information about investment accounts, including transaction information, type of asset, identifying details about the asset, quantity, price, fees, and cost basis;

  • Identifiers [NB: SSN?] and information about the account owner(s), including name, email address, phone number, date of birth, and address information;

  • Information about account transactions, including amount, date, payee, type, quantity, price, location, involved securities, and a description of the transaction; and

  • Professional information, including information about your employer, in limited cases where you’ve connected your payroll accounts or provided us with your pay stub information.

  • The data collected from your financial accounts includes information from all accounts (e.g., checking, savings, and credit card) accessible through a single set of account credentials.

Also note how the scope of the information collected has expanded over time, by looking at the previous revisions of this answer.

To make matters even worse, they can share all that information with their customers, i.e., the company that wants you to link with them. That means that when, e.g., your rent is paid via Plaid (my landlord uses a service that relies on Plaid), all of that information may be shared with that service! And while they, in turn, may not distribute that data further, you now have to trust another party that they are able to keep your data safe.

Again, here's the relevant excerpt from that privacy statement (again, my italics):

How We Share Your Information

We share your End User Information for a number of business purposes:

  • With the developer of the application you are using and as directed by that developer (such as with another third party if directed by you);

  • To enforce any contract with you;

  • With our data processors and other service providers, partners, or contractors in connection with the services they perform for us or developers;

[...]

  • In connection with a change in ownership or control of all or a part of our business (such as a merger, acquisition, reorganization, or bankruptcy);

  • Between and among Plaid and our current and future parents, affiliates, subsidiaries and other companies under common control or ownership;

  • As we believe reasonably appropriate to protect the rights, privacy, safety, or property of you, developers, our partners, Plaid, and others; or

  • For any other notified purpose with your consent.

6
  • 30
    I can't believe this is legal and that banks allow this!
    – tobiv
    Oct 16, 2019 at 14:27
  • 26
    It is a security nightmare, I agree. To make matters worse, if you have trouble linking your bank, this is what they encourage: "If you receive the error message “Error: Please disable the added/extra security placed on the account,” you’ll need to either disable the two-factor verification setting on your bank account, or contact your bank to make sure there isn’t a problem with your online banking profile."
    – A Friend
    Sep 5, 2020 at 0:56
  • 13
  • 7
    @cschroed Good! I don't understand how Plaid was ever even allowed to get customers' logins and passwords in the first place. It completely flies in the face of basic internet security. Apr 15, 2021 at 12:12
  • 5
    "We do not sell or rent end user information to ... third parties ... we do share end user information with third parties ... [in the case of reorganization like giving Juan a new title] ... and other companies". I don't blame evil for testing us, it's their job, I blame us for not passing the test
    – gseattle
    Apr 25, 2021 at 3:22
64

So, does Plaid have some special access to banking systems, or is it using user passwords to log in to bank accounts, which requires storing them in plaintext (or convertible to plaintext) and convincing users to give their credentials to a third-party, encouraging bad security practice?

Plaid, and many other services (Mint comes to mind), are storing your passwords and sometimes security questions in an accessible (hopefully, reversible encryption, not plaintext) format.

Is this poor security practice? Yes.

Is there a realistic alternative? No.

Financial systems in the US almost never support any sort of federation or open banking APIs. There is no regulatory requirement or incentive for them to do so. There is no financial incentive for them to do so, as permitting 3rd parties to incorporate their data into value-added services does not benefit them, and may harm them if the 3rd party is chosen over homegrown value-added services.

The good that can be said of Plaid is that by providing a standard middleman service that's used by multiple front-ends and trusted by significant back-ends, they're reducing the number of people trying to re-invent that particular wheel. With no particular evidence, I'd rather someone specialize in this dirty job, if it needs to be done.

You, the consumer, are left with the choice of participating in this less-secure practice, and getting value-added services and inter-operation between accounts, or avoiding these services and the benefits they may offer. Enjoy!

(Actually, with Privacy.com, you have another option - you can link your back-end bank account as an ACH source using your bank routing number and account number. You may need to contact support to set it up, but it is an option. That's about as insecure as writing a check.)


Rant:

It's ridiculous. Wells Fargo, for example, allows you to create read-only sub-accounts - exactly what we'd want if we're handing credentials off to a 3rd party! However, those sub-accounts cannot be used with 3rd parties, because of the way their authentication is set up. It's like banging your head against gravel, looking for a financial that has a well-thought-out security and inter-operability model.

I understand that Capital One is actually trying to do this right, but haven't played with it myself.


Minor update, 2021: Improved movement towards APIs, in part because it will allow banks to limit what information a third party has access to. Interesting article here.

7
  • 2
    What about... I pair my Bank account with Coinbase, transfer money and then change the Bank password? I assume, if someone breaks into Plaid he would get an old password, so I guess it's safe.
    – Ish Thomas
    Jan 25, 2019 at 2:56
  • 4
    @IshThomas That would protect your account, but be careful, as it will likely lock you out of your account - because Plaid will keep trying to log in with the old password and failing. Better to delete the account from Coinbase before changing the password. (I speak from experience, I did this to myself, I had to change my bank username to get my account unlocked (and stay unlocked) again.)
    – gowenfawr
    Jan 25, 2019 at 13:43
  • 4
    Oh wow. Thanks for the tip! I wouldn't think that's even the danger. Why wouldn't you force the user to reauthenticate? That's so stupid
    – Ish Thomas
    Jan 26, 2019 at 4:10
  • 5
    @IshThomas the entire episode reinforced my belief that banks are idiotic. They log user-agent string of bad attempts for me to see. I asked them for the source IP of the bad attempts so I could ensure it wasn't one of my many computers; they refused, said they would release on warrant or would show me if I came into the branch but couldn't give them to me. They opened a "fraud case" based on my call, but then wouldn't allow me to rename the account because no changes are possible with an open fraud case... It was a nightmare.
    – gowenfawr
    Jan 26, 2019 at 15:00
  • 6
    @gowenfawr But at least in this case, Plaid seems to be idiotic too. Retrying an authentication attempt that fails is just asking for trouble. It's possible that the banks have backed them into this by providing ambiguous error responses, some of which are legitimately retry-safe, but even then Plaid should be using more caution to avoid this worst case scenario. Mar 22, 2019 at 14:00
2

Plaid has become safer to use with their my.plaid.com portal (in beta as of November 2021), which you can use to manage your connections.

You need to sign up with your phone number, and Plaid will tell you right away if it has any connections linked to it. (I did attempt to sign up and got "We didn’t find apps or accounts connected to XXXX", even though it's the number I use with all my financial institutions, and I do recall giving up on the safer microdeposits option due to time constraints once.)

You can also send a data access or deletion request.

I went through Plaid's access request procedure to see what data Plaid had on me. TL;DR - completely useless.

They had an... interesting KYC process. It requested only sane PII (ID but with the address obscured; no SSN) but not so sane data:

"A complete list of financial institutions (e.g., banks or brokerage firm names) you have currently or previously connected via Plaid."

So they were requesting what I was trying to find out. I've been using all sorts of financial apps for many years. How could I possibly provide a complete list of those I've ever connected via Plaid? Also, they asked for all of this, including the picture of the ID, over insecure email. No secure dropbox was provided.

In the end I received an archive with my data. It was in JSON format (which may be slightly cryptic for those less technical), and... completely useless.

The data Plaid had on me was my own bank accounts. Thank you very much, I know about those. What I wanted to know is what other financial apps and services knew about me, but that was completely missing.

All in all, requesting my data from Plaid was a giant waste of time.

3
  • 1
    Thank you for this description of your experiences, but it leaves me puzzled over one thing: you begin by saying "Plaid has become safer to use with their my.plaid.com portal..." but the remaining paragraphs are all about ways that it seems useless at best, while introducing additional risks. Furthermore, given what you report about how it handles access requests, is there any reason to think that deletion requests will be effective, useful and in compliance with data protection laws? It is not clear to me how my.plaid.com has made things safer.
    – sdenham
    Feb 19, 2022 at 13:32
  • I don't have enough cred to answer, but yes, you are correct that the data is basically just your transactions. They are hoping other companies can put that information to more detailed use. A lot of the banks offer OAuth integrations nowadays, but I'd guess about 10% of banks do not have and may not ever be bothered to provide an auth mechanism that doesn't involve you sliding the password. Check out the API docs for the Plaid Linker for a lot more information on how this process works. You can scope down access rights nowadays, and changing your password will disrupt Plaid's access. Dec 31, 2022 at 0:11
  • If it is kind enough to let me post links, this is the Linker I was referring to. It is responsible for the login and authorization workflow to connect accounts. plaid.com/docs/link Dec 31, 2022 at 0:11
-9

Yes, Plaid is safe. They don't store the password, they create a "bank relation" between the bank account and the service that is using Plaid with tokens. And if the customer changes his bank account password, the bank notifies Plaid of this NOC (notice of change), and you will have to reauthenticate on the Plaid link to get your bank account relation reconnected.

12
  • 21
    Can you provide references to the information that they use tokens, not passwords? That would certainly be the ideal way for them to do things, but other than services like Plaid, there is little indication that banks are willing/able to provide such tokens to third party services. Mar 22, 2019 at 14:19
  • 17
    I believe the Plaid "tokens" you see referred to are the arbitrary token Plaid generates and hands to the business that is using Plaid as a middleman; the business will then use that token to tell Plaid which bank account to access (which Plaid will then access using the stored credentials they have, in most cases). So, yes, tokens exist, but not between Plaid and the banks; between Plaid's customers and Plaid.
    – gowenfawr
    Mar 22, 2019 at 14:32
  • 6
    I don't buy that for a second. They claim that "Plaid supports ~9,600 financial institutions in the U.S. and Canada - from national banks to local credit unions." There's no way they integrated with each individual institution using some sort of token exchange. I'd bet that a lot of the smaller banks and credit unions have no dev team to speak of and wouldn't be able to implement such systems.
    – Glyoko
    Oct 2, 2019 at 17:53
  • 12
    @ToddDabney - as the CEO of an identity provider (FusionAuth) that works with many banks, I have a hard time believing this. There isn't some magical "token" that every mobile application uses. Some use server-side sessions in fact and those tokens expire quickly. Some use JWTs which similarly expire quickly. Very few banks use refresh tokens or other long lived tokens because of the security risks. Claiming that Plaid reversed engineered 10,000 mobile apps and somehow figured out how to generate long-lived tokens is extremely hard to believe. I'll believe it when Plaid publishes it.
    – voidmain
    Sep 17, 2020 at 14:45
  • 4
    @ToddDabney - but that was mainly my point. Even if most banks use a white-labeled app, Plaid could never use tokens in order to manage a connection to your bank. The reason is that most banks have short sessions (like 10-15 minutes), and those are managed by a token. If plain uses that token, then they would be "logged out" after 10 minutes. Obviously, this won't work. Instead, they are likely storing the plain-text passwords and screen-scraping to access the bank accounts. This is a horribly insecure solution.
    – voidmain
    Sep 21, 2020 at 22:39

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .