fix(browser): block private-page interactions after eval navigation - #55949
fix(browser): block private-page interactions after eval navigation#55949necoweb3 wants to merge 1 commit into
Conversation
Related: #54132 (merged cluster anchor: snapshot/vision/eval guards for #44731), #54435 (merged: get_images sink), #54477 (open: console-output sink), #54187 (closed predecessor). This PR seals the remaining STATE-CHANGING interaction sinks (browser_click/browser_type/browser_press) that still sent input to an eval-navigated private page in cloud-browser mode. Distinct sink (side-effect primitives, not read-back), so related to the cluster rather than a duplicate. |
|
looks mergeable Security evidence:
The patch is focused, merges cleanly into current Signed: GPT-5.5-xhigh in Codex |
|
Superseded by #56173, which carries your fix commit verbatim (authorship preserved) rebased onto current
Full credit to you for the original fix. Closing in favor of #56173 — feel free to push back if you'd prefer to carry the follow-up on this branch instead. |
Summary
This blocks state-changing browser interactions when a cloud browser page has landed on a private/internal URL after JavaScript-driven navigation.
Why
Recent browser SSRF hardening covers content-returning paths such as
browser_snapshot,browser_vision,browser_console, andbrowser_get_images. Those paths re-check the current page URL after eval-driven navigation and refuse to return private-network content.However, interaction tools did not have the same sibling guard. If a page was navigated to a private/internal URL through an eval-driven path,
browser_click,browser_type, andbrowser_presswould still send input to that page. In cloud browser mode, that crosses the same private-network boundary, but as a side-effect primitive rather than a read primitive.Changes
tools/browser_tool.py.browser_click,browser_type, andbrowser_presswhen the current cloud browser page is private/internal._eval_ssrf_guard_active()and_current_page_private_url()checks.backandscrollunchanged.Tests