Miggo Logo

CVE-2025-61688: Omni vulnerable to information leak via API

8.6

CVSS Score
3.1

Basic Information

EPSS Score
-
CWE
-
Published
10/13/2025
Updated
10/13/2025
KEV Status
No
Technology
TechnologyGo

Technical Details

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
Package NameEcosystemVulnerable VersionsFirst Patched Version
github.com/siderolabs/omnigo>= 1.1.0-beta.0, <= 1.1.41.1.5
github.com/siderolabs/omnigo<= 1.0.11.0.2

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability in Omni (GHSA-77r9-w39m-9xh5) is an information leak via the API, caused by improper authentication. The analysis of the patches reveals two main areas of weakness that were addressed.

First, the functions isSensitiveResource and isSensitiveSpec in internal/backend/server.go had a critical logic flaw. When they encountered an error while parsing a resource or its specification, they would default to treating the resource as non-sensitive (return false). An attacker could exploit this by sending a malformed request for a sensitive resource. The parsing error would cause the system to misclassify the resource, bypassing authentication checks and potentially leading to an information leak.

Second, the gRPC interceptors AuthConfig.Unary and AuthConfig.Stream in internal/pkg/auth/interceptor/auth_config.go were not correctly enforcing signature verification on incoming API requests. This allowed unauthenticated access to both unary and streaming gRPC endpoints that should have been protected. The patch addresses this by introducing an explicit signature verification step within the interceptors, ensuring that all API calls are authenticated by default. The patch also explicitly makes the GetAuthConfig endpoint public, which was likely the intended behavior all along, while securing all other endpoints.

In summary, the vulnerability was a combination of faulty error handling in resource sensitivity checks and a failure to enforce authentication at the API gateway level. The identified vulnerable functions are the ones that contained these flaws, and their patching was essential to fix the information leak.

Vulnerable functions

isSensitiveResource
internal/backend/server.go
The function `isSensitiveResource` in `internal/backend/server.go` incorrectly handled errors during resource unmarshaling. If a resource failed to unmarshal, the function would return `false`, indicating the resource was not sensitive. This flaw could be exploited by sending a malformed request for a sensitive resource, causing the application to bypass security checks and potentially leak sensitive information.
isSensitiveSpec
internal/backend/server.go
Similar to `isSensitiveResource`, the `isSensitiveSpec` function in `internal/backend/server.go` returned `false` when it failed to create a resource from the provided specification. This allowed an attacker to craft a request that would cause an error, bypass sensitivity checks, and potentially access sensitive data without proper authorization.
AuthConfig.Unary
internal/pkg/auth/interceptor/auth_config.go
The `AuthConfig.Unary` interceptor is responsible for enforcing authentication on unary gRPC calls. Prior to the patch, the interceptor did not correctly enforce signature verification for all requests, allowing unauthenticated access to API endpoints. The patch introduces an explicit signature check, which fixes the vulnerability by ensuring that all requests are authenticated by default, with a specific exception for `GetAuthConfig` requests.
AuthConfig.Stream
internal/pkg/auth/interceptor/auth_config.go
The `AuthConfig.Stream` interceptor for streaming gRPC calls shared the same vulnerability as the `AuthConfig.Unary` interceptor. It failed to enforce signature verification, allowing unauthenticated access to streaming API endpoints. The patch corrects this by applying the same authentication logic as in the unary interceptor.

WAF Protection Rules

WAF Rule

### Imp**t Omni mi**t l**k s*nsitiv* in*orm*tion vi* *n *PI. ### P*t***s v*.*.*, v*.*.* *n* v*.*.* *ont*in t** p*t**. ### Work*roun*s Non*. ### R***r*n**s Non*.

Reasoning

T** vuln*r**ility in Omni (**S*-**r*-w**m-*x**) is *n in*orm*tion l**k vi* t** *PI, **us** *y improp*r *ut**nti**tion. T** *n*lysis o* t** p*t***s r*v**ls two m*in *r**s o* w**kn*ss t**t w*r* ***r*ss**. *irst, t** *un*tions `isS*nsitiv*R*sour**` *n*