VYPR
High severityOSV Advisory· Published Jan 21, 2026· Updated Jan 22, 2026

Fleet has an Access Control vulnerability in debug/pprof endpoints

CVE-2026-23517

Description

Fleet is open source device management software. A broken access control issue in versions prior to 4.78.3, 4.77.1, 4.76.2, 4.75.2, and 4.53.3 allowed authenticated users to access debug and profiling endpoints regardless of role. As a result, low-privilege users could view internal server diagnostics and trigger resource-intensive profiling operations. Fleet’s debug/pprof endpoints are accessible to any authenticated user regardless of role, including the lowest-privilege “Observer” role. This allows low-privilege users to access sensitive server internals, including runtime profiling data and in-memory application state, and to trigger CPU-intensive profiling operations that could lead to denial of service. Versions 4.78.3, 4.77.1, 4.76.2, 4.75.2, and 4.53.3 fix the issue. If an immediate upgrade is not possible, users should put the debug/pprof endpoints behind an IP allowlist as a workaround.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
github.com/fleetdm/fleetGo
>= 4.78.0, < 4.78.34.78.3
github.com/fleetdm/fleetGo
>= 4.77.0, < 4.77.14.77.1
github.com/fleetdm/fleetGo
>= 4.76.0, < 4.76.24.76.2
github.com/fleetdm/fleetGo
>= 4.75.0, < 4.75.24.75.2
github.com/fleetdm/fleet/v4Go
< 4.78.3-0.20260112221730-5c030e32a3a94.78.3-0.20260112221730-5c030e32a3a9

Affected products

1
  • Range: fleet-v4.75.0, fleet-v4.75.1, fleet-v4.76.0, …

Patches

1
5c030e32a3a9

Revise auth requirements for debug endpoints (#38173)

https://github.com/fleetdm/fleetIan LittmanJan 12, 2026via ghsa
3 files changed · +37 3
  • changes/pprof-tweaks+1 0 added
    @@ -0,0 +1 @@
    +* Revised auth requirements for /debug endpoints
    
  • server/service/debug_handler.go+1 1 modified
    @@ -39,7 +39,7 @@ func (m *debugAuthenticationMiddleware) Middleware(next http.Handler) http.Handl
     			return
     		}
     
    -		if !v.CanPerformActions() {
    +		if !v.CanPerformActions() || v.User.GlobalRole == nil || *v.User.GlobalRole != fleet.RoleAdmin {
     			http.Error(w, "Unauthorized", http.StatusForbidden)
     			return
     		}
    
  • server/service/debug_handler_test.go+35 2 modified
    @@ -9,6 +9,7 @@ import (
     
     	"github.com/fleetdm/fleet/v4/server/config"
     	"github.com/fleetdm/fleet/v4/server/fleet"
    +	"github.com/fleetdm/fleet/v4/server/ptr"
     	"github.com/stretchr/testify/assert"
     	"github.com/stretchr/testify/mock"
     )
    @@ -66,7 +67,39 @@ func TestDebugHandlerAuthenticationSessionInvalid(t *testing.T) {
     	assert.Equal(t, http.StatusUnauthorized, res.Code)
     }
     
    -func TestDebugHandlerAuthenticationSuccess(t *testing.T) {
    +func TestDebugHandlerAuthenticationFailsDueToRole(t *testing.T) {
    +	for test, user := range map[string]fleet.User{
    +		"no role":                {},
    +		"global observer role":   {GlobalRole: ptr.String(fleet.RoleObserver)},
    +		"global maintainer role": {GlobalRole: ptr.String(fleet.RoleMaintainer)},
    +		"non-global role":        {Teams: []fleet.UserTeam{{Team: fleet.Team{ID: 1, Name: "foo"}, Role: fleet.RoleAdmin}}},
    +	} {
    +		t.Run(test, func(t *testing.T) {
    +			svc := &mockService{}
    +			svc.On(
    +				"GetSessionByKey",
    +				mock.Anything,
    +				"fake_session_key",
    +			).Return(&fleet.Session{UserID: 42, ID: 1}, nil)
    +			svc.On(
    +				"UserUnauthorized",
    +				mock.Anything,
    +				uint(42),
    +			).Return(&user, nil)
    +
    +			handler := MakeDebugHandler(svc, testConfig, nil, nil, nil)
    +
    +			req := httptest.NewRequest(http.MethodGet, "https://fleetdm.com/debug/pprof/cmdline", nil)
    +			req.Header.Add("Authorization", "BEARER fake_session_key")
    +			res := httptest.NewRecorder()
    +
    +			handler.ServeHTTP(res, req)
    +			assert.Equal(t, http.StatusForbidden, res.Code)
    +		})
    +	}
    +}
    +
    +func TestDebugHandlerAuthenticationSucceeds(t *testing.T) {
     	svc := &mockService{}
     	svc.On(
     		"GetSessionByKey",
    @@ -77,7 +110,7 @@ func TestDebugHandlerAuthenticationSuccess(t *testing.T) {
     		"UserUnauthorized",
     		mock.Anything,
     		uint(42),
    -	).Return(&fleet.User{}, nil)
    +	).Return(&fleet.User{GlobalRole: ptr.String(fleet.RoleAdmin)}, nil)
     
     	handler := MakeDebugHandler(svc, testConfig, nil, nil, nil)
     
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

5

News mentions

0

No linked articles in our index yet.