<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Fri, 02 Oct 2026 07:58:15 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-47124</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-47124</link>
      <description>&lt;p&gt;Nezha Monitoring is a self-hostable, lightweight, servers and websites monitoring and O&amp;amp;M tool. From version 1.4.0 to before version 2.0.9, any authenticated non-admin member can connect to the server-status WebSocket and receive telemetry for all servers, including servers owned by other users. The normal server list API filters objects by HasPermission, but the WebSocket stream treats the presence of any authenticated user as authorization for the full unfiltered server list. This issue has been patched in version 2.0.9.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Nezha Monitoring is a self-hostable, lightweight, servers and websites monitoring and O&amp;amp;M tool. From version 1.4.0 to before version 2.0.9, any authenticated non-admin member can connect to the server-status WebSocket and receive telemetry for all servers, including servers owned by other users. The normal server list API filters objects by HasPermission, but the WebSocket stream treats the presence of any authenticated user as authorization for the full unfiltered server list. This issue has been patched in version 2.0.9.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-47124</guid>
    </item>
    <item>
      <title>GHSA-hvv7-hfrh-7gxj — Nezha Monitoring: Nezha WebSocket server stream discloses cross-tenant server telemetry to authenticated members</title>
      <link>https://db.gcve.eu/vuln/ghsa-hvv7-hfrh-7gxj</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/nezhahq/nezha&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;Any authenticated non-admin member can connect to the server-status WebSocket and receive telemetry for all servers, including servers owned by other users. The normal server list API filters objects by `HasPermission`, but the WebSocket stream treats the presence of any authenticated user as authorization for the full unfiltered server list.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;The server WebSocket route is registered under the optional-auth group in `cmd/dashboard/controller/controller.go:71-73`:&lt;/p&gt;
&lt;p&gt;```go
optionalAuth := api.Group(&amp;#34;&amp;#34;, optionalAuthMw)
optionalAuth.GET(&amp;#34;/ws/server&amp;#34;, commonHandler(serverStream))
```&lt;/p&gt;
&lt;p&gt;`serverStream` treats any `CtxKeyAuthorizedUser` as a member, without checking admin role or per-server ownership, in `cmd/dashboard/controller/ws.go:123-139`:&lt;/p&gt;
&lt;p&gt;```go
u, isMember := c.Get(model.CtxKeyAuthorizedUser)
var userId uint64
if isMember {
    userId = u.(*model.User).ID
}
...
stat, err := getServerStat(count == 0, isMember)
```&lt;/p&gt;
&lt;p&gt;The authorization boolean is then used as a full/guest switch in `getServerStat` in `cmd/dashboard/controller/ws.go:160-184`:&lt;/p&gt;
&lt;p&gt;```go
if authorized {
    serverList = singleton.ServerShared.GetSortedList()
} else {
    serverList = singleton.ServerShared.GetSortedListForGuest()
}
...
servers = append(servers, model.StreamServer{
    ID:           server.ID,
    Name:         server.Name,
    PublicNote:   utils.IfOr(withPublicNote, server.PublicNote, &amp;#34;&amp;#34;),
    DisplayIndex: server.DisplayIndex,
    Host:         utils.IfOr(authorized, server.H…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/nezhahq/nezha&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;Any authenticated non-admin member can connect to the server-status WebSocket and receive telemetry for all servers, including servers owned by other users. The normal server list API filters objects by `HasPermission`, but the WebSocket stream treats the presence of any authenticated user as authorization for the full unfiltered server list.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;The server WebSocket route is registered under the optional-auth group in `cmd/dashboard/controller/controller.go:71-73`:&lt;/p&gt;
&lt;p&gt;```go
optionalAuth := api.Group(&amp;#34;&amp;#34;, optionalAuthMw)
optionalAuth.GET(&amp;#34;/ws/server&amp;#34;, commonHandler(serverStream))
```&lt;/p&gt;
&lt;p&gt;`serverStream` treats any `CtxKeyAuthorizedUser` as a member, without checking admin role or per-server ownership, in `cmd/dashboard/controller/ws.go:123-139`:&lt;/p&gt;
&lt;p&gt;```go
u, isMember := c.Get(model.CtxKeyAuthorizedUser)
var userId uint64
if isMember {
    userId = u.(*model.User).ID
}
...
stat, err := getServerStat(count == 0, isMember)
```&lt;/p&gt;
&lt;p&gt;The authorization boolean is then used as a full/guest switch in `getServerStat` in `cmd/dashboard/controller/ws.go:160-184`:&lt;/p&gt;
&lt;p&gt;```go
if authorized {
    serverList = singleton.ServerShared.GetSortedList()
} else {
    serverList = singleton.ServerShared.GetSortedListForGuest()
}
...
servers = append(servers, model.StreamServer{
    ID:           server.ID,
    Name:         server.Name,
    PublicNote:   utils.IfOr(withPublicNote, server.PublicNote, &amp;#34;&amp;#34;),
    DisplayIndex: server.DisplayIndex,
    Host:         utils.IfOr(authorized, server.H…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-hvv7-hfrh-7gxj</guid>
    </item>
  </channel>
</rss>
