[wp-meta] [Making WordPress.org] #5352: Plugin Security - Add email confirmation prior to releases being processed
Making WordPress.org
noreply at wordpress.org
Wed Aug 5 08:27:46 UTC 2020
#5352: Plugin Security - Add email confirmation prior to releases being processed
------------------------------+--------------------
Reporter: dd32 | Owner: (none)
Type: enhancement | Status: new
Priority: normal | Milestone:
Component: Plugin Directory | Keywords:
------------------------------+--------------------
With auto-updates in WordPress 5.5 becoming as simple as a few mouse
clicks, it's time to take a closer look at the Plugin Release flow, to
mitigate potential disasters such as accidental and malicious plugin
releases.
I'd like to propose that we add an extra '''optional''' step into the
release flow for plugins, not intended on adding friction, but intending
to ensure that plugin releases only get made when they're intended to. A
simple Email confirmation.
How it would work:
- A committer would be able to click a link in an email triggered by
their commit that updated their `Stable Tag` value
- That link would be a special page on the plugin repo (only accessible
via the email link, that link would be timed so maybe 24hrs? expiring once
used?)
- That page would have a confirm button, that signifies the release is
intentional (and not just an accident on a committers part, error on
WordPress.org's part, and definitely not by someone else who had managed
to spot the committers 64-digit crazy-random password by in a video from a
WordCamp ..last year).
This would be optional for most plugins, but required for high-usage
plugins (after initial opt-in testing proved reliable). I'm not sure what
cut-off point should be used for that, 1 Million installs? 100k installs?
The plugins team would be able to bypass the release restrictions to
approve a release in an emergency, but only when doing so through a secure
tunnel (on WordPress.org, that's `is_super_admin()`). They would be the
only ones who could disable this for a plugin as well once enabled.
Multi-factor authentication (See #77) is often touted as a solution here,
but this is intended on being larger than just protection against a single
compromised account, consider this protection against malicious intent as
well.
By requiring that multiple people sign off on a release we can ensure that
we only ship code to WordPress users that those who support a plugin
intended on being released, and not just by an accident or disgruntled
employee while everyone else is asleep.
Implementation details and sticky points:
1. This would be implemented by seeing the `Stable Tag` header change in
the plugins readme.
2. For plugins with it enabled, initially I'm thinking they'll be required
to use tags for releases, releases from trunk will no longer be an option.
This is so we can use the `Stable Tag` change as the trigger for
confirmation.
3. Changes to tags after the release is made will be forbidden (or at
least ignored), that's so a malicious tag change is ignored. Yes, I know
about `Tested Up To` we'll figure something out.
4. Once opt'd in, only the plugins team can disable it for a plugin. This
is to avoid a compromised account being able to disable it.
5. Ideally, the committer who committed the release would not be able to
be the sole person who approves the release as well, which would
effectively make this always a 2+ person scenario. Maybe an exception
would be the same person can sign it off, as long as it's not forcefully
enabled for the plugin due to level of usage.
6. The confirmation-of-release page would list all of the releases that
are pending that the logged in user can approve (and the status of those
releases), in order to make it easier on those who manage multiple plugins
to bulk-approve releases at the same time.
7. Only those who have been a committer on a plugin for >1 week should be
able to sign off a release. (Also, Committers should know when a new
committer is added - #5351)
8. Commits to trunk would still be OK and not require sign-off as long as
they don't alter `Stable Tag`, that allows for plugins to preload their
strings into translate.wordpress.org or use it as their primary
development platform.
9. Release Pipelines and other tooling should remain unaffected, as long
as they use tags for releases. Authors would have an extra email
confirmation step, but that wouldn't break their release script I would
hope.
10. Email isn't perfect, and not all emails are received. That's going to
be frustrating for authors and the plugins team alike, so perhaps we can
allow a logged in user to trigger the email by an "admin alert" for a
pending action on their plugin page, or if they follow an expired link.
Thoughts? Have I missed something major here?
--
Ticket URL: <https://meta.trac.wordpress.org/ticket/5352>
Making WordPress.org <https://meta.trac.wordpress.org/>
Making WordPress.org
More information about the wp-meta
mailing list