CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-39831

CVE-2026-39831: Authentication Bypass in golang.org/x/crypto/ssh via FIDO/U2F User Presence Bypass

Alon Barad
Alon Barad
Software Engineer

Jun 26, 2026·5 min read·21 visits

Executive Summary (TL;DR)

The Go SSH library failed to verify the User Presence (UP) flag on FIDO/U2F hardware security keys, allowing authentication to proceed without the required physical tap or touch confirmation.

An authentication bypass vulnerability was identified in the golang.org/x/crypto/ssh package. The library's verification logic for FIDO/U2F security keys failed to check the User Presence (UP) flag. This omission allows an attacker with access to a hardware token interface or an agent-forwarding socket to authenticate without physical user interaction.

Vulnerability Overview

The Go standard sub-repository module golang.org/x/crypto/ssh provides implementations of SSH client and server protocols. This module supports hardware-backed FIDO/U2F security keys, including sk-ecdsa-sha2-nistp256@openssh.com and sk-ssh-ed25519@openssh.com key types. These key types secure authentication by requiring physical confirmation from the user during the signing process.

The SSH protocol utilizes the security key to generate signatures that assert user presence. The vulnerability, tracked as CVE-2026-39831, resides in the signature validation logic. The package accepted signatures where the User Presence flag was not set, violating the FIDO/U2F protocol specification.

This logical omission allows for silent, unattended cryptographic operations. If an attacker gains unauthorized logical access to an active security key, they can authenticate to upstream SSH servers without triggering physical interaction alerts on the user's hardware token.

Root Cause Analysis

FIDO/U2F hardware security keys include an authenticator data flags byte within their signature payload. The least significant bit (bit 0, value 0x01) represents the User Presence (UP) flag. Hardware keys set this flag when a user performs a physical interaction, such as tapping or touching the key.

In vulnerable versions of golang.org/x/crypto/ssh, the Verify() method implemented for skECDSAPublicKey and skEd25519PublicKey parsed signature payloads into the internal structure skFields. The definition of skFields contains a Flags field of type byte. However, the validation loop failed to execute a bitwise AND operation (Flags & 0x01) to assert the presence of the UP bit.

As a consequence of this logical gap, the SSH server validated only the outer cryptographic signature. The server assumed that any signature generated by the hardware token implied physical touch. Because hardware keys can generate signatures without touch under specific administrative policies, the absence of this programmatic check created a mechanism to bypass physical confirmation entirely.

Code Analysis

The root cause resides in ssh/keys.go, where the validation logic ignored the parsed flags. The patch committed in Gerrit Change List 781662 introduces a constant flagUserPresence and a corresponding validation step in both ECDSA and Ed25519 security key verification logic.

// Constant defined in the patch
const flagUserPresence = 0x01
 
var errSKMissingUserPresence = errors.New("ssh: signature missing required user presence flag")

The Verify methods are updated to enforce this check. If the signature lacks the user presence flag and the key is not explicitly designated to bypass it, verification returns errSKMissingUserPresence:

// Vulnerable vs. Patched Verification Logic
func (k *skECDSAPublicKey) Verify(data []byte, sig *Signature) error {
    // [Parsing logic matches skFields]
    
    // PATCH: Validate presence of the UP bit
    if skf.Flags&flagUserPresence == 0 && !k.noTouchRequired {
        return errSKMissingUserPresence
    }
    
    // Reconstruct signed blob and verify cryptographic signature
    return verifyECDSA(k.PublicKey, blob, sig)
}

To retain compatibility with OpenSSH implementations that support non-interactive automation, the patch introduces the helper function noTouchAllowed. This function checks if the `

Exploitation Methodology

Exploitation of CVE-2026-39831 does not require complex cryptographic manipulation, but rather leverages the structural omission of the security flag. An attacker who has achieved logical access to a user's environment can utilize a compromised SSH agent or direct connection to a forwarded socket to perform an authentication attempt.

When a standard FIDO credential challenge is received, the attacker interacts with the token interface to request a signature with user presence set to false. Because the Go SSH library fails to inspect the flag, the connection is authorized automatically. This bypasses the multi-factor guarantee of physical presence, reverting the security model back to single-factor logical authentication.

Impact Assessment

The security implications of bypassing User Presence verification are severe. Hardware security keys are deployed to guarantee that remote attackers cannot use stolen cryptographic material without a physical gesture. This vulnerability completely invalidates that defense-in-depth design.

The Common Vulnerability Scoring System (CVSS) v3.1 base score is calculated as 9.1 (Critical), with the vector string CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N. Because the user interaction is programmatically bypassed, the User Interaction (UI) component of the vector drops from Required (R) to None (N).

If automated SSH administrative frameworks utilize vulnerable versions of this library, they are exposed to remote compromise. An attacker capable of intercepting authentication requests can establish persistent unauthorized administrative channels.

Remediation and Mitigation

The primary remediation strategy is upgrading the golang.org/x/crypto dependency to version v0.52.0 or higher. This upgrade ensures that the golang.org/x/crypto/ssh package implements strict validation of the User Presence flag by default.

If upgrading immediately is not possible, security teams must audit their environments for the use of `

Fix Analysis (1)

Technical Appendix

CVSS Score
9.1/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
EPSS Probability
0.37%
Top 71% most exploited

Affected Systems

Go services utilizing golang.org/x/crypto/sshGo-based SSH jump servers or bastion hostsCustom SSH client applications built with the Go standard sub-repository

Affected Versions Detail

Product
Affected Versions
Fixed Version
golang.org/x/crypto/ssh
Go Language
< v0.52.0v0.52.0
AttributeDetail
CWE IDCWE-290
Attack VectorNetwork
CVSS Base Score9.1
EPSS Score0.00373
Exploit Statuspoc
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1556Modify Authentication Process
Credential Access
CWE-290
Authentication Bypass by Spoofing

The software-based verification mechanism did not check key cryptographic/FIDO metadata flags, trusting signatures that should have been rejected due to missing physical interaction confirmation.

Vulnerability Timeline

Patch code authored by Nicola Murino and submitted for review
2026-02-15
Go GitHub Issue #79566 opened
2026-05-21
Gerrit CL 781662 merged and CVE-2026-39831 publicly disclosed
2026-05-22

References & Sources

  • [1]Go Announcement Advisory (GO-2026-5019)
  • [2]Go Bug Tracker Issue #79566
  • [3]Official Gerrit Change List (CL 781662)

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•2 days ago•CVE-2026-54068
5.9

CVE-2026-54068: Unauthenticated Server-Side Template Injection and SQLite Exfiltration in SiYuan PKM

An authentication bypass in the SiYuan personal knowledge management system before version 3.7.0 exposes a dynamic icon rendering endpoint. This endpoint processes client-supplied Go template directives. By submitting a crafted request, an unauthenticated remote attacker can leverage registered database template functions to execute arbitrary read-only SQL queries and exfiltrate workspace contents.

Amit Schendel
Amit Schendel
14 views•5 min read
•2 days ago•CVE-2026-54069
9.1

CVE-2026-54069: Authentication Bypass in SiYuan Note via Origin Header Spoofing

CVE-2026-54069 is a critical authentication bypass vulnerability in the SiYuan Note personal knowledge management system. The flaw is located in the HTTP server's middleware handling API authorization, which unconditionally trusts requests carrying a 'chrome-extension://' scheme in the Origin HTTP header, granting administrative access without validating API tokens.

Alon Barad
Alon Barad
11 views•5 min read
•2 days ago•CVE-2026-54089
9.1

CVE-2026-54089: Authentication Bypass by Spoofing in File Browser

CVE-2026-54089 is a critical authentication bypass vulnerability in File Browser affecting instances configured with proxy-based authentication. An unauthenticated remote attacker with direct network access can impersonate arbitrary users or register new accounts by spoofing configured HTTP headers.

Amit Schendel
Amit Schendel
8 views•7 min read
•2 days ago•GHSA-99J7-FHR2-XFJ4
10.0

GHSA-99J7-FHR2-XFJ4: Malicious Remote Code Execution Payload in 'exploration' Cargo Crate

The malicious Cargo package 'exploration' was uploaded to the crates.io registry. During compilation or package import, the crate executes code designed to establish an outbound TCP/HTTP connection, download an external second-stage binary, and execute the binary locally on the host machine. This creates an unauthenticated remote code execution vector impacting developer environments and continuous integration pipelines.

Amit Schendel
Amit Schendel
12 views•6 min read
•2 days ago•CVE-2026-54088
9.3

CVE-2026-54088: Pre-Authentication Remote Code Execution in File Browser Hook Authentication

CVE-2026-54088 is a critical command injection vulnerability in File Browser prior to version 2.63.6. When Hook Authentication is enabled, the application interpolates unsanitized credentials into a shell command, allowing unauthenticated remote code execution.

Alon Barad
Alon Barad
13 views•6 min read
•2 days ago•GHSA-QV4M-M73M-8HJ7
8.8

GHSA-qv4m-m73m-8hj7: Authenticated Arbitrary File Upload leading to Remote Code Execution in NotrinosERP

An authenticated remote code execution vulnerability exists in NotrinosERP (versions up to and including 1.0.0) within the Human Resource Management (HRM) module. Users with employee management permissions can upload arbitrary file types, including PHP scripts, which are written directly to a web-accessible directory. This allows for arbitrary code execution in the context of the web-server user.

Alon Barad
Alon Barad
8 views•6 min read