-
Notifications
You must be signed in to change notification settings - Fork 73
Closed
Labels
agent-readypr-openedPR has been opened for this issuePR has been opened for this issuesecuritySecurity issuesSecurity issues
Milestone
Description
Summary
WatchSandbox takes a sandbox id from the request and uses it as the key for the tracing log bus. The bus creates one broadcast channel and one tail deque per distinct sandbox_id. There is no check that the id corresponds to an existing sandbox, and when the stream ends, the bus does not remove the channel or deque. A client can open many streams with different fake ids; each creates a new entry in the bus's internal maps. Over time this can grow without bound and exhaust memory or file descriptors.
Source Code
- In
crates/navigator-server/src/grpc.rs,watch_sandbox(lines 156-164) setssandbox_id = req.id.clone()after checking only thatreq.idis non-empty. It does not verify that the sandbox exists. - In
crates/navigator-server/src/tracing_bus.rs,sender_for(sandbox_id)(lines 59-69) doesper_id.entry(sandbox_id.to_string()).or_insert_with(|| broadcast::channel(1024)). Thepublishmethod (lines 87-97) doestails.entry(sandbox_id.to_string()).or_default(). There is no cleanup when a subscriber drops.
Originally by @drew on 2026-02-19T09:00:48.684-08:00
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
agent-readypr-openedPR has been opened for this issuePR has been opened for this issuesecuritySecurity issuesSecurity issues