<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://db.gcve.eu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-02T07:58:15.791446+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@gcve.eu</email>
  </author>
  <link href="https://db.gcve.eu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://db.gcve.eu/vuln/fkie_cve-2026-47124</id>
    <title>fkie_cve-2026-47124</title>
    <updated>2026-10-02T07:58:15.793429+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>Nezha Monitoring is a self-hostable, lightweight, servers and websites monitoring and O&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.</p>
      </div>
    </content>
    <link href="https://db.gcve.eu/vuln/fkie_cve-2026-47124"/>
  </entry>
  <entry>
    <id>https://db.gcve.eu/vuln/ghsa-hvv7-hfrh-7gxj</id>
    <title>GHSA-hvv7-hfrh-7gxj — Nezha Monitoring: Nezha WebSocket server stream discloses cross-tenant server telemetry to authenticated members</title>
    <updated>2026-10-02T07:58:15.793497+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> Go: github.com/nezhahq/nezha</p>
<p>### Summary</p>
<p>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.</p>
<p>### Details</p>
<p>The server WebSocket route is registered under the optional-auth group in `cmd/dashboard/controller/controller.go:71-73`:</p>
<p>```go
optionalAuth := api.Group("", optionalAuthMw)
optionalAuth.GET("/ws/server", commonHandler(serverStream))
```</p>
<p>`serverStream` treats any `CtxKeyAuthorizedUser` as a member, without checking admin role or per-server ownership, in `cmd/dashboard/controller/ws.go:123-139`:</p>
<p>```go
u, isMember := c.Get(model.CtxKeyAuthorizedUser)
var userId uint64
if isMember {
    userId = u.(*model.User).ID
}
...
stat, err := getServerStat(count == 0, isMember)
```</p>
<p>The authorization boolean is then used as a full/guest switch in `getServerStat` in `cmd/dashboard/controller/ws.go:160-184`:</p>
<p>```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, ""),
    DisplayIndex: server.DisplayIndex,
    Host:         utils.IfOr(authorized, server.H…</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/ghsa-hvv7-hfrh-7gxj"/>
  </entry>
</feed>
