From 28723b7e3648e0adab7a19cf1892ed0ee5231fa6 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sun, 15 Mar 2026 21:45:40 -0700 Subject: [PATCH] fix(sandbox): prevent overread request smuggling in L7 REST parser --- crates/openshell-sandbox/src/l7/rest.rs | 45 +++++++++++++++++++++---- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/crates/openshell-sandbox/src/l7/rest.rs b/crates/openshell-sandbox/src/l7/rest.rs index 6d83195e..71d0d62c 100644 --- a/crates/openshell-sandbox/src/l7/rest.rs +++ b/crates/openshell-sandbox/src/l7/rest.rs @@ -53,7 +53,6 @@ impl L7Provider for RestProvider { /// Parse one HTTP/1.1 request from the stream. async fn parse_http_request(client: &mut C) -> Result> { let mut buf = Vec::with_capacity(4096); - let mut tmp = [0u8; 1024]; loop { if buf.len() > MAX_HEADER_BYTES { @@ -62,8 +61,11 @@ async fn parse_http_request(client: &mut C) -> Result n, + let n = match client.read_u8().await { + Ok(byte) => { + buf.push(byte); + 1 + } Err(e) if buf.is_empty() && is_benign_close(&e) => return Ok(None), Err(e) => return Err(miette::miette!("{e}")), }; @@ -76,10 +78,9 @@ async fn parse_http_request(client: &mut C) -> Result(client: &mut C) -> Result