Feb 4, 2026·6 min read·32 visits
EVE OS developers moved the configuration partition measurement to TPM PCR 14 but forgot to tell the TPM to check it. Attackers can modify system configs (like SSH keys) without preventing the device from unlocking its encrypted vault.
A critical oversight in the EVE OS Trusted Platform Module (TPM) implementation allowed attackers to bypass Measured Boot protections. By failing to include Platform Configuration Register (PCR) 14 in the sealing policy, the system permitted unauthorized modifications to the configuration partition without locking the encryption keys.
Imagine a high-security vault that requires a retina scan, a fingerprint, and a voice print to open. It’s impenetrable. Now imagine the security guard decides to stop checking the voice print because he's tired, but he doesn't tell anyone. That is effectively what happened inside EVE OS.
EVE OS relies on a hardware root of trust—the Trusted Platform Module (TPM)—to implement 'Measured Boot'. The idea is simple: as the device boots, it calculates cryptographic hashes of every component (BIOS, bootloader, kernel, config) and stores them in Platform Configuration Registers (PCRs).
The device's 'vault' key (which decrypts your data) is 'sealed' against these PCRs. The TPM is essentially told: 'Only release this key if PCR 0 through PCR 13 look exactly like they did when we set this up.' If a hacker modifies the kernel, the hash changes, the PCR values mismatch, and the TPM tells the hacker to get lost. The vault stays locked.
But in CVE-2023-43634, we found out that EVE OS was strictly checking the front door while leaving the garage side-door wide open. They were measuring a critical component, but they weren't actually checking the measurement.
The root cause of this vulnerability is a classic case of 'I thought you handled that.' In the world of TPMs, different PCR indices are reserved for different things. Historically, EVE OS measured its configuration partition into PCR 13. This partition holds the keys to the kingdom—API endpoints, authorized SSH keys, and system settings.
At some point, a developer decided to clean house. In commit 56e5897, the measurement of the configuration partition was moved from PCR 13 to PCR 14. This makes sense organizationally. It keeps things tidy.
However, there are two steps to this dance: 1) Measure the data into the register, and 2) Tell the TPM to validate that register before unsealing the keys. They did step 1 perfectly. They completely forgot step 2.
The DiskKeySealingPCRs list—the policy that dictates what the TPM checks—was never updated to include PCR 14. So, every time the device booted, it dutifully measured the config into PCR 14, and then the TPM dutifully ignored it, checking only 0 through 13. You could rewrite the entire configuration partition, changing the value of PCR 14 entirely, and the TPM would still happily hand over the encryption keys.
Let's look at the code, because in Go, the mistake is almost painfully obvious once you know where to look. This is located in pkg/pillar/evetpm/tpm.go.
Here is the vulnerable code configuration:
// Vulnerable Code
// DiskKeySealingPCRs represents PCRs that we use for sealing
DiskKeySealingPCRs = tpm2.PCRSelection{
Hash: tpm2.AlgSHA1,
PCRs: []int{0, 1, 2, 3, 4, 6, 7, 8, 9, 13}
}Do you see 14 in that list? Neither do I. Also, notice the use of AlgSHA1. In 2023. That's a separate sin, but it adds flavor to the failure.
Here is the fix provided in the patch:
// Patched Code
// DiskKeySealingPCRs represents PCRs that we use for sealing
DiskKeySealingPCRs = tpm2.PCRSelection{
Hash: tpm2.AlgSHA256, // Upgraded to SHA256 (Nice)
PCRs: []int{0, 1, 2, 3, 4, 6, 7, 8, 9, 13, 14} // PCR 14 added
}The fix was literally two characters (adding 14) and a much-needed algorithm upgrade. Without that 14, the cryptographic chain of trust was broken at the configuration layer.
How does a researcher (or an attacker) actually weaponize this? EVE OS is designed for edge computing—boxes sitting in factories, wind turbines, or retail stores. Physical access is often trivial.
The Attack Chain:
config partition is usually read-only or integrity-protected, but since we are offline, we can modify the bits on the disk directly.authorized_keys file in the configuration partition to include their own public SSH key. Or, they change the controller URL to point to a malicious command-and-control server.During boot, the bootloader hashes the modified config. The hash is different. PCR 14 changes to a new, 'tainted' value.
The TPM looks at the policy. "Does PCR 0 match? Yes. PCR 1? Yes... PCR 13? Yes." It stops there. It never looks at the tainted PCR 14. The vault key unlocks, the system boots, and the attacker logs in via SSH with root privileges using the key they injected.
The severity here is classified as High (CVSS 8.8) for a reason. EVE OS creates a promise of security: "If the device is tampered with, it won't boot (or at least won't decrypt secrets)."
This vulnerability completely negates that promise for the configuration layer. This isn't just about reading data; it's about persistence. An attacker can backdoor a device, and the device itself—specifically the TPM which is supposed to prevent this—will vouch for the system's integrity.
Since this affects the sealing of the vault, an attacker gets access to:
The remediation is straightforward but requires action. The patch d9383a7ee4e1c39f5c8c6d4a63cb2ebd00695e8a fixes the issue by explicitly adding PCR 14 to the sealing list.
But simply applying the update isn't enough. Because the sealing policy is baked into the way the data is encrypted on disk, existing data is sealed with the old policy (ignoring PCR 14).
To fully remediate:
This is a harsh reminder that cryptography is only as good as its implementation. You can have the strongest algorithms in the world, but if you forget to check the register, you're just doing fancy math for no reason.
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H| Product | Affected Versions | Fixed Version |
|---|---|---|
EVE OS LF-Edge | < 8.6.0 | 8.6.0 |
EVE OS LF-Edge | >= 9.0.0 < 9.5.0 | 9.5.0 |
| Attribute | Detail |
|---|---|
| CVE ID | CVE-2023-43634 |
| CVSS | 8.8 (High) |
| CWE | CWE-922 (Insecure Storage) |
| Vector | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| Attack Vector | Local (Physical/Storage) |
| Hash Upgrade | SHA1 -> SHA256 |
The product stores sensitive information without checking the integrity of the storage container or the configuration affecting access control.
An uncontrolled resource consumption vulnerability exists in the Docling document conversion library. Maliciously structured HTML, JATS, ODS, or BoxNote inputs containing table cells with excessively large 'rowspan' or 'colspan' attribute values trigger algorithmic complexity conditions. This allows unauthenticated remote attackers to initiate resource exhaustion states, crashing or hanging the target document processing pipeline while bypassing configured timeouts.
A Local File Inclusion (LFI) and Arbitrary File Disclosure vulnerability exists in Docling and Docling Slim versions >= 2.16.0 up to 2.131.0. When parsing serialized DoclingDocument structures using the JSON input format, the backend fails to restrict image URI schemes, allowing remote attackers to retrieve local files and verify path existence on the host system during embedded document export.
Docling, a tool for parsing and processing diverse document formats, is vulnerable to arbitrary file read, arbitrary file write, and potential remote code execution (RCE) in versions 2.94.0 through 2.131.0. The vulnerability occurs when applications configure Docling to use the Tectonic engine for rendering TikZ diagrams into images. Because the compilation did not restrict hazardous TeX primitives or sandbox the environment, an attacker can supply crafted documents containing malicious TikZ definitions to access or modify local files and execute arbitrary commands under the privileges of the processing application.
An SSRF guard bypass vulnerability in the Docling document conversion engine allows unauthenticated attackers to bypass internal IP access controls. The vulnerability exists due to a DNS rebinding Time-of-Check Time-of-Use (TOCTOU) condition, URL authority parsing inconsistencies, and unvalidated network requests triggered during headless browser page rendering.
A technical analysis of CVE-2026-105742 (GHSA-p3fw-7699-7926), a sensitive information disclosure vulnerability in the Docling document processing library. Vulnerable versions of Docling indiscriminately forward custom HTTP headers, such as authentication tokens, to arbitrary third-party origins and during cross-origin redirects while fetching remote image assets from untrusted HTML and EPUB documents.
CVE-2026-106121 is a Denial of Service (DoS) vulnerability in the RabbitMQ Java Client library (amqp-client) affecting versions prior to 5.37.0. The vulnerability resides in the legacy, custom JSON-RPC parsing class com.rabbitmq.tools.json.JSONReader. When parsing malformed or truncated payloads ending within a quoted string or single-line comment, the parser's scanner enters an infinite loop. This occurs because the loop lacks an exit condition for the end-of-input sentinel character returned by the iterator, leading to either CPU exhaustion or a JVM crash from an OutOfMemoryError.