CVE-2026-9266
SHADOW_DORKS: ["Moxa embedded Linux TPM", "Moxa CVE-2026-9266", "Moxa TPM2 parameter encryption"]
Executive Summary
CVE-2026-9266 is a Missing Required Cryptographic Step vulnerability in Moxa’s embedded Linux firmware for industrial computers and controllers. This flaw represents an incomplete remediation of CVE-2026-0714. The vendor attempted to introduce TPM2 parameter encryption as a countermeasure, but an omission in the authorization session configuration renders the encryption ineffective. An attacker with invasive physical access can capture TPM communications on the SPI bus and derive the LUKS disk encryption key in plaintext. While remote exploitation is not possible, successful exploitation leads to full compromise of the encrypted disk volume. The attack requires opening the device and attaching external equipment to the SPI bus, and does not affect downstream systems.
Key Risk: Physical compromise of encrypted data at rest on Moxa industrial devices.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:P/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
- Base Score: 4.6 (Medium)
- Attack Vector: Physical (AV:P) – requires invasive physical access.
- Attack Complexity: Low (AC:L) – standard SPI bus probing tools suffice.
- Privileges Required: None (PR:N)
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: High (C:H) – LUKS key fully exposed.
- Integrity Impact: None (I:N)
- Availability Impact: None (A:N)
Threat Level: Medium – Exploitation is physically invasive but yields high-value cryptographic material.
Deep Dive & Mechanics
The vulnerability stems from a flawed implementation of TPM2 parameter encryption in Moxa’s embedded Linux firmware. The firmware was patched for CVE-2026-0714 by enabling TPM2 parameter encryption to protect TPM commands and responses from eavesdropping on the SPI bus. However, the authorization session configuration was omitted, meaning the encryption key used for parameter encryption is not properly bound to the session. As a result, the encryption provides no effective protection—an attacker can still capture the plaintext TPM traffic.
Technical Flow:
- The device boots and uses TPM to unseal the LUKS disk encryption key.
- The TPM2 parameter encryption is enabled but the authorization session is misconfigured (missing required HMAC or salt).
- An attacker probes the SPI bus between the CPU and TPM chip using a logic analyzer or SPI sniffer.
- The attacker captures the TPM command/response traffic, which is transmitted in plaintext despite the encryption flag.
- The LUKS key is extracted from the captured data.
- The attacker can then decrypt the disk volume offline.
Root Cause: Incomplete remediation of CVE-2026-0714 – the encryption was added but the session setup was not corrected.
Vulnerable vs. Patched Code
No official patch is available. The vulnerable code is in the TPM2 stack initialization within the firmware. The missing step is the proper configuration of the authorization session (e.g., setting TPM2_RS_PW or using a proper HMAC session).
Vulnerable Code (Conceptual):
// TPM2 session setup - missing authorization configuration
TPM2_StartAuthSession(sessionHandle, tpmKey, bindKey, nonceCaller, encryptedSalt, sessionType, symmetric, authHash);
// Parameter encryption enabled but session not bound
TPM2_EncryptDecrypt(encrypt, decrypt, keyHandle, iv, data, dataSize);
Patched Code (Expected):
// Proper session setup with authorization
TPM2_StartAuthSession(sessionHandle, tpmKey, bindKey, nonceCaller, encryptedSalt, sessionType, symmetric, authHash);
// Bind session to encryption operation
TPM2_EncryptDecrypt(encrypt, decrypt, keyHandle, iv, data, dataSize, sessionHandle);
The patch must ensure the authorization session is correctly linked to the encryption operation, preventing plaintext exposure on the SPI bus.
Exploitation & Lab Setup
Red Team
Prerequisites:
- Physical access to the Moxa device.
- SPI bus probing equipment (e.g., Saleae Logic Analyzer, Bus Pirate).
- LUKS key extraction tools (e.g.,
luksDump, custom script).
Exploitation Steps:
- Open the device enclosure to access the mainboard.
- Identify the SPI bus lines (SCK, MOSI, MISO, CS) between the CPU and TPM chip.
- Connect the logic analyzer probes to the SPI lines.
- Power on the device and capture the boot sequence.
- Filter the captured SPI traffic for TPM commands (e.g.,
TPM2_CC_Unseal). - Extract the LUKS key from the plaintext TPM response.
- Use the key to decrypt the disk volume offline.
Example SPI Capture Filter (Python):
import spidev
# Not actual exploit code - conceptual
spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 1000000
# Capture TPM traffic
while True:
resp = spi.readbytes(256)
if b'TPM2_CC_Unseal' in resp:
print("Captured TPM command")
# Extract key
Blue Team
Detection:
- Monitor for physical intrusion (tamper switches, enclosure seals).
- Use SPI bus monitoring with anomaly detection (e.g., unexpected TPM commands).
- Implement TPM2 session authorization verification at boot.
Mitigation:
- Apply firmware patch when available.
- Use physical security measures (tamper-evident seals, locked enclosures).
- Enable TPM2 audit logs and monitor for unauthorized access.
Indicators of Compromise (IOCs)
- Physical: Broken tamper seals, opened device enclosure.
- SPI Bus: Unusual TPM command sequences or repeated
TPM2_CC_Unsealcalls. - Logs: TPM audit log entries showing failed authorization attempts.
- Network: No network IOCs – attack is purely physical.
Detection Engineering
YARA Rule
rule CVE_2026_9266_TPM_Missing_Auth {
meta:
description = "Detects TPM2 session setup missing authorization configuration in Moxa firmware"
author = "Valters IT"
date = "2026-01-01"
reference = "CVE-2026-9266"
strings:
$tpm_start = "TPM2_StartAuthSession" ascii wide nocase
$tpm_encrypt = "TPM2_EncryptDecrypt" ascii wide nocase
$missing_auth = { 00 00 00 00 } // placeholder for missing session handle
condition:
$tpm_start and $tpm_encrypt and $missing_auth
}
Sigma Rule
title: CVE-2026-9266 TPM2 Missing Authorization Session
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects TPM2 session setup without proper authorization configuration in Moxa firmware logs
author: Valters IT
date: 2026-01-01
logsource:
product: linux
service: tpm2
detection:
selection:
EventID: 1
Command: "TPM2_StartAuthSession"
Parameters|contains: "encryptedSalt"
condition: selection
falsepositives:
- Legitimate TPM2 operations with proper authorization
level: high
Suricata Rule
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2026-9266 TPM2 Missing Authorization Session"; flow:to_server; content:"TPM2_StartAuthSession"; content:"TPM2_EncryptDecrypt"; distance:0; within:100; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Physical Security: Restrict physical access to Moxa devices. Use tamper-evident seals and locked enclosures.
- Firmware Update: Apply the vendor patch when released. Monitor Moxa’s security advisory page.
- Workaround: If patching is not possible, disable TPM2 parameter encryption and rely on alternative disk encryption methods (e.g., software LUKS with strong passphrase).
Long-Term Fix:
- Ensure TPM2 authorization sessions are correctly configured with HMAC or password authentication.
- Validate that parameter encryption is bound to the session handle.
- Conduct security audits of TPM2 stack implementations.
Detection:
- Deploy YARA/Sigma rules to scan firmware images for missing authorization.
- Monitor TPM audit logs for anomalies.
Valters IT