Skip to content

[Backport release/0.0.14] feat(teleop): add PICO WebXR body tracking - #4178

Open
github-actions[bot] wants to merge 1 commit into
release/0.0.14from
backport/3695-to-release/0.0.14
Open

github-actions[bot] wants to merge 1 commit into
release/0.0.14from
backport/3695-to-release/0.0.14

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Description

Backport of #3695 to release/0.0.14.

@greptile-apps

greptile-apps Bot commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 3/5

Not safe to merge: the WebSocket body-tracking path allows one connected client to consume unbounded processing and memory resources.

Findings

  1. P1 Security Bound body snapshot input

Summary

Merge safety

Do not merge until WebXR body-tracking input has resource bounds. A connected client can repeatedly submit oversized valid joint snapshots, consuming server CPU and memory and disrupting teleoperation.

Reviews (1) · Last reviewed commit: "feat(teleop): add PICO WebXR body tracki..."

type: Literal["body_tracking_snapshot"]
capture_time_s: _FiniteFloat
frame_id: _NonEmptyString
joints: dict[_NonEmptyString, BodyJointPose] | None

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 security Bound body snapshot input

The WebSocket text-message handler parses and publishes every joints entry without a message-size, joint-count, or per-client rate limit. A connected client can repeatedly submit large valid snapshots, forcing synchronous allocation and validation of every pose before publication. This can exhaust CPU and memory needed for teleoperation. Limit inbound frame size and joint cardinality before parsing, and coalesce or rate-limit snapshots per client.

How this was verified: A 1.8 MB valid snapshot containing 25,000 distinct joints was accepted and retained three times by the parser used on this message path.

Artifacts

Command output from the check

  • Captured the exact temporary Python script authored for the focused body-snapshot parser check, ending with the exercised contract.

Command output from the check

  • Ran the same repro against `HEAD~1`; it cannot import the body-tracking module because the feature did not exist before the change, establishing the before side of the pair.

Command output from the check

  • Ran the authored repro against the changed code; three 25,000-entry valid joint maps were synchronously parsed and accepted, demonstrating no parser cardinality bound.

Command output from the check

  • Captured the PR diff for the body snapshot model and WebSocket text-frame dispatch path, showing the unbounded map and direct synchronous publish.

View artifacts

T-Rex Ran code and verified through T-Rex

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants