CVE-2026-46598
Medium · 5.3CVSS
5.3
EPSS
0.5%
Published
May 22, 2026
CISA due date
—
Cloudanix analysis
A specially crafted key file or message can crash some Go-based services that process Ed25519 keys.
- 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 flaw allows malformed Ed25519 private-key wire data to be converted into a crypto/ed25519.PrivateKey value that is structurally invalid. When application code later uses that key for operations such as signing or deriving the public key, the Go crypto implementation can panic. In services that parse attacker-controlled key material and do not recover from panics at the request boundary, this can terminate a request handler, worker, or the whole process, resulting in denial of service. The issue does not indicate confidentiality loss, integrity compromise, or code execution based on the supplied details.
Why it matters to the business
An attacker may be able to crash Go-based services that accept or process Ed25519 private-key material from untrusted sources, causing intermittent outages, failed authentication or signing workflows, degraded availability, and operational noise. The CVSS score indicates moderate severity with low attack complexity and no authentication required, but EPSS is currently low, there is no known CISA KEV listing, and no public exploit maturity is reported; organizations should still remediate because internet-facing parsers can be repeatedly triggered once a crash condition is understood.
How an attack unfolds
An attacker identifies a Go application or service path that accepts serialized key material, configuration bundles, protocol messages, or other wire-format inputs that may contain an Ed25519 private key. The attacker submits a crafted payload where the Ed25519 private-key bytes are malformed but still pass through parsing or casting logic into an ed25519.PrivateKey object. The vulnerable code stores or forwards that object until a later operation attempts to use it, such as signing a message, authenticating a handshake, or deriving the public key. At that point, the Go crypto code encounters invalid key structure and panics. If the application lacks panic recovery or if the panic occurs in a critical process, the service can crash or become unavailable. Repeating the request can create a sustained denial-of-service condition.
How to fix it
Upgrade the affected Go crypto dependency or Go toolchain to a version that includes the vendor fix as soon as an official fixed version is available for the package in use. Because no exact fixed version was provided in the input, track the relevant Go security advisory and update golang.org/x/crypto and/or the Go standard library dependency through normal dependency management. In addition, defensively validate Ed25519 private-key material before use: require the exact expected private-key length, reject malformed wire encodings, avoid direct casting of untrusted bytes into ed25519.PrivateKey, and prefer safe parsing APIs that perform validation. Add panic recovery around request handlers and background workers that process untrusted cryptographic material so a malformed input cannot terminate the entire service. Apply rate limiting and input-size limits to endpoints that parse keys or cryptographic objects.
How to confirm the fix worked
Confirm that all Go modules and binaries have been rebuilt with a non-vulnerable version of the affected crypto package once available. Use `go version -m <binary>` and `go list -m all` to identify embedded Go versions and golang.org/x/crypto versions. Review code for direct conversions such as `ed25519.PrivateKey(data)` or equivalent casts from untrusted wire bytes, and verify that length and format checks occur before any call to `Sign`, `Public`, or related key-use operations. Test with malformed Ed25519 private-key encodings in a controlled environment and confirm the application rejects the input with a normal error response rather than logging a panic or terminating. Validate that process supervisors, health checks, and panic recovery prevent a single malformed request from taking down the service.
Typical attack path
- Find a Go-based service, API, protocol endpoint, or library consumer that accepts Ed25519 private-key material or serialized key objects from remote input.
- Send crafted wire-format input containing malformed Ed25519 private-key bytes that are accepted or cast into an ed25519.PrivateKey value.
- Trigger application behavior that uses the malformed key, such as signing, authentication, certificate handling, or public-key derivation.
- Cause the crypto operation to panic when it validates or operates on the malformed private key.
- Repeat the malformed request to crash workers or processes and degrade service availability.
How to detect it
Look for evidence of panic-driven denial of service in application logs, container logs, process supervisor events, and crash reporting systems. Relevant sources include Go application stderr/stdout, web/API access logs, reverse proxy logs, Kubernetes pod restart events, systemd journal entries, container runtime events, core dumps, and APM error traces. Search for panic stack traces involving crypto/ed25519, ed25519.PrivateKey, Sign, or Public methods near requests that import, parse, upload, or process keys. Correlate panics with repeated requests from the same source IP, user agent, API client, or unauthenticated endpoint. Also review restart loops, elevated 5xx responses, abrupt connection resets, and crashes immediately after key-processing requests. There are no known threat actors, KEV exploitation, ransomware use, or public exploit artifacts provided, so detection should focus on behavioral crash indicators rather than campaign-specific infrastructure.
- panic: ed25519: bad private key length
- ed25519: bad private key length
- crypto/ed25519.PrivateKey.Sign
- crypto/ed25519.PrivateKey.Public
- crypto/ed25519.sign
- panic: runtime error
- goroutine
- SIGABRT
- systemd: Main process exited
- Back-off restarting failed container
- CrashLoopBackOff
- container exited with code 2
- panic serving
- net/http.(*conn).serve
What your security team should do
- Inventory Go applications and services that import crypto/ed25519 or golang.org/x/crypto and process externally supplied key material.
- Prioritize internet-facing or multi-tenant services that parse private keys, SSH keys, certificates, signed messages, or cryptographic configuration supplied by users or peers.
- Update affected Go crypto dependencies and rebuild/redeploy statically linked Go binaries when an official fixed version is available.
- Ask engineering teams to search for unsafe casts from byte slices to ed25519.PrivateKey and add strict validation before key use.
- Add or verify panic recovery at HTTP/RPC/message-processing boundaries so malformed input cannot terminate a process.
- Monitor logs for Ed25519 private-key panics and unexplained process restarts, especially following requests to key import, authentication, signing, SSH, certificate, or configuration endpoints.
- Because this is not currently in CISA KEV and EPSS is low, treat it as a prioritized availability hardening issue rather than an emergency ransomware-driven patch, unless exposed services show crash evidence.
The record
For certain crafted inputs, a 'ed25519.PrivateKey' was created by casting malformed wire bytes, leading to a panic when used.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| openSUSE:Leap 16.0 | amazon-ssm-agent | 0 | 3.3.4624.0-160000.1.1 |
| openSUSE:Leap 16.0 | distribution | 0 | 3.1.1-160000.1.1 |
| openSUSE:Leap 16.0 | google-guest-agent | 0 | 20260529.00-160000.1.1 |
| openSUSE:Leap 16.0 | google-osconfig-agent | 0 | 20260615.01-160000.1.1 |
| openSUSE:Leap 16.0 | mcphost | 0 | 0.34.0-160000.2.1 |
| openSUSE:Leap 16.0 | trivy | 0 | 0.71.0-160000.1.1 |
| openSUSE:Tumbleweed | alloy | 0 | 1.17.0-1.1 |
| openSUSE:Tumbleweed | amazon-ssm-agent | 0 | 3.3.4624.0-2.1 |
| openSUSE:Tumbleweed | cheat | 0 | 5.1.0-2.1 |
| openSUSE:Tumbleweed | git-bug | 0 | 0.10.1-5.1 |
| openSUSE:Tumbleweed | rclone | 0 | 1.74.2-1.1 |
| openSUSE:Tumbleweed | velociraptor | 0 | 0.7.0.4.git185.a5708584-2.1 |
Related vulnerabilities
- CVE-2026-44740 Billy is an interface filesystem abstraction for Go. Also affects amazon-ssm-agent
- CVE-2026-39821 The ToASCII and ToUnicode functions incorrectly accept Punycode-encoded labels that… Also affects amazon-ssm-agent
- CVE-2026-46597 An incorrectly placed cast from bytes to int allowed for server-side panic in the AES-GCM… Also affects amazon-ssm-agent
- CVE-2026-42508 Previously, a revoked 'SignatureKey' belonging to a CA was not correctly checked for… Also affects amazon-ssm-agent
- CVE-2026-46595 Previously, CVE-2024-45337 fixed an authorization bypass for misused ssh server… Also affects amazon-ssm-agent
- CVE-2026-39835 SSH servers which use CertChecker as a public key callback without setting… Also affects amazon-ssm-agent
- CVE-2026-39834 When writing data larger than 4GB in a single Write call on an SSH channel, an integer… Also affects amazon-ssm-agent
- CVE-2026-39829 The RSA and DSA public key parsers did not enforce size limits on key parameters. Also affects amazon-ssm-agent