CVE-2026-39833
Critical · 9.1CVSS
9.1
EPSS
0.5%
Published
May 22, 2026
CISA due date
—
Cloudanix analysis
Some software may use private keys without asking for the approval it was designed to require, allowing sensitive actions to happen without proper confirmation.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Full Compromise
- Component
- Library
- Class
- Authorization Bypass
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Medium
What it actually does
This is an authorization bypass in the Go crypto in-memory keyring implementation. When a caller creates a keyring with NewKeyring() and adds a key with the ConfirmBeforeUse constraint, the keyring silently accepts the constraint but does not enforce it. As a result, a signing operation can proceed without the expected user, operator, or policy confirmation. Applications that rely on this constraint as a security control may unintentionally allow unauthorized signing, authentication, or approval-like actions. The issue affects confidentiality and integrity where signatures grant access, approve transactions, authenticate sessions, or authorize sensitive operations.
Why it matters to the business
Systems that use the affected Go crypto keyring behavior may believe they require confirmation before a private key is used, while in practice the key can be used without that approval. This can undermine controls around privileged access, automated signing, deployment approvals, code-signing, SSH-style authentication, or other workflows that depend on explicit confirmation. Although the current EPSS is low, there is no known exploitation, and it is not in CISA KEV, the CVSS score is high because a successful abuse can let attackers perform sensitive actions without the intended authorization step.
How an attack unfolds
An attacker first needs a path to trigger signing through an application or service that uses the affected Go crypto in-memory keyring and assumes ConfirmBeforeUse is enforced. The attacker does not need to break the private key cryptography; instead, they abuse the application’s trust boundary. If the application exposes a signing, authentication, delegation, or token-generation function and depends on the keyring to require confirmation, the attacker submits or induces a signing request. Because the keyring accepted the unsupported constraint without enforcing it, the signing operation completes without a confirmation prompt or denial. The resulting signature may then be used to authenticate as a privileged identity, approve an operation, sign data, or satisfy another authorization check, depending on how the application uses the key.
How to fix it
Upgrade the affected Go crypto dependency to a release that includes the fix where NewKeyring() returns an error when unsupported constraints such as ConfirmBeforeUse are requested. No exact fixed version was provided in the input, so engineering teams should consult the official golang.org/x/crypto advisory, module changelog, and dependency metadata for the corrected version before release. Rebuild and redeploy all applications that vendor, statically link, or indirectly depend on the vulnerable package. In addition, audit application logic that relies on ConfirmBeforeUse with an in-memory keyring; do not treat this constraint as enforced unless the fixed library returns success for that configuration. Where immediate upgrade is not possible, remove reliance on the in-memory keyring for confirmation-sensitive keys, enforce confirmation in application code before invoking any signing operation, or use a key agent/HSM/secret-management component that independently enforces confirmation policies.
How to confirm the fix worked
Confirm exposure by reviewing dependency manifests, SBOMs, vendored modules, and compiled application provenance for affected golang.org/x/crypto versions. Perform source-code searches for NewKeyring(), ConfirmBeforeUse, AddKey, and signing flows that rely on confirmation constraints. After remediation, add a regression test that attempts to create or use an in-memory keyring with ConfirmBeforeUse and verifies the fixed behavior: unsupported constraints must fail explicitly rather than being silently ignored. Also test that any business-critical signing path cannot complete unless the application’s independent confirmation check succeeds. For deployed services, confirm rebuilt artifacts contain the updated dependency and that no older static binaries or containers remain in production.
Typical attack path
- Identify an application, service, agent, or workflow built with the affected Go crypto keyring behavior.
- Determine whether the application uses NewKeyring() with keys configured to require ConfirmBeforeUse.
- Find an exposed path that causes the application to perform a signing operation, such as authentication, delegated access, transaction approval, or artifact signing.
- Submit or trigger a signing request that should require confirmation.
- Receive a valid signature because the keyring does not enforce the confirmation constraint.
- Use the signature to complete the downstream action, such as access, approval, or impersonation, without the intended confirmation step.
How to detect it
There are no public, vulnerability-specific exploitation indicators provided for this issue. Detection should focus on behavioral evidence of unauthorized or unexpected signing. Review application logs, authentication logs, signing-service logs, audit trails, deployment approval records, code-signing records, SSH or agent-style signing logs, and API gateway logs for signing operations that lack a matching confirmation or approval event. Look for spikes in signing requests, signing from unusual source addresses, signing outside expected maintenance windows, repeated failed-then-successful authorization attempts, and signatures associated with users or service accounts that did not perform a corresponding confirmation action. If the affected component is embedded in a service, correlate every successful signature with the upstream request identity, approval workflow record, and downstream action authorized by that signature. Threat actor exploitation has not been reported, so absence of known IOCs does not prove absence of abuse.
What your security team should do
- Inventory Go applications, agents, CLIs, signing services, authentication helpers, and automation tools that use golang.org/x/crypto keyring or agent functionality.
- Prioritize review of systems where key signatures authorize privileged access, deployments, code-signing, financial or operational approvals, token issuance, or administrator actions.
- Ask engineering teams to search for use of NewKeyring() together with ConfirmBeforeUse and verify whether confirmation is enforced outside the library.
- Upgrade golang.org/x/crypto to the vendor-fixed release once identified, then rebuild and redeploy all dependent binaries and containers.
- Add tests that fail closed when unsupported key constraints are requested and that prove signing cannot occur without the intended confirmation.
- Review logs for unusual signing volume, signing outside normal approval windows, or signatures created without a corresponding approval event.
- Because there is no known public exploit or KEV listing, treat this as a high-impact design/implementation flaw requiring targeted remediation rather than broad emergency incident response unless exposed signing paths are externally reachable.
The record
The in-memory keyring returned by NewKeyring() silently accepted keys with the ConfirmBeforeUse constraint but never enforced it. The key would sign without any confirmation prompt, with no indication to the caller that the constraint was not in effect. NewKeyring() now returns an error when unsupported constraints are requested.
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 | 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-46598 For certain crafted inputs, a 'ed25519.PrivateKey' was created by casting malformed wire… 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