Cloudanix VulnDB

CVE-2026-34986

High · 7.5

CVSS

7.5

EPSS

0.7%

Published

Apr 6, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A malformed encrypted token can crash software that uses affected versions of a common Go encryption library, potentially making services unavailable.

Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Low
Impact
Denial Of Service
Component
Library
Class
Denial of service
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

This vulnerability is a remotely triggerable denial-of-service condition in Go JOSE JWE decryption. When an application parses an attacker-controlled JWE using ParseEncrypted(), ParseEncryptedJSON(), or ParseEncryptedCompact() and then calls Decrypt(), a malformed object can cause a Go panic if the JWE alg value is a key-wrapping algorithm ending in KW, except A128GCMKW, A192GCMKW, and A256GCMKW, and the encrypted_key value is empty or too short. The panic occurs in cipher.KeyUnwrap() in key_wrap.go when it attempts to allocate a slice using a zero or negative length derived from encrypted_key length. If the panic is not recovered, the application process or request handler can crash, causing service disruption. Applications are only exposed when they accept affected key-wrapping algorithms during parsing or call cipher.KeyUnwrap() directly with ciphertext shorter than 16 bytes.

Why it matters to the business

An unauthenticated attacker may be able to crash services that process encrypted tokens or JWE messages, causing authentication, API, session, or message-processing outages. The CVSS availability impact is high, but current exploitation signals are low: it is not in the CISA KEV catalog, is not known to be ransomware-associated, has no reported mature public exploitation, and has a low, flat EPSS score of 0.00651 over 30 days. Because Go JOSE is a reusable library, the operational risk depends on where it is embedded; internet-facing services that decrypt externally supplied JWE content should be prioritized even if no widespread exploitation is currently reported.

How an attack unfolds

An attacker identifies an endpoint or workflow that accepts encrypted JWE/JWT-style input and uses the vulnerable Go JOSE library to parse and decrypt it. The attacker crafts a JWE whose alg header specifies an affected AES key-wrap style algorithm such as A128KW, A192KW, A256KW, PBES2-HS256+A128KW, PBES2-HS384+A192KW, or PBES2-HS512+A256KW, while setting the encrypted_key component to an empty value or otherwise causing a ciphertext shorter than 16 bytes to reach KeyUnwrap(). If the application includes that algorithm in the accepted key algorithm list, parsing succeeds and Decrypt() reaches the vulnerable key unwrap path. The library panics during slice allocation; if the application does not recover the panic safely, the process, worker, or request path terminates. Repeated requests can create sustained denial of service.

How to fix it

Upgrade Go JOSE to a fixed release: v4 users should upgrade to 4.1.4 or later, and v3 users should upgrade to 3.0.5 or later. Regenerate and redeploy binaries or containers that statically include the vulnerable dependency; updating the module file alone is not sufficient until affected applications are rebuilt and released. If immediate upgrade is not possible, reduce exposure by rejecting JWE messages that use affected key-wrapping algorithms, removing unused KW algorithms from the accepted key algorithm list passed to parse functions, validating that encrypted_key is present and at least the required key-wrap length before decryption, and adding defensive panic recovery around untrusted token processing so a malformed token cannot terminate the service. Do not rely solely on restart policies, because an attacker can repeatedly trigger the crash.

How to confirm the fix worked

Confirm dependency versions with Go module tooling such as go list -m all, go version -m <binary>, SBOM scans, or dependency lockfile review, and verify that github.com/go-jose/go-jose/v4 is 4.1.4 or later or the v3 module line is 3.0.5 or later. Confirm deployed artifacts were rebuilt after the dependency update. Review application code for ParseEncrypted(), ParseEncryptedJSON(), ParseEncryptedCompact(), Decrypt(), and direct cipher.KeyUnwrap() usage, and verify accepted key algorithms do not include unused affected KW algorithms. Where safe in a test environment, send a malformed JWE using an affected KW alg and empty encrypted_key and confirm the service returns a controlled error rather than panicking or restarting. Monitor production crash, panic, and restart metrics after rollout to confirm the issue is no longer reproducible.

Typical attack path

  1. Discover an application endpoint or protocol path that accepts JWE/JWT encrypted input from untrusted users.
  2. Craft a compact or JSON-serialized JWE with an affected key-wrapping alg value ending in KW, excluding A128GCMKW, A192GCMKW, and A256GCMKW.
  3. Set the encrypted_key field/component to empty or shorter than the minimum required key-wrap ciphertext length.
  4. Submit the malformed JWE to the target application.
  5. Trigger ParseEncrypted(), ParseEncryptedJSON(), or ParseEncryptedCompact() followed by Decrypt(), or a direct cipher.KeyUnwrap() call.
  6. Cause a Go panic in key_wrap.go, potentially crashing the process or disrupting request handling.
  7. Repeat requests to sustain service unavailability if restart or recovery mechanisms bring the service back online.

How to detect it

Look for evidence of prior exploitation in application logs, reverse proxy logs, API gateway logs, container logs, crash dumps, panic traces, and process supervisor or orchestration events. Useful signals include repeated HTTP 4xx/5xx responses followed by process restarts, Go panic messages referencing slice length allocation, stack traces involving go-jose key_wrap.go or cipher.KeyUnwrap(), and bursts of requests carrying compact JWE values or JSON JWE bodies with alg values such as A128KW, A192KW, A256KW, PBES2-HS256+A128KW, PBES2-HS384+A192KW, or PBES2-HS512+A256KW and an empty encrypted_key. For compact JWE, an empty encrypted_key appears as two adjacent periods after the protected header segment, producing a five-part token pattern like <protected>..<iv>.<ciphertext>.<tag>. For JSON serialization, look for "encrypted_key":"" together with affected alg headers. Correlate suspected malformed JWE requests with application panics, container restarts, Kubernetes CrashLoopBackOff events, systemd restarts, or load balancer health-check failures. Because no specific threat actors or active campaigns are currently reported for this issue, focus detection on exploit behavior and crash artifacts rather than actor-specific infrastructure.

  • panic: runtime error: makeslice: len out of range
  • panic: runtime error: makeslice: len out of range
  • cipher.KeyUnwrap
  • key_wrap.go
  • ParseEncrypted
  • ParseEncryptedJSON
  • ParseEncryptedCompact
  • Decrypt
  • "encrypted_key":""
  • "alg":"A128KW"
  • "alg":"A192KW"
  • "alg":"A256KW"
  • "alg":"PBES2-HS256+A128KW"
  • "alg":"PBES2-HS384+A192KW"
  • "alg":"PBES2-HS512+A256KW"
  • alg=A128KW
  • alg=A192KW
  • alg=A256KW
  • PBES2-HS256+A128KW
  • PBES2-HS384+A192KW
  • PBES2-HS512+A256KW
  • CrashLoopBackOff
  • Back-off restarting failed container
  • systemd: Scheduled restart job
  • github.com/go-jose/go-jose
  • github.com/go-jose/go-jose/v4

What your security team should do

  • Inventory applications, containers, and binaries that include Go JOSE, especially services that process externally supplied JWE, JWS, JWT, or encrypted authentication/session tokens.
  • Prioritize internet-facing and authentication-adjacent services for upgrade to Go JOSE 4.1.4+ or 3.0.5+.
  • Rebuild and redeploy affected Go binaries after dependency updates; verify deployed binaries, not just source manifests.
  • Temporarily disable unused key-wrapping algorithms ending in KW in accepted algorithm lists until all affected services are patched.
  • Add input validation and panic recovery around untrusted token decryption paths to limit denial-of-service blast radius.
  • Search logs and crash telemetry for Go panic stack traces involving key_wrap.go, KeyUnwrap(), ParseEncrypted(), or Decrypt().
  • Create detection rules for malformed JWE inputs containing affected alg values with an empty encrypted_key component.
  • Track advisories for any change in exploit maturity, KEV status, or threat actor reporting, but treat exposed token-decryption paths as patch-priority despite currently low EPSS.

The record

Go JOSE provides an implementation of the Javascript Object Signing and Encryption set of standards in Go, including support for JSON Web Encryption (JWE), JSON Web Signature (JWS), and JSON Web Token (JWT) standards. Prior to 4.1.4 and 3.0.5, decrypting a JSON Web Encryption (JWE) object will panic if the alg field indicates a key wrapping algorithm (one ending in KW, with the exception of A128GCMKW, A192GCMKW, and A256GCMKW) and the encrypted_key field is empty. The panic happens when cipher.KeyUnwrap() in key_wrap.go attempts to allocate a slice with a zero or negative length based on the length of the encrypted_key. This code path is reachable from ParseEncrypted() / ParseEncryptedJSON() / ParseEncryptedCompact() followed by Decrypt() on the resulting object. Note that the parse functions take a list of accepted key algorithms. If the accepted key algorithms do not include any key wrapping algorithms, parsing will fail and the application will be unaffected. This panic is also reachable by calling cipher.KeyUnwrap() directly with any ciphertext parameter less than 16 bytes long, but calling this function directly is less common. Panics can lead to denial of service. This vulnerability is fixed in 4.1.4 and 3.0.5.

Affected packages

Ecosystem Package Introduced Fixed
Chainguard agentbeat 0 9.2.7-r1
Chainguard agentbeat-fips 0 9.2.7-r1
Chainguard amazon-ssm-agent 0 3.3.3270.0-r11
Chainguard amazon-ssm-agent-ecs-exec 0 3.3.3270.0-r11
Chainguard amazon-ssm-agent-ecs-exec-fips 0 3.3.3270.0-r12
Chainguard amazon-ssm-agent-fips 0 3.3.3270.0-r12
Chainguard apko 0 1.2.1-r1
Chainguard apko-fips 0 1.2.1-r1
Chainguard argo-cd-3.1 0 3.1.13-r2
Chainguard argo-cd-3.1-compat 0 3.1.13-r2
Chainguard argo-cd-3.2 0 3.2.8-r2
Chainguard argo-cd-3.2-compat 0 3.2.8-r2
Chainguard argo-cd-3.3 0 3.3.6-r3
Chainguard argo-cd-3.3-compat 0 3.3.6-r3
Chainguard argo-cd-fips-3.1 0 3.1.13-r2
Chainguard argo-cd-fips-3.1-compat 0 3.1.13-r2
Chainguard argo-cd-fips-3.2 0 3.2.8-r2
Chainguard argo-cd-fips-3.2-compat 0 3.2.8-r2
Chainguard argo-cd-fips-3.3 0 3.3.5-r2
Chainguard argo-cd-fips-3.3-compat 0 3.3.5-r2
Chainguard argo-workflow-controller-4.0 0 4.0.4-r2
Chainguard argo-workflow-controller-fips-3.7 0 3.7.13-r2
Chainguard argo-workflow-controller-fips-4.0 0 4.0.4-r2
Chainguard argo-workflow-executor-4.0 0 4.0.4-r2
Chainguard argo-workflow-executor-fips-3.7 0 3.7.13-r2
Chainguard argo-workflow-executor-fips-4.0 0 4.0.4-r2
Chainguard argo-workflows-4.0 0 4.0.4-r2
Chainguard argo-workflows-fips-3.7 0 3.7.13-r2
Chainguard argo-workflows-fips-4.0 0 4.0.4-r2
Chainguard authentik-2025.12-go-server 0 2025.12.4-r1
Chainguard authentik-2026.2-go-server 0 2026.2.1-r1
Chainguard authentik-fips-2025.12-go-server 0 2025.12.4-r1
Chainguard authentik-fips-2026.2-go-server 0 2026.2.1-r1
Chainguard azcopy 0 10.32.2-r4
Chainguard azcopy-fips 0 10.32.2-r2
Chainguard bank-vaults 0 1.32.1-r16
Chainguard bank-vaults-template 0 1.32.1-r16
Chainguard bento 0 1.16.2-r1
Chainguard bento-fips 0 1.16.1-r2
Chainguard boring-registry 0 0.17.0-r1
Chainguard boring-registry-fips 0 0.16.6-r13
Chainguard buildah 0 1.43.0-r7
Chainguard buildah-fips 0 1.43.0-r2
Chainguard caddy 0 2.11.2-r9
Chainguard caddy-fips 0 2.11.2-r5
Chainguard cephcsi 0 3.16.2-r2
Chainguard cephcsi-fips 0 3.16.2-r3
Chainguard cerbos 0 0.51.0-r12
Chainguard cerbos-fips 0 0.51.0-r9
Chainguard cert-manager-1.19 0 1.19.4-r4
Chainguard cert-manager-1.20 0 1.20.1-r1
Chainguard cert-manager-controller-1.19 0 1.19.4-r4
Chainguard cert-manager-controller-1.20 0 1.20.1-r1
Chainguard cert-manager-istio-csr 0 0.16.0-r3
Chainguard cert-manager-istio-csr-fips 0 0.16.0-r2
Chainguard chainctl 0 0.2.233-r0
Chainguard chainctl-fips 0 0.2.233-r0
Chainguard chainloop-artifact-cas 0 1.89.7-r1
Chainguard chainloop-artifact-cas-fips 0 1.89.7-r1
Chainguard chainloop-cli 0 1.89.7-r1
Chainguard chainloop-cli-fips 0 1.89.7-r1
Chainguard chainloop-control-plane 0 1.89.7-r1
Chainguard chainloop-control-plane-fips 0 1.89.7-r1
Chainguard cilium-1.17-operator-aws 0 1.17.14-r1
Chainguard cilium-1.17-operator-generic 0 1.17.14-r1
Chainguard cilium-1.18-operator-aws 0 1.18.8-r1
Chainguard cilium-1.18-operator-generic 0 1.18.8-r1
Chainguard cilium-1.19-operator-aws 0 1.19.2-r2
Chainguard cilium-1.19-operator-generic 0 1.19.2-r2
Chainguard cilium-fips-1.17-operator-aws 0 1.17.14-r1
Chainguard cilium-fips-1.17-operator-azure 0 1.17.14-r1
Chainguard cilium-fips-1.17-operator-generic 0 1.17.14-r1
Chainguard cilium-fips-1.18-operator-aws 0 1.18.8-r1
Chainguard cilium-fips-1.18-operator-azure 0 1.18.8-r1
Chainguard cilium-fips-1.18-operator-generic 0 1.18.8-r1
Chainguard cilium-fips-1.19-operator-aws 0 1.19.2-r1
Chainguard cilium-fips-1.19-operator-azure 0 1.19.2-r1
Chainguard cilium-fips-1.19-operator-generic 0 1.19.2-r1
Chainguard clickhouse-backup 0 2.6.43-r1
Chainguard cloudbeat-8.19 0 8.19.13-r4
Chainguard cloudbeat-9.2 0 9.2.7-r4
Chainguard cloudbeat-9.3 0 9.3.2-r3
Chainguard cloudbeat-fips-8.19 0 8.19.13-r3
Chainguard cloudbeat-fips-9.3 0 9.3.2-r4
Chainguard cloudflared 0 2026.3.0-r5
Chainguard cloudflared-fips 0 2026.3.0-r3
Chainguard cluster-api-aws-controller 0 2.10.2-r7
Chainguard cluster-api-aws-controller-fips 0 2.10.2-r6
Chainguard conftest 0 0.68.0-r0
Chainguard conftest-fips 0 0.68.0-r1
Chainguard consul-1.20 0 1.20.6-r14
Chainguard consul-1.21 0 1.21.5-r11
Chainguard consul-1.22 0 1.22.6-r1
Chainguard consul-fips-1.20 0 1.20.6-r15
Chainguard consul-fips-1.21 0 1.21.5-r13
Chainguard consul-k8s-1.1 0 1.1.18-r30
Chainguard consul-k8s-1.3 0 1.3.9-r32
Chainguard consul-k8s-1.4 0 1.4.10-r18
Chainguard consul-k8s-1.5 0 1.5.9-r18
Chainguard consul-k8s-1.6 0 1.6.10-r11
Chainguard consul-k8s-1.7 0 1.7.13-r1
Chainguard consul-k8s-1.9 0 1.9.6-r2
Chainguard consul-k8s-fips-1.1 0 1.1.18-r30
Chainguard consul-k8s-fips-1.3 0 1.3.9-r29
Chainguard consul-k8s-fips-1.4 0 1.4.10-r18
Chainguard consul-k8s-fips-1.5 0 1.5.9-r19
Chainguard consul-k8s-fips-1.6 0 1.6.10-r13
Chainguard consul-k8s-fips-1.7 0 1.7.13-r2
Chainguard consul-k8s-fips-1.9 0 1.9.6-r1
Chainguard containerd-1 0 1.7.30-r7
Chainguard containerd-2 0 2.2.2-r7
Chainguard containerd-fips 0 2.2.2-r3
Chainguard cosign 0 3.0.5-r6
Chainguard cosign-fips 0 3.0.5-r5
Chainguard crossplane-2.0 0 2.0.7-r8
Chainguard crossplane-2.1 0 2.1.4-r9
Chainguard crossplane-2.2 0 2.2.0-r6
Chainguard crossplane-2.2-crank 0 2.2.0-r6
Chainguard crossplane-fips-2.0 0 2.0.7-r10
Chainguard crossplane-fips-2.1 0 2.1.4-r10
Chainguard crossplane-fips-2.2 0 2.2.0-r8
Chainguard crossplane-fips-2.2-crank 0 2.2.0-r8
Chainguard crossplane-provider-family-gcp 0 2.5.0-r6
Chainguard crossplane-provider-family-gcp-fips 0 2.5.0-r8
Chainguard crossplane-provider-gcp-cloudplatform 0 2.5.0-r6
Chainguard crossplane-provider-gcp-cloudplatform-fips 0 2.5.0-r8
Chainguard crossplane-provider-gcp-compute 0 2.5.0-r6
Chainguard crossplane-provider-gcp-compute-fips 0 2.5.0-r8
Chainguard crossplane-provider-gcp-container 0 2.5.0-r6
Chainguard crossplane-provider-gcp-container-fips 0 2.5.0-r8
Chainguard crossplane-provider-gcp-dns 0 2.5.0-r6
Chainguard crossplane-provider-gcp-dns-fips 0 2.5.0-r8
Chainguard crossplane-provider-gcp-kms 0 2.5.0-r6
Chainguard crossplane-provider-gcp-kms-fips 0 2.5.0-r8
Chainguard crossplane-provider-gcp-pubsub 0 2.5.0-r6
Chainguard crossplane-provider-gcp-pubsub-fips 0 2.5.0-r8
Chainguard crossplane-provider-gcp-storage 0 2.5.0-r6
Chainguard crossplane-provider-gcp-storage-fips 0 2.5.0-r8
Chainguard crossplane-provider-terraform 0 1.1.1-r5
Chainguard crossplane-provider-terraform-fips 0 1.1.1-r5
Chainguard dagger 0 0.20.3-r2
Chainguard dapr-daprd-1.15 0 1.15.13-r11
Chainguard dapr-daprd-1.16 0 1.16.12-r1
Chainguard dapr-daprd-1.17 0 1.17.3-r1
Chainguard dapr-daprd-fips-1.15 0 1.15.13-r7
Chainguard dapr-daprd-fips-1.16 0 1.16.12-r1
Chainguard dapr-daprd-fips-1.17 0 1.17.3-r1
Chainguard dapr-injector-1.16 0 1.16.12-r1
Chainguard dapr-injector-1.17 0 1.17.3-r1
Chainguard dapr-injector-fips-1.16 0 1.16.12-r1
Chainguard dapr-injector-fips-1.17 0 1.17.3-r1
Chainguard dapr-operator-1.16 0 1.16.12-r1
Chainguard dapr-operator-1.17 0 1.17.3-r1
Chainguard dapr-operator-fips-1.16 0 1.16.12-r1
Chainguard dapr-operator-fips-1.17 0 1.17.3-r1
Chainguard dapr-placement-1.16 0 1.16.12-r1
Chainguard dapr-placement-1.17 0 1.17.3-r1
Chainguard dapr-placement-fips-1.16 0 1.16.12-r1
Chainguard dapr-scheduler-1.16 0 1.16.12-r1
Chainguard dapr-scheduler-1.17 0 1.17.3-r1
Chainguard dapr-scheduler-fips-1.16 0 1.16.12-r1
Chainguard dapr-scheduler-fips-1.17 0 1.17.3-r1
Chainguard dapr-sentry-1.16 0 1.16.12-r1
Chainguard dapr-sentry-1.17 0 1.17.3-r1
Chainguard dapr-sentry-fips-1.16 0 1.16.12-r1
Chainguard dapr-sentry-fips-1.17 0 1.17.3-r1
Chainguard datadog-agent-7.76 0 7.76.3-r7
Chainguard datadog-agent-fips-7.76 0 7.76.3-r5
Chainguard dex 0 2.45.1-r5
Chainguard dex-fips 0 2.45.1-r4
Chainguard dgraph 0 25.3.1-r0
Chainguard distribution 0 3.0.0-r49
Chainguard distribution-fips 0 3.0.0-r25
Chainguard dkron-executor-grpc 0 4.1.0-r0
Chainguard dkron-fips-executor-grpc 0 4.0.9-r9
Chainguard elastic-agent-8.19 0 8.19.13-r3
Chainguard elastic-agent-9.1 0 9.1.10-r10
Chainguard elastic-agent-9.2 0 9.2.7-r3
Chainguard elastic-agent-fips-8.19 0 8.19.13-r2
Chainguard elastic-agent-fips-9.1 0 9.1.10-r10
Chainguard elastic-agent-fips-9.2 0 9.2.7-r2
Chainguard elastic-otel-collector-9.3 0 9.3.2-r3
Chainguard elastic-otel-collector-fips-9.3 0 9.3.2-r3
Chainguard envconsul 0 0.13.4-r8
Chainguard envconsul-fips 0 0.13.4-r9
Chainguard envoy-gateway 0 1.7.1-r2
Chainguard envoy-gateway-fips 0 1.7.1-r2
Chainguard external-secrets-operator-2.2 0 2.2.0-r2
Chainguard external-secrets-operator-fips-2.2 0 2.2.0-r2
Chainguard falcoctl 0 0.12.2-r6
Chainguard falcoctl-fips 0 0.12.2-r6
Chainguard falcosidekick 0 2.33.0-r2
Chainguard falcosidekick-fips 0 2.33.0-r2
Chainguard filebeat-8.19 0 8.19.13-r2
Chainguard filebeat-9.0 0 9.0.8-r12
Chainguard filebeat-9.1 0 9.1.10-r8
Chainguard filebeat-9.2 0 9.2.7-r1
Chainguard filebeat-9.3 0 9.3.2-r1
Chainguard filebeat-fips-8.19 0 8.19.13-r2
Chainguard filebeat-fips-9.0 0 9.0.8-r13

Related vulnerabilities