Skip to content
CVE IDCVE-2026-63405GitHub advisory IDGHSA-5p54-whvp-x327

AnyCable: Pusher REST API Does Not Verify Request Body MD5 Enabling Signed-Request Replay with Arbitrary Body

CVE-2026-63405 (GitHub advisory GHSA-5p54-whvp-x327) is a medium-severity vulnerability with a CVSS 3.1 base score of 5.9, classed as Insufficient Verification of Data Authenticity (CWE-345), in github.com/anycable/anycable (Go). Affected versions: <= 1.6.14. It is fixed in 1.6.15.

Medium5.9Fix availableGitHub reviewed

Published 18 Sept 2026Updated 18 Sept 2026

5.9MediumCVSS 3.1
EPSS
0.17%higher than 6% of CVEs
Weakness (CWE)
  • CWE-345Insufficient Verification of Data Authenticity
KEV status
Not in KEV
Published
18 Sept 2026
Updated
18 Sept 2026
Ecosystem
  • Go
Assigned by (CNA)
GitHub_M

Summary

Source: OSV (GitHub advisory)

The Pusher-compatible REST API includes body_md5 in the HMAC signature string but never computes or verifies the MD5 of the received HTTP body, allowing anyone who observes a signed request to replay it with an entirely different body.

Details

In pusher/http.go, the Handler function extracts body_md5 from the URL query string (line 169) and includes it verbatim in stringToSign (line 175). It then verifies HMAC(stringToSign, secret) == auth_signature. After verification succeeds, handleEvents reads and parses r.Body (lines 201-212) without ever computing md5(body) and comparing it against the body_md5 that was signed. The Pusher protocol specification explicitly requires the server to verify this digest to prevent body-substitution attacks. There is also no auth_timestamp staleness check, so replays are valid indefinitely.

PoC

  1. Capture a legitimate signed POST to /apps/<app_id>/events?auth_key=K&auth_timestamp=T&auth_version=1.0&body_md5=LEGIT_MD5&auth_signature=SIG carrying body {"name":"safe-event","channel":"ch","data":"..."} (e.g., from TLS-terminating load-balancer logs).
  2. Send a new request with the same query string parameters but a different body: {"name":"injected-event","channel":"admin","data":"malicious-payload"}
  3. The server accepts the request (HMAC over stringToSign matches the original) and broadcasts the injected event to all subscribers of admin.

Impact

An attacker who can read any single signed Pusher API request (from logs, a shared proxy, or a network tap) can broadcast arbitrary events to any channel indefinitely, potentially forging server-side events, corrupting application state, or delivering phishing messages to WebSocket clients.

Fix

After reading r.Body, compute hex(md5(body)) and compare it to the body_md5 query parameter using a constant-time comparison before proceeding. Additionally, reject requests whose auth_timestamp is more than 600 seconds from the current time.

Technical details

Source: GitHub Advisory Database

CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N

Medium5.9Base score from GitHub Advisory Database

Attack Vector AV
Network
Attack Complexity AC
High
Privileges Required PR
None
User Interaction UI
None
Scope S
Unchanged
Confidentiality C
None
Integrity I
High
Availability A
None

CISA SSVC decision points

Exploitation
poc
Proof-of-concept code is public
Automatable
no
Needs manual steps per target
Technical impact
partial
Limited control of the affected system

CISA Coordinator assessment (SSVC 2.0.3) via CVE.org.

Affected packages

Source: OSV (GitHub advisory)

  • github.com/anycable/anycable
    Go
    pkg:golang/github.com/anycable/anycable
    Affected versions
    <= 1.6.14
    Fixed in
    1.6.15

Fix

Source: OSV (GitHub advisory)

Fix available

Upgrade to 1.6.15 or later.

Patch commits

  • d2cbadePatch commitgithub.com/anycable/anycable

    - pusher: fix handling body_md5, check auth_timestamp in REST API

    +91 −18 across 3 files

    • CHANGELOG.md+4 −0
    • pusher/http.go+46 −18
    • pusher/http_test.go+41 −0

Release commits

The commits each fixed release tag points at. They usually bump the version rather than contain the fix itself.

  • 6e7591cRelease commit1.6.15github.com/anycable/anycable

Vulnerability intelligence

References

Credits

Questions about CVE-2026-63405

What is the GHSA ID for CVE-2026-63405?
GitHub tracks CVE-2026-63405 as GHSA-5p54-whvp-x327.
What is the CVSS score of CVE-2026-63405?
CVE-2026-63405 has a CVSS 3.1 base score of 5.9 (Medium), vector CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N.
Which versions are affected by CVE-2026-63405?
github.com/anycable/anycable (Go): <= 1.6.14.
How do I fix CVE-2026-63405?
Upgrade to 1.6.15 or later. The fix is in commit d2cbade.
What is the Package URL (PURL) for CVE-2026-63405?
The affected package's PURL is pkg:golang/github.com/anycable/anycable.
Is CVE-2026-63405 exploited in the wild?
CISA's Known Exploited Vulnerabilities catalog doesn't list CVE-2026-63405. That means no confirmed exploitation has been catalogued, not that it is safe to leave unpatched. CISA's SSVC assessment rates exploitation as "poc". EPSS estimates a 0.17% chance of exploitation in the next 30 days, higher than 6% of CVEs.

Data sources

Upstream records

  • OSV (GitHub advisory)LoadedRaw JSON
  • GitHub Advisory DatabaseLoadedRaw JSON
  • OSV (CVE record)LoadedRaw JSON
  • CVE.orgLoaded
  • CISA KEV catalogLoaded

Fetched 5 days ago (8 Oct 2026, 22:44 UTC). Records refresh automatically after 24 hours.

Where each part of this page came from

Title and description
OSV (GitHub advisory)
Severity score
GitHub Advisory Database
Weakness (CWE)
GitHub Advisory Database
Affected packages
OSV (GitHub advisory)
Fix
OSV (GitHub advisory)
References
Computed by CVEminer
SSVC
CVE.org
KEV status
CISA KEV catalog
EPSS
GitHub Advisory Database

OSV and GitHub Advisory Database content is licensed CC BY 4.0. Values marked as computed or derived were calculated by CVEminer from the upstream data.