The Flaw
The inherent security flaw is introduced with the ProtonMail WebMail portal, the normal web application that we’ve all visited in the browser.
And the flaw is that it is relatively simple for ProtonMail to serve you a modified version of their web application or the underlying PGP implementation.
There is no way to cryptographically verify that you are getting the official version of the web client as
stored in their repository.
If PM decides to act maliciously, they can do so undetected. Unlike the mobile application who’s binaries get cryptographically signed to match the official codebase, there is no method to verify a web application.
Once they have your password, they can use it with the private key that they have stored for you to decrypt any communication you’ve ever made through ProtonMail.
Additionally, they can spoof email messages to others on your behalf.
PM also has a Encrypt-To-Outside feature, which allows you to send encrypted email to other email providers.
Not only are PM servers involved in this, but a third party, like Microsoft Outlook.
It works by redirecting the recipient to a PM page in which they type a encryption key that they should have previous outside knowledge of, and this key decrypts the message. They also receive the PM sender’s public key so that they can write a reply back.
This leaves many open attacks:
1. PM can once again replace the web application or PGP software to recover the original message and passcode.
2. PM can also give the recipient a different public key, one that they have the private key to, retrieving the reply for themselves, which they can once again reencrypt with the sender’s public key – completely undetected.
3. The third party mail server is free to do the same, sending their own URL, pretending to be PM, allowing them to harvest the encryption key, which allows them to get the original message. Once they have the original message, they can use it to derive the private key. Then they are able to encrypt the reply back to the sender using their public key.