WP Manifestindependent plugin directory
manifest / media / attachment-revisions

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

Enables attachment revisions and media file swapping

★ 0stars
24kcomposer installs
3.0.13latest · 1mo ago

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/helsingborg-stad/attachment-revisions/archive/refs/heads/main.zip

On Packagist as helsingborg-stad/attachment-revisions:

composer require helsingborg-stad/attachment-revisions
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Media Replacer

Replace media files in the media gallery (attachments)

Releases

11 releases.

Tag
Published
3.0.13 latest
Sep 9, 2026 1mo ago
Jan 20, 2026 9mo ago
Nov 20, 2025 11mo ago
Aug 14, 2025 1 year ago
Aug 13, 2025 1 year ago
Sep 10, 2024 2 years ago
Sep 10, 2024 2 years ago
Dec 5, 2023 2 years ago
Sep 28, 2023 3 years ago
Sep 27, 2023 3 years ago
Sep 26, 2023 3 years ago

These releases are tags only. The author does not attach a packaged zip, so there are no download counts to report.

D+ grade

Security

Attatchment Revisions 3.0.13 · audited by WP Registry

High-severity findings.

1 high 1 medium
Audited release
3.0.13
Findings
2
Worst severity
high
Content hash
8cc919cbc14585d552d8f047…

Findings

  • high Missing capability and nonce on AJAX attachment/post force-delete

    missing_capability

    The action wp_ajax_attachment_revisions_remove_attachment maps to removeAttachment(), which reads $_POST['id'] and calls wp_delete_post($id, true) with no current_user_can() and no nonce/check_ajax_referer. Any authenticated user, including a Subscriber, can permanently delete arbitrary posts, pages, or attachments by POSTing to admin-ajax.php.

    source/php/App.php:26-26,294-313

    Recommendation

    Require a capability such as delete_post / delete_attachment for the target ID, verify a dedicated AJAX nonce, and reject requests that fail either check before calling wp_delete_post.

  • medium Unvalidated filesystem path in media restore allows arbitrary file copy into attachment

    file_access

    On edit_attachment, restoreRevision() uses $_POST['media-replace-restore'] directly as the source path for copy() into the current attachment file after only file_exists(). There is no check that the path is under wp_upload_dir() or belongs to this attachment's revision meta. A user who can edit an attachment can supply paths like wp-config.php or other readable files and then download the attachment, disclosing server-local content. Core attachment save nonce still applies, so this is not unauthenticated CSRF, but path validation is absent.

    source/php/App.php:46-76

    Recommendation

    Resolve and realpath() the restore path, require it to be listed in the attachment's _media-replace-revisions meta (or under uploads), and reject paths outside that allowlist.

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.