WP Manifestindependent plugin directory
manifest / users / pressbooks-cas-sso

Pressbooks CAS Single Sign-On WP Registry grade B. Medium-severity findings · 2 findingsWP RegistryMedium-severity findings · 2 findingsOpen the reportB #2 in Users & Membership

CAS SSO Integration for Pressbooks.

★ 2stars
13krelease downloads
≈770active sites
15kcomposer installs
2.7.0latest · 7mo ago

Install

Download pressbooks-cas-sso-2.6.0.zip From the 2.6.0 release on GitHub, Jan 20, 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/pressbooks/pressbooks-cas-sso/releases/download/2.6.0/pressbooks-cas-sso-2.6.0.zip

On Packagist as pressbooks/pressbooks-cas-sso:

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

CAS Single Sign-On integration for Pressbooks.

Description

Plugin to integrate Pressbooks with Central AuthenticationService (CAS) single sign-on architectures.

Users who attempt to login to Pressbooks are redirected to the central CAS sign-on screen. After the user’s credentials are verified, they are redirected back to the Pressbooks network. If we match a Pressbooks user by CAS username (stored in user_meta table), the user is recognized as valid and allowed access. If no match, then try to match a Pressbooks user by email (and store a successful match in user_meta table for next time). If the CAS user does not have an account in Pressbooks, a new user can be created, or access can be refused, depending on the configuration.

Installation

composer require pressbooks/pressbooks-cas-sso

Or, download the latest version from the releases page and unzip it into your WordPress plugin directory: https://github.com/pressbooks/pressbooks-cas-sso/releases

Then, activate and configure the plugin at the Network level.

Read the integrations documentation for more info: https://docs.pressbooks.org/integrations/cas-sso/

Security Considerations

Set the PB_CAS_CERT_PATH environment variable to configure validation of the CAS server. Used by CURLOPT_CAINFO for peer and host verification:

putenv( 'PB_CAS_CERT_PATH=/path/to/cachain.pem' ); // Path to the CA chain that issued the CAS server certificate

Advanced Configuration

The email can be filtered, example: add_filter( 'pb_integrations_multidomain_email', function( $email, $uid, $plugin ) { /* Custom use case, return $email */ }, 10, 3 );

Because this plugin uses the fabulous apereo/phpCAS library, many other configuration variables can be tweaked.

Screenshots

Pressbooks CAS Administration.

Changelog

Please see the CHANGELOG file for more information.

Releases

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

Tag
Published
Assets
Downloads
2.7.0 latest
Mar 16, 2026 7mo ago
tag only
—
Jan 20, 2026 9mo ago
pressbooks-cas-sso-2.6.0.zip
286
Jun 12, 2024 2 years ago
pressbooks-cas-sso-2.5.0.zip
768
Oct 26, 2023 2 years ago
pressbooks-cas-sso-2.3.1.zip
768
Mar 8, 2023 3 years ago
pressbooks-cas-sso-2.3.0.zip
771
Nov 19, 2022 3 years ago
pressbooks-cas-sso-2.2.0.zip
771
Nov 1, 2022 3 years ago
pressbooks-cas-sso-2.1.0.zip
770
Sep 13, 2022 4 years ago
pressbooks-cas-sso-2.0.0.zip
768
May 4, 2022 4 years ago
pressbooks-cas-sso-1.2.4.zip
774
Aug 19, 2019 7 years ago
pressbooks-cas-sso-1.2.3.zip
782
May 13, 2019 7 years ago
pressbooks-cas-sso-1.2.2.zip
773
Apr 16, 2019 7 years ago
pressbooks-cas-sso-1.2.1.zip
774
Mar 26, 2019 7 years ago
pressbooks-cas-sso-1.2.0.zip
773
Oct 2, 2018 8 years ago
pressbooks-cas-sso-1.1.1.zip
782
Sep 11, 2018 8 years ago
pressbooks-cas-sso-1.1.0.zip
772
Jun 15, 2018 8 years ago
pressbooks-cas-sso-1.0.0.zip
778
Jun 7, 2018 8 years ago
pressbooks-cas-sso-0.4.1.zip
780
Jun 7, 2018 8 years ago
tag only
—
May 7, 2018 8 years ago
pressbooks-cas-sso-0.2.0.zip
782
May 7, 2018 8 years ago
pressbooks-cas-sso-0.3.0.zip
780

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

B grade

Security

Pressbooks CAS Single Sign-On 2.4.0 · audited by WP Registry

Medium-severity findings.

2 medium
Audited release
2.4.0
Findings
2
Worst severity
medium
Content hash
201203663a185dd8fd3eed5b…

Findings

  • medium CAS NetID matching uses unescaped LIKE wildcards and can log in the wrong WordPress user

    auth_bypass

    After phpCAS validates a ticket, matchUser() looks up pressbooks_cas_identity with SELECT user_id FROM usermeta WHERE meta_key = %s AND meta_value LIKE %s. The pattern is built as "{$net_id}|%" with no $wpdb->esc_like() (and no preg_quote of %/_). Identity rows are stored as "{net_id}|{unix_time}" by linkAccount(). WordPress $wpdb->prepare escapes quotes but not LIKE metacharacters, so a CAS principal containing '%' matches every linked user (get_var returns the first row, no ORDER BY) and '_' matches any single character (j_smith matches jasmith|<ts>; a_min matches admin|<ts>). handleLoginAttempt then calls programmatic_login() as that WP user without comparing the NetID as a literal. Realistic IdPs allow '_' in usernames; a '%' principal is enough for first-match takeover if the IdP (or a forged CAS response) will issue it. This is not SQL injection.

    inc/class-cas.php:424-431

    Recommendation

    Escape the NetID with $wpdb->esc_like() before wrapping it in the trailing % wildcard, e.g. $condition = $wpdb->esc_like( $net_id ) . '|%';. Prefer an exact prefix comparison (LIKE concat(esc_like(net_id), '|%')) or store NetID in its own meta/column and use '='. Do not use get_var without a deterministic ORDER BY if multiple rows can match.

  • medium CAS ticket validation disables TLS certificate checks by default

    insecure_config

    CAS::__construct() calls phpCAS::setNoCasServerValidation() unless the PB_CAS_CERT_PATH environment variable is set. phpCAS 1.6.1 then performs the serviceValidate/proxyValidate HTTPS request with CURLOPT_SSL_VERIFYPEER=0 and CURLOPT_SSL_VERIFYHOST=0. There is no admin UI for a CA bundle; the insecure branch is the default for any stock install. A network attacker on the path between the WordPress server and the configured CAS host (a common topology: cloud-hosted Pressbooks validating against on-campus CAS) can intercept ticket validation and return a forged CAS XML success for an arbitrary NetID. handleLoginAttempt will then match or provision that identity and issue a WordPress session. phpCAS itself traces that this configuration 'is not recommended for production use.' README documents the env var but the plugin still ships the fail-open default.

    inc/class-cas.php:146-151

    Recommendation

    Default to phpCAS::setCasServerCACert() using the system CA store (or require PB_CAS_CERT_PATH). Do not call setNoCasServerValidation() in production builds. Expose the CA path as a network-admin setting with a warning, and refuse to enable CAS rather than silently disabling peer verification.

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.