Video summary
ReVault! Compromised by Your Secure SoC... with Philippe Laulheret
Main summary
Key takeaways
Topic & premise
- The session discusses ReVault!, a set of research findings showing how a Dell “ControlVault” Secure SoC (Broadcom-based, with an RTOS/secure storage model) can be compromised despite the presence of secure boot / encrypted firmware storage.
- The core claim is that multiple weaknesses across firmware trust boundaries, key handling, boot-chain behavior, and host↔SoC command marshalling enable:
- Decryption of application firmware
- Arbitrary memory corruption
- Code execution on the SoC
- Persistent firmware modification
- Potential host (Windows) compromise via Windows services/APIs
Speaker background / research approach (source: Philippe)
- Philippe Laulheret (Cisco Talos) describes work involving:
- Vendor reporting via coordinated disclosure
- Publishing detection rules and writeups
- Sharing practical reversing assets when possible (e.g., IDA workflows, scripts)
What ControlVault is (product/architecture details)
- ControlVault is present in many Dell business laptops (e.g., Latitude/Precision lines).
- Hardware/software stack includes:
- A Broadcom secure chip (example given: Broadcom 58202)
- Encrypted flash storage for secrets
- A real-time OS (mentioned as AR/RTOS; slides describe an RTOS layer)
- Windows/Linux user/kernel APIs to communicate with the device
- Versions:
- ControlVault 1/2/3 over time; the talk focuses on ControlVault 3 (and notes newer variants were also vulnerable)
Key reverse-engineering insight: debug symbols leaked for Linux driver
- A major enabler: a Linux shared object/library used to talk to the device contains debug symbols.
- This allows:
- Importing binaries into IDA with much better symbol resolution
- Viewing/understanding firmware command sets and interfaces
- Philippe demonstrates:
- Importing with IDA and exploring:
- exported functions matching command calls
- local types and command dispatch definitions
- Exporting IDA-generated artifacts (though not perfectly reusable across instances)
- Importing with IDA and exploring:
Initial “attack surface” selection methodology
- Philippe looks for “red flags” such as:
- Missing ASLR on certain components/services on the host side (easier exploitation)
- Signs of technical debt (reducing modern mitigations)
- He distinguishes manual reversing vs. fuzzing teams—he prefers manual reversing, especially for encrypted/obscure targets.
Communication model (host <-> firmware) and command interface
- Firmware exposes a command system where host code ultimately sends USB packets to the chip.
- Windows side:
- Uses a kernel driver and then userland APIs (functions matching the “CV_*” naming pattern)
- Calls include workflows like:
- open session
- send command
- close session
- Firmware side:
- A manager/dispatcher receives USB packets, extracts commands, and calls corresponding firmware functions.
- Demonstration:
- Using symbol information and a small Python script, Philippe calls a function like “get system version” directly against the firmware.
Firmware security model: encrypted app vs. unencrypted boot image
- Broadcom secure boot concepts are discussed:
- SBI = Secure Boot Image (a boot-room/loader extension loaded by the chip boot ROM)
- SBI loads/decrypts application firmware.
- Critical research finding:
- The application firmware is encrypted, but the SBI that loads it is not encrypted.
- Reverse-engineering SBI reveals how firmware decryption works.
Decrypting firmware: what was done
- Philippe identifies strings like “upgrade decryption failed” and traces the decryption path in SBI.
- He reverse-engineers:
- Where default key material is involved
- How the IV/initialization vector is derived (described as nonstandard/messy)
- How firmware update commands deliver encrypted blobs that SBI decrypts/validates
- Result:
- Ability to decrypt the main application firmware and analyze internal command handlers.
Major exploitation theme #1: session/heap weakness → arbitrary free
Vulnerability concept (heap corruption via session forging)
- Firmware manages “sessions” backed by heap memory.
- CV_open returns a “handle” corresponding to a pointer/address in firmware heap.
- CV_close is expected to validate the handle, but validation is weak:
- It checks whether the memory address lies in the right heap range
- And whether a session tag (e.g., “SCSS”) exists at the beginning
Exploit idea
- If attacker-controlled heap data can be written, attackers can:
- Forge a fake session object by writing the correct session tag at the beginning of a heap buffer
- Call CV_close so it frees memory that was never a real session → arbitrary free / heap metadata corruption
How attacker-controlled heap data is obtained
- A command like “CV_create object” places data on the firmware heap (less control over metadata, but enough to forge/shape the heap).
- A helper like “CV_get random” acts as a “session oracle”:
- It returns different error codes depending on whether the address/session guess looks valid
- Helps locate the forged object within the heap range
Major exploitation theme #2: stack overflow via object copy (firmware R/W + stack smash)
- After gaining heap control primitives, Philippe targets another command:
- “secure bio identify”
- It copies an object into a destination buffer where the copy length comes from an object size field.
- Research observation:
- The destination appears to be a stack variable, so an attacker-controlled length can cause a stack overflow.
- Since the attacker can’t directly set the size through the initial object-creation path, they:
- Use heap corruption to create overlapping heap objects
- Reinterpret fields so the “size” used for copying becomes attacker-controlled
Resulting control of execution
- This enables control of execution (within the SoC environment) using:
- no SLR
- ROP-like chaining on ARM
- Philippe describes deploying gadgets with IDA-assisted scripting and manual reasoning.
Key leakage demo and secure boot weaknesses: SOTP/OTP key exposure
- Once code execution is achieved, Philippe demonstrates access to SOTP read key functionality to leak keys.
- Resulting keys include per-device keys such as:
- AES key
- HMAC key
- These keys relate to:
- Encrypting firmware stored in flash
- Authenticating firmware updates (via a secure code descriptor)
- Boot-chain security conclusion:
- The chain heavily relies on:
- OTP fuse-derived keys and secure code descriptor integrity
- Firmware update-time signature checking
- Philippe argues that even if app verification isn’t directly bypassed, compromising keys/descriptors enables persistent subversion.
- The chain heavily relies on:
Persistent firmware modification (“implant”)
- Philippe uses the device’s update mechanism to flash a modified secure code descriptor and related firmware content.
- Demo details:
- An earlier attempt failed due to endianness mistakes in flashing the descriptor structure
- After correcting endianness, the modified device shows persistent changes (device manager shows a changed identity string)
Persistence behavior
- Survives OS reinstall
- Persists until legitimate firmware is re-flashed onto the board
Impact demo: bypass fingerprint authentication / force “always match”
- The talk includes a demo conceptually modifying firmware so fingerprint identification routines invoked during login / Windows Hello can be forced to return “yes”.
- Hardware demo:
- A fake finger (from prior Defcon) with organic material triggers the capacitive fingerprint sensor
- The computer unlocks immediately when touched
Impact extension: Windows compromise via deserialization/type confusion/backdoor command paths
Host-side weakness (marshalling/decapsulation trust)
- Windows host expects structured replies (TLV with encapsulation types like “length-value”).
- Firmware also indicates encapsulation type for returned data.
- Firmware can redefine the encapsulation type so the host decapsulates/allocates buffers incorrectly.
- If the host trusts returned encapsulation/size info:
- type confusion
- and potentially memory corruption when returned lengths don’t match expected types
Backdoor strategy example: “CV_get random”
- Philippe modifies firmware so that only when called with a special size/parameter, it returns a malicious payload instead of legitimate random data.
- The payload targets the Windows-side vulnerable deserialization path, culminating in code execution.
Additional host exploitation: system service path (Windows Hello / biometric service)
- Philippe targets a Windows biometric service (“SVC host”, Windows Hello integration).
- A Broadcom storage adapter interface is reachable from Windows when biometric hardware is present.
- Firmware backdoor returns a malicious payload for a specific object handle, corrupting Windows service stack state:
- overflow of object header
- enabling ROP and a reverse shell (ncAT demo)
Physical attack scenario: direct board access bypassing OS login
- An “evil maid” style scenario is described:
- Split the internal USB connection to the ControlVault board
- Attach another computer to interact with the device firmware/commands without OS credentials
- Conclusion:
- Physical access alone can be sufficient to compromise and implant firmware
Mitigations (post-disclosure)
- Philippe mentions mitigations implemented by Dell/Broadcom in firmware updates:
- Removing unused/less-needed command paths and functionality
- Tracking valid handles to prevent the forged-session arbitrary-free approach
- Suggested user risk reduction:
- Disable the device in Device Manager if not needed
- Updates are pushed via Windows/driver update mechanisms (though older/unupdated devices may remain vulnerable)
Key reviews/guides/tutorial elements mentioned
- Practical reversing workflow:
- Using IDA with symbol-rich drivers (debug symbols in Linux .so)
- Identifying firmware decryption routines via strings and function pointers
- Loading raw blobs in IDA by determining correct ARM load addresses (reset-vector / absolute address tables)
- Practical scripting/demo methodology:
- Using Python bindings to call firmware commands via exported C/CV prototypes
- Using heap/object commands to build exploitation primitives
Main speakers / sources
- Main speaker: Philippe Laulheret (Cisco Talos)
- Primary referenced systems: Dell ControlVault secure SoC (Broadcom 58202 mentioned), Cisco Talos writeups, Broadcom firmware components, Windows/Linux driver interfaces