flawopen.com/Incidents/microsoft-autogen-studio-autojack-agent-rce-june-2026
AutoJack: AutoGen Studio की RCE शोध श्रृंखला
Microsoft के AutoJack शोध ने AutoGen Studio के development build में local MCP RCE chain पाई। रिलीज़ से पहले ठीक हुई; PyPI package में नहीं आई।[1], [2]
एक ऐसी शोध प्रयोगशाला की कल्पना करें जहाँ सहायक आगंतुकों की पर्चियाँ पढ़ता है। उसी इमारत में काम करने के कारण उसे नियंत्रण कक्ष में जाने दिया जाता है। वहाँ reception सामान्य पहचान-जाँच छोड़ देता है और आगंतुक की पर्ची यह चुन सकती है कि कौन-सा औज़ार शुरू हो। AutoJack ने इन रास्तों को जोड़ा: browsing agent ने अविश्वसनीय कंटेंट दिखाया, वह AutoGen Studio के स्थानीय MCP control plane तक पहुँचा, और caller की settings से child process शुरू हो सकता था। control plane पर authentication लागू करें, startup settings को WebSocket URL से हटाएँ और assistant को developer workstation से अलग रखें। Microsoft के अनुसार PyPI release से पहले upstream branch में सुधार हुआ। यह रिपोर्ट pre-release source code पर है, ग्राहकों को जारी किसी प्रभावित version पर नहीं।[1]
इस पेज के मुख्य शब्द
AutoJack- AutoGen Studio के development build में प्रदर्शित chain के लिए Microsoft का नाम। रिपोर्ट कहती है कि प्रभावित MCP route को प्रकाशित PyPI package में शामिल होने से पहले ठीक किया गया।[1], [2]
Loopback / localhost- उसी host पर सेवाओं तक पहुँचने वाला network interface। यह बाहरी नेटवर्क से पहुँच सीमित करता है, लेकिन agent browser जैसी local processes को उसी host की अन्य services से अलग नहीं करता।[1]
WebSocket Origin validation- WebSocket handshake के दौरान server द्वारा Origin header की जाँच। Microsoft ने पाया कि परीक्षण किए गए agent flow में यह जाँच अकेले rendered page को local MCP service तक पहुँचने से नहीं रोकती थी।[1], [3]
StdioServerParams- AutoGen की MCP stdio configuration, जिसमें server process शुरू करने वाला program और arguments होते हैं। रिपोर्ट में route इन्हें WebSocket URL parameter से decode करता था।[1], [2], [5]
Confused deputy- किसी privileged component को अविश्वसनीय पक्ष के लिए अपने अधिकार इस्तेमाल करने के लिए बहकाया जाता है। यहाँ browsing agent और local Studio service page content को host पर process शुरू करने से जोड़ते थे।[1]
फ्रेमवर्क मैपिंग
- इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-78 CWE-306 CWE-1385
- OWASP GenAI 2025 — LLM06:2025 अत्यधिक एजेंसी
घटना का समयक्रम (Timeline)
Microsoft ने AutoJack research और mitigation guidance प्रकाशित की। इसमें नियंत्रित स्थानीय demonstration बताया गया है, ग्राहकों पर पुष्टि किया गया हमला नहीं।[1]
हमले का चरण-दर-चरण प्रवाह
Agent को अविश्वसनीय कंटेंट ब्राउज़ करने को मिलता है
Prompt, retrieved page या अन्य अविश्वसनीय input से AutoGen browsing agent, AutoGen Studio चलाने वाली उसी workstation पर attacker-controlled page दिखाता है।[1]
सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन
असुरक्षित उदाहरण caller-controlled startup settings को parse करता है, लेकिन जानबूझकर कोई process शुरू नहीं करता। Upstream fix ने settings को WebSocket query से हटाकर server-side one-time session state में रखा और MCP routes पर authentication फिर लागू की। यह defensive pattern expiry, size bound, concurrent access lock और executable allowlist जोड़ता है; example name को स्वीकृत MCP binaries से बदलें। यह Origin validation या OS isolation का विकल्प नहीं है।[1], [2]
import base64
import json
from dataclasses import dataclass
@dataclass(frozen=True)
class StdioServerParams:
command: str
args: tuple[str, ...]
def params_from_websocket_query(query: dict[str, str]) -> StdioServerParams:
# डेवलपमेंट रूट URL में दी गई कॉन्फ़िगरेशन पर भरोसा करता था।
encoded = query["server_params"]
decoded = base64.b64decode(encoded)
return StdioServerParams(**json.loads(decoded))from dataclasses import dataclass
from threading import Lock
from time import monotonic
from uuid import uuid4
@dataclass(frozen=True)
class StdioServerParams:
command: str
args: tuple[str, ...]
SESSION_TTL = 30.0
MAX_PENDING = 256
ALLOWED_COMMANDS = {"approved-mcp-server"}
pending: dict[str, tuple[float, StdioServerParams]] = {}
pending_lock = Lock()
def register_params(params: StdioServerParams, authenticated: bool) -> str:
# authenticated सत्यापित middleware से आना चाहिए, अनुरोध डेटा से कभी नहीं।
if not authenticated:
raise PermissionError("MCP control-plane authentication required")
if params.command not in ALLOWED_COMMANDS:
raise ValueError("unapproved MCP server executable")
now = monotonic()
with pending_lock:
for key, (expires, _) in list(pending.items()):
if expires <= now:
pending.pop(key, None)
if len(pending) >= MAX_PENDING:
raise RuntimeError("pending MCP session limit reached")
session_id = str(uuid4())
pending[session_id] = (now + SESSION_TTL, params)
return session_id
def consume_params(session_id: str, authenticated: bool) -> StdioServerParams:
if not authenticated:
raise PermissionError("MCP control-plane authentication required")
with pending_lock:
entry = pending.pop(session_id, None)
if entry is None or entry[0] <= monotonic():
raise ValueError("unknown or expired MCP session")
return entry[1]इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट
- ✓WebSocket handshakes सहित MCP control-plane की हर route पर authentication और authorization लागू करें; हर configured auth mode को इन routes पर जाँचें।[1], [2], [4]
- ✓WebSocket URL या browser-controlled input से process-launch configuration कभी स्वीकार न करें; authenticated request से register करें और short-lived, single-use server-side session से बाँधें।[2]
- ✓Pending sessions expire करें, उनकी संख्या सीमित रखें, हर session को atomically consume करें और unknown, expired या replayed identifiers अस्वीकार करें।[2]
- ✓केवल स्वीकृत MCP server executables और fixed argument schemas allow करें; model output या page content को arbitrary programs चुनने न दें।[1], [5]
- ✓अविश्वसनीय pages render करने वाले browsing agents को privileged local control planes से अलग रखें; संभव हो तो browser sandbox से loopback access रोकें।[1], [3]
- ✓Agent और Studio को low-privilege identity या disposable VM/container में चलाएँ और agent runtimes से unexpected child processes पर alert बनाएँ।[1]
- ✓AutoGen Studio को source से build करने पर b047730 या नया revision लें। Microsoft कहता है कि उस समय के PyPI package में प्रभावित route नहीं थी; deployed artifact को स्वयं verify करें।[1], [2]
स्रोत
- Microsoft Security Blog — AutoJack: एक पेज AI agent के host पर code कैसे चला सकता है
- Microsoft AutoGen commit b047730 — MCP WebSocket endpoint को सुरक्षित करना
- CWE-1385: WebSocket में Origin validation का अभाव
- CWE-306: महत्वपूर्ण कार्य के लिए authentication का अभाव
- CWE-78: OS command में special elements को सही तरह neutralize न करना