WP Manifestindependent plugin directory
manifest / security / pressable-onepress-login

Pressable OnePress Login WP Registry grade B. Medium-severity findings · 2 findingsWP RegistryMedium-severity findings · 2 findingsOpen the reportB #9 in Security

Pressable One Click Login WordPress Plugin

★ 1stars
3krelease downloads
≈60active sites
1.4.0latest · 6mo ago

Install

Download pressable-onepress-login.zip From the 1.4.0 release on GitHub, Apr 10, 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/pressable/pressable-onepress-login/releases/download/1.4.0/pressable-onepress-login.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Pressable Plugin

Pressable OnePress Log In Plugin

Setup for development

  • Install Visual Studio Code

  • Install Composer

    brew install composer
  • Open Visual Studio Code Terminal Install code sniffer

    composer require "squizlabs/php_codesniffer=*"
  • Git Clone the WordPress Coding Standards Cloned not into project but a directory higher so it can be used by multiple projects

    git clone git@github.com:WordPress/WordPress-Coding-Standards.git wordpress_coding_standards
  • Set WordPress Coding Standards in installed paths for PHPCS Be sure to use full path to cloned project location.

    ./vendor/bin/phpcs --config-set installed_paths /Users/<username>/Development/Pressable/wordpress_coding_standards
    
    Using config file: /Users/paultrott/Development/Pressable/plugin-test/vendor/squizlabs/php_codesniffer/CodeSniffer.conf

Config value "installed_paths" updated successfully"


* Add WordPress as the standard
Update the Visual Studio Code settings file

// Mac Path ~/Library/Application\ Support/Code/User/settings.json


Add setting to file for global setting of standard

"phpcs.standard": "WordPress"


* Verify WP coding standards are configured correctly

./vendor/bin/phpcs -i

The installed coding standards are MySource, PEAR, PSR1, PSR2, PSR12, Squiz, Zend, WordPress, WordPress-Core, WordPress-Docs and WordPress-Extra


* Install additional composer packages
This will resolve some missing package errors.

composer require phpcsstandards/phpcsutils:@alpha composer require phpcsstandards/phpcsextra:@alpha


* Test the code sniffer

phpcs --standard=WordPress .php`


* Sample test localhost URL

http://localhost:8888/wordpress/wp-login.php?mpcp_token=MS0wZWQ1MzZlYjNlY2ZhMWJiNmQ0MmQwY2MxYTdkYTFkNmRlNjNiOTkyNTU5NzYzZDRhYjM4NWI5ZTE2ZmU5MWUw


## Customizing Redirects in Pressable OnePress Log In Plugin
To tailor the redirect behavior of the plugin, you can utilize the filters. These filters allow you to specify allowed hosts and set custom redirect URLs in case of plugin errors. 
Below is a guide on how to implement these filters. Remember, this code should be added to an MU (Must-Use) plugin.

#### Step 1: Create Your Custom Function
You will write a custom function to modify the redirect behavior. 
This function can have any name that makes sense for your context. 
For our example, we'll name it `customize_onepress_redirects`.

#### Step 2: Add the Code to an MU-Plugin
Add the following code to your MU-plugin file. If you don't have 
an MU-plugin, you can create one in the wp-content/mu-plugins directory 
of your WordPress installation.

```php
<?php

add_action('muplugins_loaded', 'customize_onepress_redirects');

function customize_onepress_redirects() {
    add_filter('onepress_login_custom_redirect_url', 'custom_redirect_url_function', 10, 3);
    add_filter('onepress_login_additional_hosts', 'custom_allowed_hosts_function');

    function custom_allowed_hosts_function($default_hosts) {
        // Add your custom hosts here
        $default_hosts[] = "yourcustomdomain.com";
        return $default_hosts;
    }

    function custom_redirect_url_function($default_redirect_url, $site_id, $user) {
        // Implement your custom logic to determine the redirect URL
        return "https://yourcustomdomain.com";
    }
}

Releases

12 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
1.4.0 latest
Apr 10, 2026 6mo ago
pressable-onepress-login.zip
500
Jan 30, 2024 2 years ago
pressable-onepress-login.zip
1,570
Jan 24, 2023 3 years ago
pressable-onepress-login.zip
851
Jan 5, 2023 3 years ago
pressable-onepress-login.zip
56
Jan 5, 2023 3 years ago
pressable-onepress-login.zip
7
Jan 3, 2023 3 years ago
pressable-onepress-login.zip
12
Dec 28, 2022 3 years ago
tag only
—
Dec 19, 2022 3 years ago
tag only
—
Dec 19, 2022 3 years ago
tag only
—
Dec 15, 2022 3 years ago
tag only
—
Dec 15, 2022 3 years ago
tag only
—
Dec 5, 2022 3 years ago
tag only
—

Active-site estimate ≈60 comes from the median of recent superseded releases. Method.

B grade

Security

Pressable OnePress Login 1.4.0 · audited by WP Registry

Medium-severity findings.

2 medium
Audited release
1.4.0
Findings
2
Worst severity
medium
Content hash
68c9fa68bc0c6468a591fa12…

Findings

  • medium Unauthenticated destruction of pending OnePress SSO tokens

    missing_auth

    GET/POST wp-login.php?mpcp_token= is handled on plugins_loaded with no capability or nonce check. The handler base64-decodes the parameter, explode('-')s it into user_id, token, site_id, user_agent, constructs WP_User from the first field (numeric ID, or login name when non-numeric — so 'admin' works), then immediately delete_user_meta($user->ID, 'mpcp_auth_token') before testing emptiness, expiry, User-Agent, or md5(token). Pressable's API plants that meta as a 30-second one-time secret (POST /v1/sites/{id}/one_press_login). Any unauthenticated visitor who sprays base64('{id}-x-x-x') for common IDs/logins therefore burns a live SSO attempt and learns from the redirected one_click_error whether a pending token was present ('User not found' vs expired/UA/invalid). Password login still works; the blast is denial and oracle of the control-panel magic login, not a session. The same delete-first order also means a stolen URL and a junk request racing the victim will invalidate the secret even when the junk token cannot log in.

    class-pressable-onepress-login-plugin.php:22-40

    Recommendation

    Do not delete mpcp_auth_token until after expiry, User-Agent, and hash_equals(md5($token), $meta['value']) all succeed. Reject non-existent users before touching meta. Rate-limit failures per IP/user_id and return a single generic error so presence of a pending token is not oracled. Keep the post-success delete (single use).

  • medium OnePress User-Agent binding is taken from the URL, not stored meta

    auth_bypass

    Pressable documents that the generated SSO URL 'must' be visited by a browser whose User-Agent is an exact match for the user_agent passed into POST /v1/sites/{id}/one_press_login. The plugin implements that check as md5($_SERVER['HTTP_USER_AGENT']) !== $user_agent, where $user_agent is the fourth hyphen-separated field of the attacker-controlled mpcp_token string. Stored user meta only contains ['exp'] and ['value'] (md5 of the secret); the UA hash is never persisted. Anyone who obtains a still-valid URL (API JSON, proxy logs, a slow custom integration inside the 30s TTL) can base64-decode it, replace the fourth field with md5 of their own User-Agent, re-encode, and complete wp_set_auth_cookie as the target Administrator without spoofing the original UA. The md5 comparison is also not hash_equals, but single-use plus delete-first currently prevents timing use. This does not mint a session without the platform-issued secret; it removes the only documented stolen-URL binding.

    class-pressable-onepress-login-plugin.php:77-95

    Recommendation

    Store the User-Agent hash (or a HMAC of it) inside mpcp_auth_token alongside exp/value when the control plane plants the secret, and compare the request UA to that stored value with hash_equals. Do not trust a UA digest carried in the URL. Prefer a HMAC over the whole token payload keyed by a site secret so fields cannot be rewritten independently.

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.