The vulnerability CVE-2026-75523 in Steeltoe.Management.Endpoint arises from insufficient URI masking, specifically the failure to redact sensitive information present in query strings. The /actuator/httpexchanges endpoint, when exposed, records and displays request URIs. In the vulnerable versions (<= 4.2.0), the MaskedUri utility, intended for sanitization, only masked the UserInfo portion of the URI (username:password) but completely ignored query string parameters. This meant that any secrets passed in query strings (e.g., OAuth tokens, password-reset tokens) were stored and exposed verbatim.
The analysis of the provided commit 9bf0ecb9f2d4a34b65f61d41c5625d49071ae9fa reveals the specific functions modified to address this issue:
-
Steeltoe.Common.Extensions.MaskedUri.Mask: This is the core function responsible for performing the masking. The patch significantly modifies this function to include logic for identifying and redacting sensitive query string parameters based on a predefined list of keywords. In the vulnerable state, this function would return a URI with an unmasked query string.
-
Steeltoe.Management.Endpoint.Actuators.HttpExchanges.HttpExchangeRequest.HttpExchangeRequest (constructor): This constructor is responsible for creating HttpExchangeRequest objects, which encapsulate details of an HTTP exchange, including the URI. The patch modifies this constructor to explicitly call MaskedUri.Mask on the incoming Uri before storing it. In the vulnerable version, the Uri was stored without this crucial masking step, leading to the retention of sensitive query string data.
-
Steeltoe.Management.Endpoint.Actuators.HttpExchanges.HttpExchangeRequest.JsonUri: This property provides the string representation of the URI for JSON serialization. While the patch simplifies the getter, the vulnerability here stemmed from the fact that the Uri property itself (which this getter accesses) was not properly masked in the vulnerable version. Therefore, this property would expose the unmasked query string in the /actuator/httpexchanges response.
-
Steeltoe.Management.Endpoint.Actuators.HttpExchanges.HttpExchangesRepository.LogIncomingExchange: This method is used for logging HTTP exchange details. In the vulnerable version, it accepted a MaskedUri parameter. Since MaskedUri itself was not adequately masking query strings, this logging function would write sensitive query string parameters to application logs when DEBUG logging was enabled. The patch changes the parameter type to Uri, implying that the Uri passed to it will now be the fully masked one due to the changes in HttpExchangeRequest.
Exploitation would involve an attacker (or any authorized user) accessing the /actuator/httpexchanges endpoint. When this endpoint is called, the vulnerable functions would be invoked in the process of retrieving and displaying past HTTP requests. Specifically, HttpExchangeRequest would be constructed with an unmasked URI, its JsonUri property would expose this unmasked URI, and HttpExchangesRepository.LogIncomingExchange would log it. A runtime profiler would show calls to these functions, revealing the flow of unmasked sensitive data.