WP Manifestindependent plugin directory
manifest / content / geditorial

gEditorial WP Registry grade D+. High-severity findings · 2 findingsWP RegistryHigh-severity findings · 2 findingsOpen the reportD+

Our Editorial in WordPress

★ 2stars
221krelease downloads
3.35.1latest · 2mo ago

Install

Download geditorial-3.35.1.zip From the 3.35.1 release on GitHub, Aug 5, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/geminorum/geditorial/releases/download/3.35.1/geditorial-3.35.1.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Our Editorial in WordPress!

gEditorial is a fork in structure of EditFlow.

Included Modules

See wiki/Modules.

Included Packages

See assets/packages.

Installation

Grab the latest release from here.

See Installing Plugins.

Changelog

See CHANGES.md.

Contributing

See CONTRIBUTING.md.

Please log issues at here.

Releases

Newest 25 of 60 recorded releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
3.35.1 latest
Aug 5, 2026 2mo ago
geditorial-3.35.1.zip
17
Aug 1, 2026 2mo ago
geditorial-3.35.0.zip
5
Jun 27, 2026 3mo ago
geditorial-3.34.0.zip
6
Oct 28, 2025 11mo ago
geditorial-3.33.0.zip
13
Apr 15, 2025 1 year ago
geditorial-3.32.0.zip
18
Jan 23, 2025 1 year ago
geditorial-3.31.0.zip
13
Nov 25, 2024 1 year ago
geditorial-3.30.0.zip
7
Aug 11, 2024 2 years ago
geditorial-3.29.2.zip
18
Aug 9, 2024 2 years ago
geditorial-3.29.1.zip
4
Aug 4, 2024 2 years ago
geditorial-3.29.0.zip
4
Jul 5, 2024 2 years ago
geditorial-3.28.1.zip
12
Jun 30, 2024 2 years ago
geditorial-3.28.0.zip
8
Jun 7, 2024 2 years ago
geditorial-3.27.4.zip
7
May 24, 2024 2 years ago
geditorial-3.27.3.zip
6
Mar 31, 2024 2 years ago
geditorial-3.27.2.zip
10
Mar 29, 2024 2 years ago
geditorial-3.27.1.zip
6
Mar 29, 2024 2 years ago
geditorial-3.27.0.zip
7
Nov 5, 2023 2 years ago
geditorial-3.26.7.zip
15
Oct 4, 2023 3 years ago
geditorial-3.26.6.zip
8
Oct 1, 2023 3 years ago
geditorial-3.26.5.zip
7
Oct 1, 2023 3 years ago
geditorial-3.26.4.zip
5
Oct 1, 2023 3 years ago
geditorial-3.26.3.zip
6
Sep 30, 2023 3 years ago
geditorial-3.26.2.zip
8
Sep 30, 2023 3 years ago
geditorial-3.26.1.zip
5
Sep 29, 2023 3 years ago
geditorial-3.26.0.zip
9
All releases on GitHub →

No active-site estimate. Release downloads fell from a median of 942 per release to about 10, so sites most likely update through a channel other than these release assets, and the cohort method would only be counting stragglers. Method.

D+ grade

Security

gEditorial 3.35.1 · audited by WP Registry

High-severity findings.

2 high
Audited release
3.35.1
Findings
2
Worst severity
high
Content hash
938437e488a62a098cfb4280…

Findings

  • high Contributor+ can import, export, or delete all gEditorial options via Tools

    missing_capability

    The autoloaded Config module registers tools.php?page=geditorial-tools with capability editorial_tools. map_meta_cap maps that to edit_posts (Contributor/Author/Editor). Config resets $caps to [] so cuc('tools') is also editorial_tools/edit_posts. Visiting the page as Contributor renders tools_sub, which always opens a multipart form and prints a nonce (geditorial-general-tools) before render_tools_html. The UI then hides the dangerous cards behind current_user_can('manage_options') / edit_others_posts, but admin_tools_load() on POST sub=general only calls nonce_check — no manage_options. Tablelist::isAction('import_all_options') runs WordPress\Media::handleImportUpload() (wp_handle_upload with test_type false; no upload_files check) and update_option('geditorial_options', ...) with the JSON. download_all_options / download_active_options stream the option to the browser. delete_all_options calls delete_option with no super-admin check (the UI only shows that button to super admins). Observable as Contributor: GET tools.php?page=geditorial-tools, scrape the nonce, POST import_all_options with a JSON body that enables arbitrary modules and overwrites settings (including Remoted remote_token and restapi_restricted), or POST download_all_options / delete_all_options. Plugin::init_modules reads that option to decide which modules load.

    includes/Modules/Config/Config.php:17-27,170-188,497-567,676-710

    Recommendation

    Gate admin_tools_load POST actions with current_user_can('manage_options') (and keep delete_all_options as super-admin only). Register the Tools submenu with editorial_settings/manage_options, or restore Config::$caps['tools'] to manage_options so cuc('tools') and the menu cap match the UI. Do not emit a valid tools nonce on a page that Contributors can open.

  • high Dead Drops secret URL lets anyone mint a REST identity for an arbitrary user

    auth_bypass

    When the Dead Drops module is enabled (beta; GEDITORIAL_BETA_FEATURES defaults TRUE; not autoloaded), an editor creates a capability URL /{permalink}/deaddrop/{24-char-secret}?u={editor_id}. template_redirect compares the path secret to post meta _deaddrop_secret, then takes user ID from attacker-controlled ?u= (fallback gEditorial()->user()) and renders a Dropzone page whose REST URL is /wp-json/wp/v2/media?post={id}&author={u}&dropzone={phpass hash of secret|user|post|salt}. determine_current_user, on REST only, re-reads author/post/dropzone from the request, loads the same secret, and if the hash verifies returns (int)$author with no capability check and no binding that author must be the editor who created the drop. Anyone who has the secret (it is in the shared URL) can request ?u=1 (or any upload-capable user), receive a hash for that user, and POST wp/v2/media. WordPress rest_cookie_check_errors does not verify X-WP-Nonce when no auth cookie was used, so the impersonated user remains current; media create_item then runs as that user. Observable: open the drop URL with u set to an administrator who can upload_files, upload an attachment authored as that administrator onto the target post.

    includes/Modules/DeadDrops/DeadDrops.php:175-266,366-389

    Recommendation

    Bind the drop secret to a single intended user at creation time (store user_id in post meta; ignore ?u=/author). Mint the hash only for that stored user. On determine_current_user, require the request author to equal the stored user and still restrict the impersonation to creating attachments on that one post (and consider a custom REST endpoint with an allowlist of mime types instead of reusing /wp/v2/media as the target user). Do not let visitors pick an arbitrary WordPress user to impersonate.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.