MOKSHA-2026-0077: VIF NIC Offload Disablement via VIF.other_config ethtool Keys

Advisory IDMOKSHA-2026-0077
Semantic IDVIOC-4
Published2026-04-24
CVSS 3.14.3 Medium
CVSS 3.1 VectorAV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L
CVSS 4.05.3 Medium
CVSS 4.0 VectorAV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
XAPI ObjectVIF
XAPI Fieldother_config:ethtool-*
Entry Rolevm-admin
ResearcherJakob Wolffhechel, Moksha

Affected Products

VendorProductVersions
Citrix / Cloud Software GroupXenServer / Citrix Hypervisorall versions (shared XAPI codebase)
VatesXCP-ng8.3.0

Summary

A vm-admin in XAPI-based hypervisors (XenServer, XCP-ng) can disable NIC offload features on virtual network interfaces by setting ethtool-tso=off, ethtool-gso=off, and other ethtool-* keys in VIF.other_config. The VIF hotplug script (vif-real:85-97) reads these keys from xenstore and executes /sbin/ethtool -K <dev> <feature> <on|off> on the VIF backend device. Disabling offloads forces the host CPU to perform TCP/UDP segmentation in software for that VIF's traffic, increasing CPU utilization. When offloads are disabled on multiple VIFs, the cumulative effect degrades host performance for all co-located VMs. The VIF.other_config field has zero map_keys_roles entries.

Vulnerability Description

VIF.other_config is a Map(String, String) field defined at datamodel.ml:3914-3917 with no ~writer_roles override and no ~map_keys_roles. It inherits _R_VM_ADMIN from the VIF class default.

For standard VIFs, xenopsd applies a whitelist filter at device.ml:827-829 that restricts the keys written to xenstore to 7 known values: promiscuous, ethtool-rx, ethtool-tx, ethtool-sg, ethtool-tso, ethtool-ufo, ethtool-gso. The ethtool keys pass through the whitelist.

The VIF hotplug script at vif-real:85-97:

handle_ethtool()
{
    local opt=$1
    local arg=$(xenstore-read "${PRIVATE}/other-config/ethtool-${opt}" 2>/dev/null)
    if [ $? -eq 0 -a -n "${arg}" ] ; then
        case "${arg}" in
            true|on)   /sbin/ethtool -K "${dev}" "${opt}" on ;;
            false|off) /sbin/ethtool -K "${dev}" "${opt}" off ;;
            *) logger -t scripts-vif "Unknown ethtool argument ..." ;;
        esac
    fi
}

The script validates values against true|on|false|off - this is adequate value validation. Invalid values are logged and ignored. The security concern is the missing RBAC: a vm-admin can disable offloads on any VIF they control, affecting host-level CPU utilization.

The offload features controllable from VIF.other_config:

Root Causes

  1. Missing RBAC protection. VIF.other_config has zero map_keys_roles entries. All ethtool-* keys are writable by vm-admin, the lowest delegated management role.

  2. Host-level impact from VM-level operation. Disabling offloads on a VIF backend device increases host CPU utilization, affecting all co-located VMs - not just the VIF's own VM.

  3. No rate limiting or aggregate impact assessment. XAPI does not limit how many VIFs can have offloads disabled or assess the cumulative CPU impact.

  4. set_other_config RBAC bypass. The set_other_config method replaces the entire map atomically and bypasses map_keys_roles per-key checks.

Affected Systems

Directly Affected

Indirectly Affected

Exploitation Scenarios

Scenario Impact Pre-conditions Status
VIF offload disablement Host CPU increase for VIF's traffic processing vm-admin, VIF on running VM Source-traced
Multi-VIF CPU saturation Cumulative offload disablement across many VIFs degrades host vm-admin with multiple VMs/VIFs Modeled
Co-located VM performance impact Neighbor VMs experience CPU contention from software segmentation vm-admin, shared host Modeled
BOC-1 chain vm-admin disables offloads on all VIFs pool-wide via root access vm-admin, BOC-1 Source-traced

Chaining Analysis

Detection

Remediation

Short-Term Mitigations

Long-Term Fix

Add map_keys_roles protection. Restrict ethtool-* keys to _R_POOL_ADMIN in datamodel.ml. NIC offload configuration on a VIF backend device is a host infrastructure operation, not a VM administration operation.

Move offload control to a dedicated field. Replace the ethtool-* other_config keys with a dedicated VIF field that has proper RBAC and validation.

Upstream patches exist. They are held privately pending coordinated disclosure.

Disclosure

Disclosure:

References

Credits

Discovered and reported by Jakob Wolffhechel, Moksha.

Jakob Wolffhechel · Moksha · Copenhagen
jakob@wolffhechel.dk · +45 3170 7337
Published 2026-04-24 08:00 CEST · cna.moksha.dk · shittrix.moksha.dk