CVE-2026-113799
Slack Morphism verifier errors disclose valid HMACs in the logs
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.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
5.3
Slack Morphism verifier errors disclose valid HMACs in the logs
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.
- Record
CVE-2026-113799- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-532
- Updated
- 2026-11-02
EUVDEUVD-2026-107388
5.3
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.
- Record
EUVD-2026-107388- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-26w4-8w32-4x3v
5.3
Slack Morphism verifier errors disclose valid HMACs in the logs
Summary
Slack Morphism exposes 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.
I reproduced this end-to-end against both the Axum and Hyper integrations in slack-morphism 2.26.0 and 2.27.0.
Details
The vulnerability is in Slack Morphism's request signature verification error path.
In src/signature_verifier.rs, SlackEventSignatureVerifier::verify computes the expected signature before comparing it with the untrusted X-Slack-Signature supplied by the request.
On a mismatch, the implementation creates a SlackEventWrongSignatureError containing the complete correct signature in its public generated_hash field.
Relevant source path:
src/signature_verifier.rs:46-59
The error type is defined around:
src/signature_verifier.rs:182-199
generated_hash is a public String; the type derives Debug, and its Display implementation also prints the generated signature.
The resulting source-to-sink path is:
SlackEventSignatureVerifier::verifycomputes the expected HMAC for the attacker-controlled timestamp and raw request body.- Signature verification fails because the attacker initially sends an invalid signature.
- Slack Morphism places the correct expected value in
SlackEventWrongSignatureError.generated_hash. - The error's
DebugandDisplayrepresentations reveal that HMAC. - The Axum middleware propagates/formats the error through
src/axum_support/slack_events_middleware.rs. - The default listener error handler in
src/listener.rslogs the error at error level. - The attacker reads the generated HMAC from the logs.
- The attacker resends the identical timestamp and body using the disclosed value as
X-Slack-Signature. - Slack Morphism accepts the request and executes the protected callback.
The Hyper path is also affected. src/hyper_tokio/hyper_ext.rs propagates the verifier error as a service error, and formatting that error similarly exposes the generated signature.
The disclosed value is exactly the credential required to authenticate the corresponding request:
v0=hex(HMAC-SHA256(signing_secret, "v0:" || timestamp || ":" || raw_body))
There is no weakness in HMAC-SHA256 or the constant-time comparison itself. The vulnerability is that the expected authentication value is disclosed through the verifier's error path.
Affected versions
I reproduced the vulnerability against:
slack-morphism2.26.0slack-morphism2.27.0- current
masterat audit time:e3b3ecabf99dfcf6c3548a42fba89fbfa510d21c
Git history indicates that the public generated_hash field was introduced in:
9bf623bd51c6a9ef0cd22d842cc707a3311f1f22
and appears to have existed since v0.10.0. Since versions before 2.26.0 are unsupported and were not dynamically tested during this assessment, I am reporting the independently validated supported range as:
>= 2.26.0, <= 2.27.0
No patched release is currently available.
PoC
The PoC uses only localhost and a synthetic signing secret.
Tested environment:
slack-morphism = 2.27.0
Rust 1.98.1…
- Record
GHSA-26w4-8w32-4x3v- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-532
- Updated
- 2026-11-02
NVD
5.3
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.
- Record
CVE-2026-113799- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-532
- Updated
- 2026-11-02
OSV
5.3
Slack Morphism verifier errors disclose valid HMACs in the logs
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.
- Record
CVE-2026-113799- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-532
- Updated
- 2026-11-02
OSVGHSA-26w4-8w32-4x3v
5.3
Slack Morphism verifier errors disclose valid HMACs in the logs
Summary
Slack Morphism exposes 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.
I reproduced this end-to-end against both the Axum and Hyper integrations in slack-morphism 2.26.0 and 2.27.0.
Details
The vulnerability is in Slack Morphism's request signature verification error path.
In src/signature_verifier.rs, SlackEventSignatureVerifier::verify computes the expected signature before comparing it with the untrusted X-Slack-Signature supplied by the request.
On a mismatch, the implementation creates a SlackEventWrongSignatureError containing the complete correct signature in its public generated_hash field.
Relevant source path:
src/signature_verifier.rs:46-59
The error type is defined around:
src/signature_verifier.rs:182-199
generated_hash is a public String; the type derives Debug, and its Display implementation also prints the generated signature.
The resulting source-to-sink path is:
SlackEventSignatureVerifier::verifycomputes the expected HMAC for the attacker-controlled timestamp and raw request body.- Signature verification fails because the attacker initially sends an invalid signature.
- Slack Morphism places the correct expected value in
SlackEventWrongSignatureError.generated_hash. - The error's
DebugandDisplayrepresentations reveal that HMAC. - The Axum middleware propagates/formats the error through
src/axum_support/slack_events_middleware.rs. - The default listener error handler in
src/listener.rslogs the error at error level. - The attacker reads the generated HMAC from the logs.
- The attacker resends the identical timestamp and body using the disclosed value as
X-Slack-Signature. - Slack Morphism accepts the request and executes the protected callback.
The Hyper path is also affected. src/hyper_tokio/hyper_ext.rs propagates the verifier error as a service error, and formatting that error similarly exposes the generated signature.
The disclosed value is exactly the credential required to authenticate the corresponding request:
v0=hex(HMAC-SHA256(signing_secret, "v0:" || timestamp || ":" || raw_body))
There is no weakness in HMAC-SHA256 or the constant-time comparison itself. The vulnerability is that the expected authentication value is disclosed through the verifier's error path.
Affected versions
I reproduced the vulnerability against:
slack-morphism2.26.0slack-morphism2.27.0- current
masterat audit time:e3b3ecabf99dfcf6c3548a42fba89fbfa510d21c
Git history indicates that the public generated_hash field was introduced in:
9bf623bd51c6a9ef0cd22d842cc707a3311f1f22
and appears to have existed since v0.10.0. Since versions before 2.26.0 are unsupported and were not dynamically tested during this assessment, I am reporting the independently validated supported range as:
>= 2.26.0, <= 2.27.0
No patched release is currently available.
PoC
The PoC uses only localhost and a synthetic signing secret.
Tested environment:
slack-morphism = 2.27.0
Rust 1.98.1…
- Record
GHSA-26w4-8w32-4x3v- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-532
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
slack-morphismcrates.io |
1.0.0 to 2.27.0 | 2.28.0 |
slack-morphismcrates.io |
1.0.0 up to 2.28.0 | 2.28.0 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-113799 is a medium vulnerability (CVSS 5.3) in Abdolence Slack-morphism-rust, published October 21, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.43%, the 37th percentile. Fixed in slack-morphism 2.28.0.
References
github.com/abdolence/slack-morphism-rust/security/advisories/GHSA-26w4-8w32-4x3v
github.com/abdolence/slack-morphism-rust/pull/387
github.com/abdolence/slack-morphism-rust/commit/ac95d0d4539d0eac548a8db99c51c0c1ae832756
github.com/abdolence/slack-morphism-rust/releases/tag/v2.28.0
github.com/advisories/GHSA-26w4-8w32-4x3v
github.com/CVEProject/cvelistV5/tree/main/cves/2026/113xxx/CVE-2026-113799.json
nvd.nist.gov/vuln/detail/CVE-2026-113799
github.com/abdolence/slack-morphism-rust
Left out here: the rest of 2 source descriptions. The JSON record has them.