Every CVE Search/ Get API key

CVE-2026-113799

Slack Morphism verifier errors disclose valid HMACs in the logs

5.3 MediumFix available

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

0.43%Unchanged since Oct 22, 2026
90%50%10%1%

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 MediumCVSS: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 MediumCVSS: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:

  1. SlackEventSignatureVerifier::verify computes the expected HMAC for the attacker-controlled timestamp and raw request body.
  2. Signature verification fails because the attacker initially sends an invalid signature.
  3. Slack Morphism places the correct expected value in SlackEventWrongSignatureError.generated_hash.
  4. The error's Debug and Display representations reveal that HMAC.
  5. The Axum middleware propagates/formats the error through src/axum_support/slack_events_middleware.rs.
  6. The default listener error handler in src/listener.rs logs the error at error level.
  7. The attacker reads the generated HMAC from the logs.
  8. The attacker resends the identical timestamp and body using the disclosed value as X-Slack-Signature.
  9. 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-morphism 2.26.0
  • slack-morphism 2.27.0
  • current master at 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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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:

  1. SlackEventSignatureVerifier::verify computes the expected HMAC for the attacker-controlled timestamp and raw request body.
  2. Signature verification fails because the attacker initially sends an invalid signature.
  3. Slack Morphism places the correct expected value in SlackEventWrongSignatureError.generated_hash.
  4. The error's Debug and Display representations reveal that HMAC.
  5. The Axum middleware propagates/formats the error through src/axum_support/slack_events_middleware.rs.
  6. The default listener error handler in src/listener.rs logs the error at error level.
  7. The attacker reads the generated HMAC from the logs.
  8. The attacker resends the identical timestamp and body using the disclosed value as X-Slack-Signature.
  9. 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-morphism 2.26.0
  • slack-morphism 2.27.0
  • current master at 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 MediumCVSS: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

Affected packages
PackageAffectedFixed
slack-morphism
crates.io
1.0.0 to 2.27.0
2.28.0
slack-morphism
crates.io
1.0.0 up to 2.28.0
2.28.0

History

History
RecordedChangedSources
first indexedCVE 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

This page doesn't list everything

Left out here: the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open