{"id":13758,"date":"2026-06-20T10:04:26","date_gmt":"2026-06-20T10:04:26","guid":{"rendered":"https:\/\/serisec.com\/index.php\/2026\/06\/20\/autojack-a-single-web-page-can-hijack-your-ai-agent-to-execute-malicious-code\/"},"modified":"2026-06-20T10:04:26","modified_gmt":"2026-06-20T10:04:26","slug":"autojack-a-single-web-page-can-hijack-your-ai-agent-to-execute-malicious-code","status":"publish","type":"post","link":"https:\/\/serisec.com\/index.php\/2026\/06\/20\/autojack-a-single-web-page-can-hijack-your-ai-agent-to-execute-malicious-code\/","title":{"rendered":"AutoJack \u2013 A Single Web Page Can Hijack Your AI Agent to Execute Malicious Code"},"content":{"rendered":"<p>    AutoJack \u2013 A Single Web Page Can Hijack Your AI Agent to Execute Malicious Code<br \/>\n \t<BR><br \/>\n<BR><\/BR><br \/>\n    <!-- no image --><br \/>\n \t<BR><br \/>\n<BR><\/BR><\/p>\n<div>\n<p class=\"wp-block-paragraph\">A critical exploit chain dubbed AutoJack that allows a single malicious web page to hijack Microsoft\u2019s AutoGen Studio browsing agent and execute arbitrary code on the host machine without any user interaction beyond submitting a URL.<\/p>\n<p class=\"wp-block-paragraph\">AutoJack is a three-vulnerability exploit chain targeting AutoGen Studio, Microsoft Research\u2019s open-source prototyping UI for multi-agent AI systems. The technique weaponizes the agent\u2019s built-in web-browsing capabilities to cross the localhost trust boundary, turning the AI agent into an unwitting delivery vehicle for remote code execution (RCE).<\/p>\n<p class=\"wp-block-paragraph\">Researchers reported the findings to the Microsoft Security Response Center (MSRC), and the upstream <code>main<\/code> branch was hardened in commit <code>b047730<\/code>. Crucially, the vulnerable MCP WebSocket surface was never included in any PyPI release, meaning developers who install AutoGen Studio via <code>pip<\/code> are not exposed to this specific chain.<\/p>\n<h2 id=\"h-autojack-vulnerability-chain\" class=\"wp-block-heading\"><strong>AutoJack Vulnerability Chain<\/strong><\/h2>\n<p class=\"wp-block-paragraph\">AutoJack chains three independent weaknesses in AutoGen Studio\u2019s <a href=\"https:\/\/cybersecuritynews.com\/best-model-context-protocol-mcp-servers\/\" target=\"_blank\" rel=\"noreferrer noopener\">Model Context Protocol (MCP)<\/a> WebSocket surface:<\/p>\n<ul class=\"wp-block-list\">\n<li>\n<strong>CWE-1385 \u2013 Missing Origin Validation in WebSockets:<\/strong> The MCP WebSocket only accepts connections from <code>http:\/\/127.0.0.1<\/code> or <code>http:\/\/localhost<\/code>. While this blocks a human browser tab on <code>evil.com<\/code>, it does not block JavaScript rendered by a headless browser owned by an AutoGen browsing agent \u2014 which inherits localhost identity, bypassing the check entirely.<\/li>\n<li>\n<strong>CWE-306 \u2013 Missing Authentication for Critical Function:<\/strong> AutoGen Studio\u2019s authentication middleware explicitly skipped <code>\/api\/mcp\/*<\/code> paths, assuming the WebSocket handler would enforce its own checks. It never did. As a result, the MCP WebSocket accepted unauthenticated connections regardless of the auth mode configured for the rest of the application.<\/li>\n<li>\n<strong>CWE-78 \u2013 OS Command Injection via <code>server_params<\/code>:<\/strong> The WebSocket endpoint accepted a <code>server_params<\/code> query parameter, base64-decoded it into a JSON blob, parsed it into <code>StdioServerParams<\/code>, and passed <code>command<\/code> + <code>args<\/code> directly to <code>stdio_client()<\/code>. With no executable allowlist in place, an attacker could supply <code>calc.exe<\/code>, <code>powershell.exe -enc \u2026<\/code>, or <code>bash -c '...'<\/code> as the \u201cMCP server.\u201d<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">The end-to-end flow is straightforward. A developer runs AutoGen Studio on <code>localhost:8081<\/code> alongside a browsing agent \u2014 such as a web summarizer built with <code>MultimodalWebSurfer<\/code>.<\/p>\n<p class=\"wp-block-paragraph\">An attacker plants a malicious page (or tricks the user into submitting an attacker-controlled URL). The headless browser navigates to the page; its JavaScript opens a WebSocket to <code>ws:\/\/localhost:8081\/api\/mcp\/ws\/&lt;id&gt;?server_params=&lt;base64_payload&gt;<\/code>.<\/p>\n<p class=\"wp-block-paragraph\">Because the browsing agent runs locally, the origin check passes; because auth middleware skips <code>\/api\/mcp\/*<\/code>, no token is required. AutoGen Studio decodes the payload and spawns the attacker-specified command under the developer\u2019s account.<\/p>\n<p class=\"wp-block-paragraph\">In proof-of-concept testing, <code>calc.exe<\/code> launched on the developer\u2019s desktop within seconds of the agent rendering the malicious page \u2014 initiated by the AutoGen Studio process itself, not the browser.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh2_SKxub_Pirl0OgxzYZ5aXxeHmGu0jiLf7D35peoFaZ6WWdasY4xOLokIW5LF03m-O5Zj_TAigsHsLuTBNWEALsHuGlwP8W3ULxwgda3oUdR92n4VPtgQS5YVT6YKGg_HevQFrFhXmNrPGyDq7-yhLrnMFtyV130F1oR9JP7jQWfph7drG45Ju0Kq9X-h\/w578-h640\/Autojack1.webp?ssl=1\" alt=\"\"><\/figure>\n<\/div>\n<h2 id=\"h-fixes-applied\" class=\"wp-block-heading\"><strong>Fixes Applied<\/strong><\/h2>\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2026\/06\/18\/autojack-single-page-rce-host-running-ai-agent\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Microsoft\u2019s maintainers addressed<\/a> all three issues:<\/p>\n<ul class=\"wp-block-list\">\n<li>\n<strong>Server-side parameter binding<\/strong> \u2014 <code>server_params<\/code> is no longer accepted via the URL; parameters are stored server-side and keyed by UUID.<\/li>\n<li>\n<strong>Auth skip list tightened<\/strong> \u2014 <code>\/api\/mcp<\/code> no longer bypasses middleware; all MCP routes now flow through standard authentication.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">These changes are live on the <code>main<\/code> branch as of commit <code>b047730<\/code> (version <code>0.7.2<\/code>). The published PyPI package (<code>autogenstudio 0.4.2.2<\/code>) was confirmed to contain no <code>mcp.py<\/code> route file or <code>StdioServerParams<\/code> references.<\/p>\n<p class=\"wp-block-paragraph\">To defend against AutoJack-style attacks broadly:<\/p>\n<ul class=\"wp-block-list\">\n<li>Treat any tool parameter reachable from model output as attacker-controlled.<\/li>\n<li>Never bind sensitive control planes to localhost without authentication \u2014 loopback is an attack surface for any agent on that machine.<\/li>\n<li>Allowlist executables that may be invoked as MCP servers.<\/li>\n<li>Isolate agent identity from developer identity using containers, separate OS users, or VMs.<\/li>\n<li>If building from <code>main<\/code>, use a build at or <a href=\"https:\/\/github.com\/microsoft\/autogen\/commit\/b0477309d2a0baf489aa256646e41e513ab3bfe8\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">after commit b047730<\/a>.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">AutoJack highlights a concerning risk pattern that is developing across AI agent frameworks. This issue arises when an agent is able to browse untrusted content while also having the ability to communicate with privileged local services. <\/p>\n<p class=\"wp-block-paragraph\">In this case, the local environment can no longer be considered a secure boundary. To effectively mitigate this risk, it is essential to implement consistent control-plane authentication, enforce strict action allowlisting, and ensure identity isolation, regardless of the framework being utilized.<\/p>\n<p class=\"has-text-align-center has-background wp-block-paragraph\" style=\"background:linear-gradient(180deg,rgb(238,238,238) 91%,rgb(169,184,195) 100%)\"><strong>Follow us on\u00a0<a href=\"https:\/\/news.google.com\/publications\/CAAqMggKIixDQklTR3dnTWFoY0tGV041WW1WeWMyVmpkWEpwZEhsdVpYZHpMbU52YlNnQVAB?hl=en-IN&amp;gl=IN&amp;ceid=IN:en\" target=\"_blank\" rel=\"noreferrer noopener\">Google News<\/a>,\u00a0<a href=\"https:\/\/www.linkedin.com\/company\/cybersecurity-news\/\" target=\"_blank\" rel=\"noreferrer noopener\">LinkedIn<\/a>,\u00a0and\u00a0<a href=\"https:\/\/x.com\/cyber_press_org\" target=\"_blank\" rel=\"noreferrer noopener\">X<\/a>\u00a0to Get More Instant Updates.<\/strong><\/p>\n<p>The post <a href=\"https:\/\/cybersecuritynews.com\/autojack\/\">AutoJack \u2013 A Single Web Page Can Hijack Your AI Agent to Execute Malicious Code<\/a> appeared first on <a href=\"https:\/\/cybersecuritynews.com\/\">Cyber Security News<\/a>.<\/p>\n<\/div>\n<p> \t<BR><br \/>\n <BR><\/BR><br \/>\n    Guru Baran<br \/>\n \t<BR><br \/>\n<BR><\/BR><br \/>\n<a href=\"https:\/\/cybersecuritynews.com\/autojack\/\">Go to cyber-security-news<\/a><br \/>\n \t<BR><br \/>\n <BR><\/BR><\/p>\n","protected":false},"excerpt":{"rendered":"<p>AutoJack \u2013 A Single Web Page Can Hijack Your AI Agent to Execute Malicious Code A critical exploit chain dubbed AutoJack that allows a single malicious web page to hijack Microsoft\u2019s AutoGen Studio browsing agent and execute arbitrary code on the host machine without any user interaction beyond submitting a URL. AutoJack is a three-vulnerability [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[129,63],"tags":[130],"class_list":["post-13758","post","type-post","status-publish","format-standard","hentry","category-cyber-security","category-cyber-security-news","tag-cyber-security-news"],"_links":{"self":[{"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/posts\/13758"}],"collection":[{"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/comments?post=13758"}],"version-history":[{"count":0,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/posts\/13758\/revisions"}],"wp:attachment":[{"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/media?parent=13758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/categories?post=13758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/tags?post=13758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}