[wp-trac] [WordPress Trac] #39309: Secure WordPress Against Infrastructure Attacks
WordPress Trac
noreply at wordpress.org
Mon Jul 15 19:48:23 UTC 2019
#39309: Secure WordPress Against Infrastructure Attacks
------------------------------------------+---------------------
Reporter: paragoninitiativeenterprises | Owner: pento
Type: task (blessed) | Status: closed
Priority: normal | Milestone: 5.2
Component: Upgrade/Install | Version: 4.8
Severity: critical | Resolution: fixed
Keywords: has-patch | Focuses:
------------------------------------------+---------------------
Comment (by paragoninitiativeenterprises):
@pento:
> Without trying to turn this into a bikeshedding ticket, are there
options available that are already built?
There aren't any in the PHP ecosystem, outside of PIE's work. (See also:
[https://github.com/paragonie/airship/blob/master/src/Engine/Keyggdrasil.php
Airship], which was designed from the ground up to be automatically
updated, securely.)
Outside of PHP, there is [https://theupdateframework.github.io/ The Update
Framework] which is chiefly concerned with solving the problem that
WordPress has already solved in this ticket. So that's not very helpful
either.
Mozilla uses a system they call
[https://wiki.mozilla.org/Security/Binary_Transparency Binary
Transparency] which piggybacks on Certificate Transparency to sign new
releases. It's a clever use of existing technology, but going that route
would probably require a partnership with the ISRG (a.k.a. Let's Encrypt).
Ultimately, secure code delivery is as much an important problem as it is
a woefully neglected one. And none of the solutions we're aware of have
attempted to tackle it at the ecosystem level before (i.e. to enable
individual developers to manage their own keys and sign their own updates,
rather than just a central body).
We're breaking new ground here, and it's important to get it right
(especially if other projects look to WordPress for inspiration or
guidance on how to deploy such a system at scale).
@withinboredom:
> Verification of these blocks takes some time. Having lots of them
results in an indeterminate amount of time to do so. This could mean that
a DOS is as simple as doing many releases.
...
> Another DOS attack vector (that's used in the wild with GPG, I can't
recall the name of it right now), is to simply sign a key with hundreds,
or even thousands of other randomly generated keys. Verifying the
signatures takes time and can even keep a very powerful computer busy for
quite a while (months?).
In the scheme I proposed, the only system that can write to the ledger is
the update server. We can throttle writes to the ledger at that layer if
someone is trying to abuse the system.
Additionally, Ed25519 signature verification is very fast (with ext/sodium
installed, which I certainly hope it *would* be on the WordPress backend
infra). You can squeeze thousands of such verifications in a second. This
isn't anything like a blockchain with a 7 tx/s bottleneck.
If Chronicle is selected as the cryptographic ledger, it's worth noting
that Chronicle uses a hash chain data structure rather than a Merkle tree.
The main implication here is: Writes are faster and it uses less memory.
Since writes are centralized (but verification is decentralized), a hash
chain is appropriate. (You'd want a Merkle tree in a decentralized
publishing.)
-----
To move forward, we just need answers to the following questions:
1. Does WordPress want a solution sooner-than-later? (This answer will
dictate Paragon's resource allocation into this initiative.)
2. How much third party review will be satisfactory for any
designs/implementations we propose?
3. Bonus: Would any of the companies that rely on WordPress be willing to
hire auditors to provide additional third party review if need be?
This might be a good topic to ask during the weekly dev meeting on
Wednesday, if you'd like to wait until then before answering.
I've already pinged a couple colleagues for their feedback on this design.
I hope if they see any sources of concern with Gossamer's design, they'll
chime in directly. If they opt to send me any feedback privately, I'll
share it here as soon as I've received and understood their issues.
(Transparency is vital for these sorts of designs.)
--
Ticket URL: <https://core.trac.wordpress.org/ticket/39309#comment:94>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list