↳ GitHub sourceAnalytics ruleHigh

Tailscale: User role elevated to admin or owner

Description

Identifies when a user's tailnet role changes from a lower-privilege role to admin, network-admin, or owner between consecutive snapshots. Privilege escalation is a high-value attacker objective and warrants prompt review.
Rule type
Scheduled
Version
1.0.0
Declared status
Available
Query frequency
1h
Query period
2d
Trigger
gt 0

Declared MITRE coverage

Declared sources

Metadata from the source file. No dependencies inferred from KQL.

Connectors

Data types

KQL query

Original query, unchanged.

let elevated = dynamic(["admin", "network-admin", "owner"]);
let recent =
    Tailscale_Users_CL
    | where TimeGenerated > ago(1h)
    | summarize arg_max(TimeGenerated, *) by UserId
    | where Role in (elevated)
    | project UserId, LoginName, RoleNow = Role;
let prior =
    Tailscale_Users_CL
    | where TimeGenerated between (ago(2d) .. ago(1h))
    | summarize arg_max(TimeGenerated, *) by UserId
    | project UserId, RolePrior = Role;
recent
| join kind=inner prior on UserId
| where RoleNow != RolePrior
| where RolePrior !in (elevated)
| project TimeGenerated = now(), UserId, LoginName, RolePrior, RoleNow

Declared entities

Account

Related content

Links established from declared identifiers and solution manifests.

Source provenance

GitHub

Displayed values come from files in Azure/Azure-Sentinel. They describe the published template, not your workspace configuration.

Source identifier
d3c4e5f6-3456-7890-12ab-cdef12345003
Additional source files 2Solutions/Tailscale (CCF)/Analytic Rules/TailscaleUserRoleElevated.yamlsource ↗Solutions/Tailscale (CCF)/Data/Solution_Tailscale.jsonsolution-membership ↗
GSTEP / CATALOG TRACKING

Added to catalog : 16 Sept 2026 · 05:49 UTC
Last change observed : 16 Sept 2026 · 05:49 UTC

GSTEP sync dates, separate from the source content’s publication dates.