Security Advisories (2)
CVE-2026-72889 (2026-08-19)

Net::OAuth versions before 0.33 for Perl allow the sender to choose the signature algorithm in verify. verify resolves the signature method class from the signature_method parameter of the incoming message. signature_method is required on every request, so the algorithm used to check a signature is chosen by whoever sent it, and nothing lets the verifying party pin the method instead. When a message names HMAC-SHA1 or HMAC-SHA256, the key is derived from consumer_secret and token_secret rather than from the key the provider deployed. A provider deployed on RSA-SHA1 holds only the consumer public key, and RFC 5849 does not use consumer_secret for that method, so the required parameter is filled with a placeholder. A client that names HMAC-SHA1 instead has its signature checked against that placeholder, so a guessable one is enough to forge requests for any consumer key and token.

CVE-2026-75589 (2026-08-19)

Net::OAuth versions before 0.33 for Perl check HMAC-SHA1, HMAC-SHA256 and PLAINTEXT signatures with a non-constant-time comparison in verify. Each of the three compares the signature carried in the message against the locally computed one with the eq operator, which returns as soon as the two strings differ. The time taken to reject a signature varies with the length of the matching prefix. RSA-SHA1 is not affected, as it verifies through the RSA key object rather than by comparing strings. A client that can submit messages and time the replies may recover a valid signature one byte at a time rather than searching the whole signature space. Under PLAINTEXT the value compared against is the signature key itself, so the search recovers consumer_secret and token_secret.

Changes for version 0.32

  • Security
    • The Net::OAuth smart_require function no longer memoizes failures, which allowed attackers to exhaust memory with requests for invalid signature methods. CVE-2026-72888
    • Net::OAuth::Client no longer allows silent downgrades from OAuth 1.0a to 1.0 when the remote provider drops the oauth_verifier. The behavior can be re-enabled with the allow_v1a_downgrade option. CVE-2026-72887
  • Bug Fixes
    • RSA-SHA1 now pins PKCS#1 v1.5 padding and the SHA-1 hash rather than inheriting Crypt::OpenSSL::RSA's defaults, which have drifted (SHA-256 in 0.29_01, RSA-PSS in 0.35). Against 0.35 and later this produced RSA-PSS signatures that no RFC 5849 3.4.3 compliant server will accept. Reported as Debian #1142954.
  • Other
    • Switched to use Crypt::SysRandom for generating random bytes.
  • Tests
    • t/02-rsa.t asserts the signature base string separately from the signature, so a failure distinguishes base-string construction from the crypto layer.
    • t/02-rsa.t skips with a diagnostic on Crypt::OpenSSL::RSA 0.35 through 0.37, which disabled the PKCS#1 v1.5 padding that OAuth RSA-SHA1 requires; 0.38 re-enabled it.
  • Toolchain
    • Recommend Crypt::OpenSSL::RSA 0.38 or later for RSA-SHA1.
    • Declared MIN_PERL_VERSION as 5.008001, the floor imposed by URI and MIME::Base32.
    • Added GitHub Actions CI covering perl 5.16 through latest, and a matrix pinning the Crypt::OpenSSL::RSA versions that bracket the padding change behind Debian #1142954.
    • Added author tests under xt/, guarded by AUTHOR_TESTING.
    • Corrected the AUTHOR metadata, which credited only the current maintainer. Keith Grennan is the author and copyright holder; Robert Rothenberg maintains.
    • Updated .mailmap and the AUTHOR POD to canonicalise on reachable addresses, as cpan.org no longer forwards mail.
    • MANIFEST now ships CONTRIBUTING.md, and no longer lists the generated META.json and META.yml, which distmeta writes into the distribution directory regardless.
  • Documentation
    • Removed the Dancer demo application and rewrote the SYNOPSIS and README to be framework-agnostic. The demo linked to a domain that is now parked.
    • Added =encoding utf8 to Net::OAuth, which had a non-ASCII contributor name in its POD without one.
  • Documentation
    • Added missing version and timestamp to Changes for v0.31.
    • Added missing acknowledgement to Changes for v0.31.
    • Added CONTRIBUTORS section to the POD.
    • Added a "How to Contribute" document.

Modules

OAuth 1.0 for Perl
OAuth Access Token
An OAuth protocol request for an Access Token
An OAuth protocol response for an Access Token
OAuth 1.0A Client
An OAuth Consumer Request
base class for OAuth messages
An OAuth protocol request for a Protected Resource
base class for OAuth requests
An OAuth protocol request for a Request Token
An OAuth protocol response for an Request Token
base class for OAuth responses
HMAC_SHA1 Signature Method for OAuth protocol
HMAC_SHA256 Signature Method for OAuth protocol
PLAINTEXT Signature Method for OAuth protocol
RSA_SHA1 Signature Method for OAuth protocol
request for OAuth User Authentication
An OAuth protocol response for an Access Token
An OAuth protocol request for an Access Token
An OAuth protocol request for a Request Token
An OAuth protocol response for an Request Token
An OAuth protocol response for an Access Token