Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach application Slack callback endpoint
-
DeliverySend request with invalid signature
-
ExploitRead computed HMAC from error logs
-
ExecutionReplay request with recovered signature
-
ImpactBypass verification, deliver forged event
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A09:2025 - Security Logging & Alerting Failures
ASVS 5.0
V16 - Security Logging and Error Handling Log data sanitization
|
| Exploitation Conditions | Exploitation requires a specific combination: (1) the application uses slack-morphism 1.0.0-2.27.0 with its Axum (or Hyper) listener and the DEFAULT listener error handler, which logs SlackEventWrongSignatureError at error level including the public generated_hash field; (2) the attacker can send requests to the application's Slack callback/events endpoint; and (3) the attacker can read the application's or service's logs where the error is written. Given those, the attacker sends any chosen body with a deliberately invalid signature, recovers the correct HMAC from the log entry, and must replay the identical request within Slack's five-minute timestamp freshness window. Limiting factors that reduce real-world risk: the mandatory log-read access (an elevated/trusted position rather than purely remote-anonymous), the tight five-minute replay window (AC:H), dependence on the unmodified default error handler, and that applications using a custom error handler which suppresses the hash are not affected. No signing secret is needed, but the forged request is confined to the same body and timestamp for which the oracle leaked a signature. |
| Impact | This is a moderate, conditional-risk flaw rather than a drop-everything priority. The supplied CVSS 3.1 vector (AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:N, base 5.3 MEDIUM) is internally consistent with the mechanism: network-reachable (AV:N), but with high attack complexity (AC:H) because the attacker must win a race against the five-minute freshness window and already possess log-read access, and with required privileges (PR:L) reflecting that very need to read application/service logs. The headline impact is integrity (I:H) - forged, attacker-chosen requests pass signature verification and reach the protected callback - with no direct confidentiality or availability loss (C:N/A:N). No EPSS score, CISA KEV entry, or SSVC decision data was provided, so automatability and widespread-exploitation signals cannot be assessed from the input. No public exploit code is referenced, though the reporter (GitHub_M) states they reproduced the issue end-to-end against both the Axum and Hyper integrations in 2.26.0 and 2.27.0; reproduction by the researcher is not the same as a released weaponized PoC. The key real-world limiter, and the reason this is not critical, is the dual precondition: an attacker needs BOTH network access to the Slack callback endpoint AND read access to the service's logs. That log-access requirement typically implies an already-partially-trusted or compromised position (shared log aggregation, insider, or a secondary log-exposure bug), making this more of an exploit-chain primitive than a standalone internet-facing break. |
| Exploit ScenarioDerived | An attacker with the ability to read the target service's logs (e.g., via a shared logging/observability platform) sends a crafted request to the application's Slack callback endpoint carrying a deliberately invalid X-Slack-Signature. Slack Morphism's default Axum error handler logs the SlackEventWrongSignatureError, which contains the correct HMAC it computed for that exact body and timestamp. The attacker reads the valid signature from the log and replays the identical request within the five-minute freshness window, passing signature verification and delivering a forged Slack event to the protected callback without ever knowing the signing secret. The reporter confirmed end-to-end reproduction against the Axum and Hyper integrations, but no public exploit code is referenced. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 21, 2026
Slack Morphism 1.0.0 through 2.27.0 writes the correct Slack request HMAC into its error output when signature verification fails, so anyone who can both hit the app's Slack callback endpoint and read its application or service logs can use the verifier as a chosen-message HMAC oracle and replay a fully signed request within Slack's five-minute freshness window - without ever knowing the signing secret. The exposure only occurs in deployments using the default Axum or Hyper listener error handler, which logs SlackEventWrongSignatureError (including the public generated_hash field) at error level; applications with a custom handler that suppresses the hash are not affected. The vendor released 2.28.0 to remove the expected signature from the error type, and no public exploit code has been identified at time of analysis; real-world risk is bounded by the mandatory log-read access, the tight replay window, and the fact that a forged request is confined to the exact body and timestamp the oracle signed.
RemediationAI
Upgrade the slack-morphism crate to 2.28.0 (release v2.28.0, https://github.com/abdolence/slack-morphism-rust/releases/tag/v2.28.0), which removes the generated_hash field and truncates the received signature to an 11-character prefix per PR https://github.com/abdolence/slack-morphism-rust/pull/387 / commit ac95d0d4539d0eac548a8db99c51c0c1ae832756; note that this is a breaking API change if your code reads SlackEventWrongSignatureError.generated_hash or received_hash, so update any custom logging or metrics code accordingly. If immediate upgrade is not possible, replace the default listener error handler with one that matches on SlackEventSignatureVerifierError::WrongSignatureError and logs only a generic message plus body length and timestamp, never the error's Debug/Display output - the trade-off is reduced diagnostics for genuine signing-secret misconfiguration, which is exactly what the received-hash prefix previously helped triage. In parallel, restrict read access to application and service logs to the smallest possible set of operators, since any log reader becomes an HMAC oracle, and scrub or rotate existing log stores that may already contain generated hash: entries. Optionally rate-limit or network-restrict the Slack callback endpoint to reduce an attacker's ability to harvest signatures, though this is only defense in depth: Slack does not warrant a stable ingress range for all event delivery modes, so IP allowlisting can break legitimate traffic if applied too tightly. Confirming the fix requires the advisory's regression behavior - invalid requests must produce log output that contains neither the expected nor the full received signature.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in cargo, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Slack authenticates inbound Events API / interactivity traffic with a versioned HMAC-SHA256 scheme: the signing secret keys an HMAC over the string v0:{X-Slack-Request-Timestamp}:{raw_body}, sent as X-Slack-Signature, and verifiers must also reject timestamps older than five minutes to prevent replay. Slack Morphism's SlackEventSignatureVerifier::verify (src/signature_verifier.rs:46-59) correctly computes this expected signature before comparing it to the untrusted header, but on mismatch it populated SlackEventWrongSignatureError.generated_hash with the full correct HMAC and kept the full received hash in received_hash; the error type (src/signature_verifier.rs:182-199) derives Debug and implements Display to print both values. The Axum middleware (src/axum_support/slack_events_middleware.rs) propagates the error into the default listener error handler (src/listener.rs), which logs it at error level - the classic CWE-532 pattern of inserting sensitive authentication material into a log file. Because the logged value is the valid signature for attacker-chosen body/timestamp material, the error path converts the verifier into an oracle, and the leaked credential is directly reusable for the same message. The patch in PR #387 (commit ac95d0d) removes generated_hash entirely and truncates the received value to an 11-character prefix, with regression tests asserting neither the expected nor the full received hash appears in Display/Debug output. Affected packages are the Rust crate slack-morphism (CPE cpe:2.3:a:abdolence:slack-morphism-rust), versions 1.0.0 through 2.27.0, in the Axum and Hyper integrations.
Know when Slack Morphism Rust gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:N
AC:H for the five-minute replay race, PR:L because log-read access is required, I:H as forged events bypass verification, C:N/A:N as no data read or availability loss occurs.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Slack Morphism is a client library for Slack Web/Events API/Socket Mode and Block Kit. Versions 1.0.0 through 2.27.0 expose the correct Slack request HMAC when signature verification fails. For an invalid request, slack-morphism computes the correct signature for the attacker-controlled timestamp and request body and stores it in SlackEventWrongSignatureError.generated_hash. The error's Debug and Display representations expose that value, and the default Axum listener error handler logs it at error level. An attacker who can both reach the application's Slack callback endpoint and read its application/service logs can therefore use the verifier as a chosen-message HMAC oracle. The attacker can send an arbitrary request with an invalid signature, recover the correct signature from the resulting log entry, and resend the same request within the five-minute freshness window. The second request passes Slack Morphism's signature verification and reaches the protected application callback without the attacker knowing the Slack signing secret. Version 2.28.0 patches the issue.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
EUVD-2026-107388
GHSA-26w4-8w32-4x3v
NVD
CVE.org
EPSS
Exploit-DB