Severity Daily

IT and AI security incidents, checked against the primary source

Tag: coordinated disclosure

  • Unitree G1 robots take root code execution from Bluetooth range, and no one has named a fixed firmware version

    Unitree G1 robots take root code execution from Bluetooth range, and no one has named a fixed firmware version

    Two CVE records published August 27 describe unauthenticated root code execution on the Unitree G1 EDU humanoid, one of them reachable from Bluetooth range with no pairing — and neither the CVE records, the assigning CNA, nor Unitree names a firmware version that fixes it.

    What happened

    On Thursday, August 27, 2026, security researcher Olivier Laflamme published a technical writeup of two remote code execution chains in the Unitree G1 EDU humanoid robot, along with a proof-of-concept toolkit on GitHub. NVD published both CVE records the same day at 8:18 p.m. UTC. VulnCheck is the assigning CNA for both.

    CVE-2026-76639 carries a CVSS 3.1 base score of 8.8 and a CVSS 4.0 base score of 8.7, both supplied by VulnCheck. NVD’s record describes “an unauthenticated remote code execution vulnerability that allows network-adjacent attackers to execute arbitrary commands as root by chaining three weaknesses: an unauthenticated WebRTC-to-DDS bridge on TCP port 9991, a static AES-128 key stored with world-readable permissions, and a path traversal flaw in the chat_go knowledge upload API.” The researcher adds the last step: files written through the knowledge-base upload are executed by a service whose command whitelist is evaluated only once, at import time.

    CVE-2026-76640 is scored 7.5 on CVSS 3.1 and 7.7 on CVSS 4.0. VulnCheck titles it “Unitree G1 EDU 1.5.2 BLE GATT RCE via WiFi Provisioning Stack” and describes chained flaws that “allow unauthenticated proximate attackers to achieve root code execution without pairing or credentials.” The chain runs five links deep: a Bluetooth Low Energy characteristic that accepts writes with no authentication requirement, retrieval of the device’s RSA-wrapped AES key, a cloud API that decrypted and returned that key without verifying the requester owned the robot, an unquoted heredoc variable in the WiFi provisioning path, and a buffer overflow in the SSID chunk accumulator that overruns a 500-byte buffer and corrupts a function pointer.

    Both VulnCheck advisories give affected versions as “G1 EDU <= 1.5.2.” Neither names a patched version. Both CVE records carry an NVD vulnStatus of Received, meaning NVD has not yet performed its own analysis and the CNA’s scores are the only ones that exist.

    This is single-researcher work on a single product line, covering four G1 EDU units running firmware 1.5.1.1 and 1.5.2. The robot lists at roughly $20,000 and sells primarily into universities, research groups, and industrial pilots. There is no public count of how many are deployed, and this page does not estimate one.

    Unitree’s role was not adversarial. The researcher’s timeline records the robot arriving on April 29, 2026, the first chain working by May 10 and verified by Unitree on May 14, the second completed June 25 and validated June 30, a $5,000 bounty paid August 6, and CVE requests filed August 18. He describes the vendor’s security team as “were awesome to work with” and notes that “Unitree was already aware of some of these issues internally.” Unitree implemented at least one fix in that window: “an account-to-robot cloud binding ownership check before returning the AES-128 key.”

    Why it matters

    The most useful thing here is not either chain individually. It is that the highest-leverage repair was made in a cloud backend, and the rest was not made anywhere an owner can see.

    Consider what the ownership check fixed. The BLE chain did not break because Bluetooth is insecure; the designers knew the transport was open and layered encryption on top of it. It broke because the key for that encryption could be obtained by asking a cloud API for it, and the API answered without checking whether the asker owned the robot. That is an authorization bug in a web service, and Unitree fixed it server-side. No owner had to do anything. No owner could have done anything. No owner can verify it was done, roll it back, or confirm which robots it covers. For a class of device where firmware updates are slow, physically inconvenient, and sometimes skipped entirely, the vendor’s ability to repair the important link centrally is a genuine advantage, and it should be counted as one.

    It is also why the silence on firmware is the operative finding. The unquoted heredoc variable, the SSID buffer overflow, the DDS bridge on port 9991, the path traversal in the upload API, and the whitelist evaluated only at import time are all defects in code running on the robot. Fixing the cloud ownership check removes one link from one of the two chains. It does not touch the others. An owner reading these records today learns that firmware through 1.5.2 is vulnerable, that a working toolkit is published, and that there is no version number above 1.5.2 named by anyone as the fix. There is nothing to write on a change ticket. Searching for a Unitree security advisory turns up coverage of the research and no vendor page. The Hacker News reports it asked Unitree to confirm fixed firmware versions and affected scope and had not received an answer.

    The provisioning path is the recurring lesson, and it is not specific to robots. Any device set up out of the box has to accept its first configuration over a channel that cannot be authenticated, because no credential exists yet. That bootstrapping path is unauthenticated by construction — the hardest surface in the product to get right and, judging by how often it fails, one of the least reviewed. A BLE characteristic accepting bare writes is not itself the bug; it is the design premise. The bug is what the code behind it does with what it receives, and here it accumulated attacker-controlled SSID chunks into a fixed buffer without bounding them.

    Then there is what root on this device reaches. A humanoid robot is a Linux computer with a real-time kernel, microphones, cameras, and limbs, standing in a room with people in it; the security and safety questions stop being separable. The researcher also found production third-party API credentials on the robot’s locomotion computer — keys for cloud speech synthesis, voice recognition, and music services from several providers — so root on one robot reaches the vendor’s paid accounts with third parties, a billing and abuse exposure that extends past both the owner and Unitree. An API signing secret was likewise hardcoded in the vendor’s Android app; the literal value is in the published writeup and is not reproduced here, because it offers a defender nothing.

    Finally, the researcher’s own framing deserves to be carried rather than dropped, because it is the honest one and because coverage tends to strip it. He states plainly that the work is “a point-in-time account of the platform as I found it during the research and disclosure period, not as a description of its current security posture.” Between June and now, Unitree may have shipped firmware that closes some or all of these paths. Nothing published says so. The gap between “may have been fixed” and “was fixed in version X” is the entire distance between a security program and hoping.

    What to do

    There is no fixed firmware version to give, because none has been published. If you operate G1 EDU units, ask Unitree directly for the release that remediates CVE-2026-76639 and CVE-2026-76640 and for the models and branches in scope. Until that answer exists, treat every unit as affected.

    Put the robots on an isolated segment with nothing else of value on it, and do not treat them as trusted hosts. The first chain reaches the device from an adjacent network position, and TCP port 9991 is the named entry point — it should not be reachable from any general-purpose user network. Both records score the attack vector as adjacent rather than network, so segmentation is a real control here, not a token one.

    Treat physical Bluetooth range as part of the perimeter. The second chain needs proximity and no credentials, so the control surface is who can get close to the robot and when it is powered on. Powering units down when not in use reduces exposure and costs nothing.

    Rotate any credential a robot has held or could have observed. If your units were provisioned before Unitree’s cloud ownership check went in, treat the AES key protecting the BLE setup channel as having been obtainable by anyone who asked.

    Sourcing note

    Checked: the NVD records for CVE-2026-76639 and CVE-2026-76640, which supplied the publication timestamps, the CNA identity, the description text, and every CVSS vector and score quoted here; VulnCheck’s advisories for both identifiers, which supplied the titles and the “G1 EDU <= 1.5.2” affected-version string and confirmed no patched version is named; the researcher’s writeup at boschko.ca, which supplied the disclosure timeline, tested firmware versions, bounty amount, and vendor-response quotations; and the public GitHub repository holding the proof-of-concept toolkit, which confirms the artifacts are inspectable.

    Single-source limitations, stated plainly: this is one researcher’s work on four robots of one model. The vulnerability details have been validated by the vendor per the researcher’s timeline and accepted by a CNA, but there is no independent reproduction and no second research team. The deployed population is unknown and is not estimated above.

    Could not reach: any Unitree security advisory. Searches surfaced no vendor bulletin, no firmware release note referencing either CVE, and no Unitree PSIRT page. That is an absence, not a claim that Unitree has said nothing privately to customers.

    Unresolved: which firmware release, if any, fixes the on-device defects, and whether the cloud-side ownership check applies to previously provisioned units or only to new bindings. Neither CVE appears in the KEV catalog as of publication, and no party has reported exploitation in the wild.

  • Cosmos Labs confirmed every EVM chain was exposed on August 13 and notified operators on August 21, after exploitation had begun

    Cosmos Labs confirmed every EVM chain was exposed on August 13 and notified operators on August 21, after exploitation had begun

    Cosmos Labs’ own post-mortem, published August 28, says a bug reported in April was quietly patched in May under a mistaken conclusion about which chains it touched — and that the team confirmed on August 13 that every Cosmos EVM chain was exposed, eight days before it began privately notifying operators.

    What happened

    On August 28, 2026, the Cosmos EVM project published GHSA-7g4w-cg88-2cq2, “Balance underflow in EVM StateDB,” rated critical, with no CVE assigned. The advisory names the affected ranges as versions below 0.6.2 and versions from 0.7.0 up to but not including 0.7.2. The patched versions are 0.6.2 and 0.7.2.

    The mechanism, in the advisory’s own words: “The EVM StateDB sees only an account’s spendable balance. When a vesting account delegates an amount greater than its spendable balance (i.e., dips into its locked balance, which x/staking and the staking precompile permit), the SubBalance write-back on the StateDB subtracts the full delegated amount from a smaller spendable figure. The subtraction is unchecked and wraps the balance to ≈2²⁵⁶.”

    That is an integer underflow reachable through ordinary, permitted staking behavior. An account that delegates into its locked balance ends up, from the EVM’s point of view, holding roughly the entire representable range of a 256-bit integer. Nothing is injected and no privilege is escalated. The account does what the staking module explicitly allows, and the balance ledger the EVM reads wraps around.

    On workarounds the advisory is unusually blunt: “There is no configuration-only mitigation. If an operator cannot upgrade immediately, halt the chain rather than attempt a coordinated governance upgrade.” The advisory credits the Cosmos bug bounty program, naming @AshmitSh4rma and additional independent researchers.

    The timeline is where this stops being an ordinary critical bug. Per the post-mortem as reported by The Hacker News on August 28: the vulnerability was reported through the bug bounty program on April 25, 2026. An initial patch was merged to main on May 15, and a further balance fix on May 20. On August 13, Cosmos Labs confirmed that all Cosmos EVM chains were affected. Patched releases v0.6.2 and v0.7.2 went out on August 19. The first private notification to chain operators went out on August 21. Exploitation ran from August 20 through August 25.

    The post-mortem states the reason the May patch went out quietly as a technical misjudgment: “We were unable to reproduce the vulnerability on 18-decimal networks and incorrectly concluded that it affected only non-18-decimal networks.” Most Cosmos EVM chains use 18 decimals. On that reading the bug looked like a narrow problem for a few unusual chains rather than a defect in every deployment, and the fix was merged as a normal change rather than shipped as an emergency release.

    Cosmos Labs went public on August 24. The Defiant, reporting the next day, records it saying at 1:06 p.m. EST that “an ongoing security incident has impacted users of the Cosmos EVM module,” and advising chains it was in contact with to “request that validators halt their chains.”

    The loss figures do not agree, and the disagreement is large. The post-mortem puts the total at approximately $5.72 million across six chains, split roughly $2.87 million moved through decentralized exchanges and $2.85 million through centralized ones. The Defiant, four days earlier, named three chains and reported KiiChain alone losing 148 million KII, which it valued at about $9.7 million — more than the vendor’s later total for all six chains combined. It also reported TAC losing 2,985,651,403 TAC, which it put at roughly 62 percent of circulating supply, and MANTRA disclosing an undisclosed amount from two managed wallets. A separate account, at Protos, framed the bug as affecting four blockchains.

    Three, four, or six chains; $5.72 million or considerably more. Token-denominated losses on thin markets and realized attacker proceeds are not the same quantity, and “62 percent of circulating supply” converts to dollars very differently depending on when you convert it. We are not picking one. Both are on the record. Chain status as of August 25: MANTRA halted August 20 and restarted August 22; TAC and KiiChain both halted August 22 and still frozen.

    Why it matters

    The interesting failure here is not the underflow. Unchecked subtraction on a balance is an old bug with an old fix, and the guard that went into SubBalance is the obvious one. The interesting failure is that the correct patch existed in the main branch from May 15 and did not reach the chains that needed it for three months, because the team’s model of who was affected was wrong and nothing in the process was designed to catch that.

    A silent patch is a bet. The bet is that quiet merging gets the fix into the next ordinary release before anyone reading the commit history works out what it fixes. That bet is defensible when the affected population is small, reachable, and already being told directly. It becomes indefensible the moment the affected population turns out to be everyone, because the commit is public the whole time and the people who read commits adversarially are not waiting for a release note.

    The specific trap is worth naming, because it will recur outside blockchain infrastructure: the team tried to reproduce the bug on the common configuration, failed, and treated failure-to-reproduce as evidence of non-applicability. Those are different claims. Failing to trigger an underflow on an 18-decimal network says something about the test, the harness, or the particular path exercised. It does not establish that the arithmetic is safe there. A negative reproduction result narrows nothing unless you know why the reproduction failed.

    The disclosure-policy criticism follows from that. Cosmos Labs’ published policy, per the reporting, calls for emergency mitigations and private fix distribution where a defect puts a whole network class at risk. From August 13 the project knew it had exactly that. Patched releases came on August 19; operator notification started on August 21; exploitation started on August 20. The gap that matters is not April to August, which is explained by the misjudgment. It is August 13 to August 21, which is not. Eight days after confirming that every chain running your module can have its balance ledger wrapped, the people who run those chains had not been told.

    There is also a governance point buried in the workaround text that deserves attention beyond Cosmos. “Halt the chain rather than attempt a coordinated governance upgrade” is the advisory conceding that its own normal upgrade path is too slow to use in an emergency. The process that makes an upgrade legitimate also makes it slow, and slow is the wrong property when the exploit is live. Any organization whose change control requires a quorum should ask what its own emergency bypass is, and whether anyone has ever used it.

    Finally, the absence of a CVE. This is a critical, actively exploited defect in a shared module carrying a GHSA identifier and no CVE. Tools that track Go module advisories via GHSA will see it; those that reconcile to CVE alone will not. That is a concrete reason not to treat CVE coverage as a proxy for vulnerability coverage.

    What to do

    If you run a Cosmos EVM chain, upgrade to v0.6.2 or v0.7.2 or later. Versions below 0.6.2, and 0.7.0 and 0.7.1, are affected. If you cannot upgrade now, the advisory’s instruction is to halt the chain rather than route the fix through governance.

    Check whether any account on your chain has a balance in the neighborhood of 2²⁵⁶, and review delegation events from vesting accounts where the delegated amount exceeded the spendable balance. The exploitation window the post-mortem gives is August 20 to 25, 2026, but that is the window in which losses were observed, not a guarantee about when the condition was first reachable — the defect has been present in shipped versions since well before then.

    If you consume Go modules and rely on vulnerability scanning, confirm your tooling ingests GitHub Security Advisories directly and does not filter to entries carrying CVE identifiers. This advisory has no CVE.

    Sourcing note

    Checked: GHSA-7g4w-cg88-2cq2 on GitHub, the project’s own advisory, published August 28, 2026 — the source for the affected and patched version ranges, the impact text, the workaround instruction, and the credits, all quoted above verbatim.

    The incident timeline and the quotation “We were unable to reproduce the vulnerability on 18-decimal networks and incorrectly concluded that it affected only non-18-decimal networks” come from Cosmos Labs’ post-mortem as reported by The Hacker News on August 28, 2026. We were not able to reach the post-mortem document itself, so the dates in the timeline section — April 25, May 15, May 20, August 13, August 19, August 21, and the 20–August 25 exploitation window — are reported at one remove from the vendor’s own text. They are attributed to the vendor by the outlet, not independently confirmed against the vendor’s page by us. Treat them accordingly.

    Chain-level halt dates and loss figures come from The Defiant, August 25, 2026, reporting on the affected chains’ disclosures. The August 24 Cosmos Labs quotation and its timestamp come from the same report. The $5.72 million across six chains comes from the post-mortem via The Hacker News. These figures conflict and are presented as conflicting; we have not reconciled them and do not endorse either.

    Unresolved: no CVE has been assigned. Cosmos Labs has named no attacker and neither have we. Whether TAC and KiiChain have restarted since August 25 is not established here. The disclosure policy said to require emergency mitigation is described in secondary reporting; we did not retrieve it.