Every CVE Search/ Get API key

CVE-2026-62286

Dozzle label filters do not restrict container event and statistics streams

4.3 MediumFix available

Dozzle is a realtime log viewer for docker containers. Prior to 10.6.7, streamEvents in internal/web/events.go applies a restricted user's label filter to container lists but not to the container-stat and container-event channels returned by GET /api/events/stream. In a simple-auth deployment using per-user filters, any authenticated restricted account can receive resource telemetry and lifecycle events for containers outside its authorized label scope. The exposed data includes container names, images, full label maps, CPU and memory use, network and disk totals, and deployment or restart activity across monitored hosts, but does not include log contents, environment values, or exec access. This issue is fixed in version 10.6.7.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
Low
User interaction
None

What an attacker can affect

Confidentiality
Low
Integrity
None
Availability
None

Exploit likelihood

0.43%Up 0.1 points since Sep 25, 2026
90%50%10%1%

What each source reports

CVE List Score used 4.3

Dozzle label filters do not restrict container event and statistics streams

Dozzle is a realtime log viewer for docker containers. Prior to 10.6.7, streamEvents in internal/web/events.go applies a restricted user's label filter to container lists but not to the container-stat and container-event channels returned by GET /api/events/stream. In a simple-auth deployment using per-user filters, any authenticated restricted account can receive resource telemetry and lifecycle events for containers outside its authorized label scope. The exposed data includes container names, images, full label maps, CPU and memory use, network and disk totals, and deployment or restart activity across monitored hosts, but does not include log contents, environment values, or exec access. This issue is fixed in version 10.6.7.

Record
CVE-2026-62286
CVSS 3.1
4.3 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-200, CWE-285
Updated
2026-11-02
EUVDEUVD-2026-86343 4.3

Dozzle is a realtime log viewer for docker containers. Prior to 10.6.7, streamEvents in internal/web/events.go applies a restricted user's label filter to container lists but not to the container-stat and container-event channels returned by GET /api/events/stream. In a simple-auth deployment using per-user filters, any authenticated restricted account can receive resource telemetry and lifecycle events for containers outside its authorized label scope. The exposed data includes container names, images, full label maps, CPU and memory use, network and disk totals, and deployment or restart activity across monitored hosts, but does not include log contents, environment values, or exec access. This issue is fixed in version 10.6.7.

Record
EUVD-2026-86343
CVSS 3.1
4.3 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-xcw9-qmmf-vqxj 4.3

Dozzle label filters do not restrict container event and statistics streams

Summary

Dozzle supports per-user label filters in users.yml that are documented as an access-control boundary: "Filters are used to restrict the containers that a user can see" and "the guest user can only see containers with the label com.example.app … useful for restricting access to specific containers" (docs/guide/authentication.md). This is the mechanism operators use to give different users/tenants visibility into disjoint subsets of containers on the same host.

The events stream handler streamEvents (GET /api/events/stream) honors that filter for the initial container list and for the incremental containers-changed updates, but it forwards two other channels — container-stat (live per-container CPU, memory, network and disk telemetry) and container-event (container lifecycle events: start/die/destroy/rename/pause/unpause, with the container's full attribute/label set) — to every authenticated client unconditionally, with no comparison against the caller's label filter. The upstream subscription SubscribeEventsAndStats fans out across every Docker client/host and never receives a label filter at all.

As a result, any authenticated user — including one explicitly constrained to a single label scope — receives live resource telemetry for every container on every monitored host, plus lifecycle events carrying each container's name, image and complete label map. This crosses the exact isolation boundary the filter feature is documented to enforce. The leak requires no special role (it is not gated behind the shell/actions/download roles) and works on the local Docker host, so it is distinct from the previously-patched agent-path exec/attach bypass (CVE-2026-24740 / GHSA-m855-r557-5rc5) and from the exec/attach CSWSH issue (CVE-2026-44985 / GHSA-j643-x8pv-8m67).

Affected code (v10.6.5)

internal/web/events.go — streamEvents. The handler resolves the caller's userLabels and applies them to the initial list (ListAllContainers(userLabels)) and to the containers-changed increment (ListContainersForHost(event.Host, userLabels)), but forwards container-stat and the raw container-event with no filter check:

h.hostService.SubscribeEventsAndStats(r.Context(), events, stats)   // no labels passed
...
userLabels := h.config.Labels
if h.config.Authorization.Provider != NONE {
    user := auth.UserFromContext(r.Context())
    if user.ContainerLabels.Exists() {
        userLabels = user.ContainerLabels
    }
}
allContainers, errors := h.hostService.ListAllContainers(userLabels)   // filtered (correct)
...
case stat := <-stats:
    if err := sseWriter.Event("container-stat", stat); err != nil {     // NOT filtered
        ...
    }
case event, ok := <-events:
    ...
    switch event.Name {
    case "start", "die", "destroy", "rename", "pause", "unpause":
        if event.Name == "start" || event.Name == "rename" {
            if containers, err := h.hostService.ListContainersForHost(event.Host, userLabels); err == nil {
                ... sseWriter.Event("containers-changed", containers) ... // filtered (correct)
            }
        }
        if err := sseWriter.Event("container-event", event); err != nil { // NOT filtered
            ...
        }

internal/support/docker/multi_host_service.go — SubscribeEventsAndStats subscribes to events and stats from every client with no label filter argument:

func (m *MultiHostService) SubscribeEventsAndStats(ctx context.Context, events chan<- container.ContainerEvent, stats chan<- container.ContainerStat) {
    for _, client := range m.manager.List() {
        client.SubscribeEvents(ctx, events)
        client.SubscribeStats(ctx, stats)
    }
}

The payloads carry the disclosed data. ContainerStat (internal/container/types.go) includes id, cpu, memory, memoryUsage, networkRxTotal, networkTxTotal, diskReadTotal, diskWriteTotal. ContainerEvent includes host, actorId and actorAttributes (a…

Record
GHSA-xcw9-qmmf-vqxj
CVSS 3.1
4.3 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-200, CWE-285
Updated
2026-11-02
NVD 4.3

Dozzle is a realtime log viewer for docker containers. Prior to 10.6.7, streamEvents in internal/web/events.go applies a restricted user's label filter to container lists but not to the container-stat and container-event channels returned by GET /api/events/stream. In a simple-auth deployment using per-user filters, any authenticated restricted account can receive resource telemetry and lifecycle events for containers outside its authorized label scope. The exposed data includes container names, images, full label maps, CPU and memory use, network and disk totals, and deployment or restart activity across monitored hosts, but does not include log contents, environment values, or exec access. This issue is fixed in version 10.6.7.

Record
CVE-2026-62286
CVSS 3.1
4.3 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-200, CWE-285
Updated
2026-11-02
OSV 4.3

Dozzle label filters do not restrict container event and statistics streams

Dozzle is a realtime log viewer for docker containers. Prior to 10.6.7, streamEvents in internal/web/events.go applies a restricted user's label filter to container lists but not to the container-stat and container-event channels returned by GET /api/events/stream. In a simple-auth deployment using per-user filters, any authenticated restricted account can receive resource telemetry and lifecycle events for containers outside its authorized label scope. The exposed data includes container names, images, full label maps, CPU and memory use, network and disk totals, and deployment or restart activity across monitored hosts, but does not include log contents, environment values, or exec access. This issue is fixed in version 10.6.7.

Record
CVE-2026-62286
CVSS 3.1
4.3 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-200, CWE-285
Updated
2026-11-02
OSVGHSA-xcw9-qmmf-vqxj 4.3

Dozzle label filters do not restrict container event and statistics streams

Summary

Dozzle supports per-user label filters in users.yml that are documented as an access-control boundary: "Filters are used to restrict the containers that a user can see" and "the guest user can only see containers with the label com.example.app … useful for restricting access to specific containers" (docs/guide/authentication.md). This is the mechanism operators use to give different users/tenants visibility into disjoint subsets of containers on the same host.

The events stream handler streamEvents (GET /api/events/stream) honors that filter for the initial container list and for the incremental containers-changed updates, but it forwards two other channels — container-stat (live per-container CPU, memory, network and disk telemetry) and container-event (container lifecycle events: start/die/destroy/rename/pause/unpause, with the container's full attribute/label set) — to every authenticated client unconditionally, with no comparison against the caller's label filter. The upstream subscription SubscribeEventsAndStats fans out across every Docker client/host and never receives a label filter at all.

As a result, any authenticated user — including one explicitly constrained to a single label scope — receives live resource telemetry for every container on every monitored host, plus lifecycle events carrying each container's name, image and complete label map. This crosses the exact isolation boundary the filter feature is documented to enforce. The leak requires no special role (it is not gated behind the shell/actions/download roles) and works on the local Docker host, so it is distinct from the previously-patched agent-path exec/attach bypass (CVE-2026-24740 / GHSA-m855-r557-5rc5) and from the exec/attach CSWSH issue (CVE-2026-44985 / GHSA-j643-x8pv-8m67).

Affected code (v10.6.5)

internal/web/events.go — streamEvents. The handler resolves the caller's userLabels and applies them to the initial list (ListAllContainers(userLabels)) and to the containers-changed increment (ListContainersForHost(event.Host, userLabels)), but forwards container-stat and the raw container-event with no filter check:

h.hostService.SubscribeEventsAndStats(r.Context(), events, stats)   // no labels passed
...
userLabels := h.config.Labels
if h.config.Authorization.Provider != NONE {
    user := auth.UserFromContext(r.Context())
    if user.ContainerLabels.Exists() {
        userLabels = user.ContainerLabels
    }
}
allContainers, errors := h.hostService.ListAllContainers(userLabels)   // filtered (correct)
...
case stat := <-stats:
    if err := sseWriter.Event("container-stat", stat); err != nil {     // NOT filtered
        ...
    }
case event, ok := <-events:
    ...
    switch event.Name {
    case "start", "die", "destroy", "rename", "pause", "unpause":
        if event.Name == "start" || event.Name == "rename" {
            if containers, err := h.hostService.ListContainersForHost(event.Host, userLabels); err == nil {
                ... sseWriter.Event("containers-changed", containers) ... // filtered (correct)
            }
        }
        if err := sseWriter.Event("container-event", event); err != nil { // NOT filtered
            ...
        }

internal/support/docker/multi_host_service.go — SubscribeEventsAndStats subscribes to events and stats from every client with no label filter argument:

func (m *MultiHostService) SubscribeEventsAndStats(ctx context.Context, events chan<- container.ContainerEvent, stats chan<- container.ContainerStat) {
    for _, client := range m.manager.List() {
        client.SubscribeEvents(ctx, events)
        client.SubscribeStats(ctx, stats)
    }
}

The payloads carry the disclosed data. ContainerStat (internal/container/types.go) includes id, cpu, memory, memoryUsage, networkRxTotal, networkTxTotal, diskReadTotal, diskWriteTotal. ContainerEvent includes host, actorId and actorAttributes (a…

Record
GHSA-xcw9-qmmf-vqxj
CVSS 3.1
4.3 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-200, CWE-285
Updated
2026-11-02
OSVGO-2026-6592 No score

Dozzle label filters do not restrict container event and statistics streams in github.com/amir20/dozzle

Dozzle label filters do not restrict container event and statistics streams in github.com/amir20/dozzle

Record
GO-2026-6592
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
github.com/amir20/dozzle
Go
before 1.29.1-0.20260622172006-19c01e0fb491
1.29.1-0.20260622172006-19c01e0fb491

History

History
RecordedChangedSources
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-62286 is a medium vulnerability (CVSS 4.3) in Amir20 Dozzle, published September 24, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.43%, the 36th percentile. Fixed in github.com/amir20/dozzle 1.29.1-0.20260622172006-19c01e0fb491.

References

This page doesn't list everything

Left out here: the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open