CVE-2026-1442
CVE-2026-1442: Unitree UPK files Hard-Coded Key#
AHA! has discovered an issue with UPK files produced by Unitree, and is publishing this disclosure in accordance with AHA!’s standard disclosure policy today, on Februrary 28, 2026. CVE-2026-1442 has been assigned to this issue, as has GCVE-1337-2025-00000000000000000000000000000000000000000000000001111111111110101111111111000000000000000000000000000000000000000000000000000000101.
This vulnerability is estimated to have a CVSSv31 rating of CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H (7.8, High) and the relevant SSVC vectors are Exploitation: PoC and Technical Impact: Total. This issue is an instance of [CWE-321].
Any questions about this disclosure should be directed to [email protected].
Executive Summary#
Since the encryption algorithm used to protect firmware updates is itself encrypted using key material available to an attacker (or anyone paying attention), the firmware updates may be altered by an unauthorized user, and then trusted by a Unitree product, such as the Unitree Go2 and other models. This issue appears to affect all of Unitree’s current offerings, and so should be considered a vulnerability in both the firmware generation and extraction processes. At the time of this release, there is no publicly-documented mechanism to subvert the update process and insert poisoned firmware packages without the equipment owner’s knowledge.
Python tooling that leverages this vulnerability has been released at the UniTEABag GitHub repository.
Technical Details#
(These details cribbed from a pre-release version of UniTEABag)
Unitree chose to implement and of firmware update file format, called UPK. The overall structure of these firmware update files are:
- Header (UTPK)
- Package metadata
- Encrypted payload with TEA encryption
- MD5 signature
- payload
The specific, detailed structure of these Unitree UPK files is:
hdr = data[0:0+4]
isPackage = data[5]
time = data[8:8+8]
size = data[16:16+8]
utfiletype = data[24]
seed = data[28:28+4]
sign1 = data[32:32+8]
sign2 = data[40:40+8]
(md5 = sign1 + sign2)
pkg_name = data[48:48+64]
payload = data[112:]
payload_hdr = payload[0:0+4]
payload_data = payload[4:]
Encryption Algorithm#
UniTEABag uses the TEA (Tiny Encryption Algorithm) with custom key generation:
- Key derivation using seed values and constants
- Two encryption versions are supported, depending on robot model generation
Key Constants#
The Unitree implementation uses several magic constants, hardcoded into the over-the-air (OTA) binary:
UT_CODEKEY_CONST1 = 0x6e35ba0cUT_CODEKEY_CONST2_VERSION1 = 0x65748392UT_CODEKEY_CONST2_VERSION2 = 0x9a8b7c6e
TEA is used to encrypt/decrypt the data, the key for the TEA is generated by the
seed from the package file and hardcoded constants. Depending on the robot
generation, the constants are one of UT_CODEKEY_CONST2_VERSION1 = 0x65748392
or UT_CODEKEY_CONST2_VERSION2 = 0x9a8b7c6e.
With these constants, the seed, and a key derivation function (KDF), a key is generated.
The constants are hardcoded in the OTA binary update of the robot. Since TEA is a symmetric cryptographic algorithm, we can 1) decrypt and decompress firmware packages, and 2) encrypt and compress our own valid Unitree firmware packages. The robot is not able to determine if the firmware was created by Unitree or by an attacker or hobbyist, as any validly-formatted TEA binary using these constants as key material is assumed valid and safe.
A defense against this attack might be to create and ship a signature-based verification system, rather than relying on cleartext constants as key material.
Attacker Value#
By extracting, rewriting, and re-packing Unitree UPK firmware updates, an attacker or a hobbyist with special access to a Unitree robot can effectively overwrite the entire local operating system for that device. The scope of this attack can range from permanently destroying the victim robot to inserting a long-lived update-resistant backdoor, to implementing new, hidden functionality known only by the attacker.
This attack becomes much more valuable if an attacker has a mechanism to subvert the update process directly. Such a vulnerability, combined with this one, would allow an attacker to arbitrarily update Unitree robots in the field, at will.
As mentioned in other advisories from AHA!, Unitree is a Chinese technology vendor, and produces rugged, general-purpose robots used in police and military applications across the United States and Europe for use in dangerous, emergency situations.
Credit#
This issue was first discovered and reported by Andreas Makris (aka Bin4ry), and disclosed through the AHA! CNA.
Timeline#
No attempt has been made to notify the vendor of this issue, given past hostility to vulnerability disclosure communications.
- 2025-Dec-30 (Tue): Initial outreach to AHA!
- 2026-Jan-15 (Thu): First draft of findings at UniTEABag private repository
- 2026-Jan-26 (Mon): CVE-2026-1442 reserved
- 2026-Feb-21 (Sat): This disclosure drafted
- 2026-Feb-26 (Thu): Demonstrated at AHA! meeting 0x00e9
- 2026-Feb-26 (Thu): Public disclosure of CVE-2026-1442
- 2026-Feb-26 (Thu): UniTEABag made public
