FlawOpen

flawopen.com/Teardowns/cve-2026-10032-a2ui-agent-button-xss

● CVE-2026-10032 · CVSS 9.3[1] · गंभीर
सुरक्षा अनुसंधान · FlawOpen

CVE-2026-10032: A2UI के एजेंट-निर्मित बटन में XSS

प्रभावित संस्करणों में डिफ़ॉल्ट Basic Catalog की openUrl कार्रवाई एजेंट का URL बिना scheme सीमा के window.open को भेजती थी। सलाह में बताए ब्राउज़र-origin प्रभाव के लिए व्यक्ति को रेंडर किए Button पर क्लिक करना पड़ता था; 0.10.2 या बाद में अपग्रेड करें।[1]

CVSS वेक्टरCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N[1]
💡 आसान भाषा में (ELI5)

ऐसे कियोस्क की कल्पना करें जिसमें सहायक बटन रखता है और गंतव्य अपने दिए कार्ड पर लिखता है। कियोस्क देखता है कि कार्ड पर पता है, यह नहीं कि वह सामान्य वेब पेज तक जाता है। आगंतुक को बटन दबाना होगा; गंतव्य नियम न हो तो ब्राउज़र पते को कियोस्क का निर्देश समझ सकता है। सुधार पते को पार्स करके केवल HTTP या HTTPS स्वीकारता है।[1], [2]

इस पेज के मुख्य शब्द

A2UI
एजेंट-निर्मित UI का ओपन-सोर्स प्रोटोकॉल और प्रोजेक्ट; सलाह web_core के Basic Catalog पर है।[1]
Basic Catalog
रेंडर UI actions के लिए A2UI के अंतर्निहित फ़ंक्शनों का समूह; डिफ़ॉल्ट रूप से सक्षम।[1]
फ़ंक्शन-कॉल कार्रवाई
फ़ंक्शन और तर्क बताने वाली UI कार्रवाई; Button एजेंट URL के साथ openUrl बुला सकता था।[1], [2]
CWE-79
वेब पेज बनाते समय इनपुट का अनुचित निष्प्रभावीकरण; सलाह इस browser injection समस्या को यही कमजोरी बताती है।[1], [4]

फ्रेमवर्क मैपिंग

  • इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-79

मूल कारण विश्लेषण (Root Cause)

प्रभावित Basic Catalog URL तर्क को नीति-जाँच वाले अविश्वसनीय नेविगेशन इनपुट के बजाय खोलने वाली string मानता था। API ने string प्रकार जाँचा, पर कमजोर कोड window.open(args.url, '_blank') से पहले प्रोटोकॉल सीमित नहीं करता था। एजेंट-नियंत्रित Button.functionCall मान को sink तक पहुँचा सकता था। क्लिक आवश्यक था; A2UI सलाह पीड़ित ऐप के browser-origin में script execution बताती है। सुधार URL parse करता, केवल http: और https: स्वीकारता और noopener,noreferrer के साथ सामान्यीकृत URL खोलता है। यह इसी navigation sink को ठीक करता है, हर एजेंट UI की सुरक्षा की गारंटी नहीं।[1], [2]

CVE-2026-10032: प्रभावित संस्करण और कार्रवाई सीमा

तैनाती की स्थितिसलाह से स्थापित तथ्यरक्षा की कार्रवाई
डिफ़ॉल्ट Basic Catalog के साथ @a2ui/web_core 0.9.0, 0.9.1, 0.9.2, 0.10.0 या 0.10.1।A2UI सलाह इन्हें प्रभावित बताती है और Basic Catalog डिफ़ॉल्ट रूप से सक्षम है।0.10.2 या बाद में अपग्रेड करें और deployed app का संस्करण जाँचें।
Button function call एजेंट-नियंत्रित डेटा से आती है और व्यक्ति क्लिक करता है।सलाह क्लिक से openUrl और browser-origin प्रभाव बताती है; यह zero-click नहीं।कार्रवाई तर्क अविश्वसनीय मानें और URL खोलने वाले function में जाँचें।
ऐप A2UI का React, Lit या Angular renderer उपयोग करता है।सलाह इन एकीकरणों को शामिल करती है; कमजोर सीमा web_core का साझा Basic Catalog action है।पैकेज जाँचें और web_core अपडेट करें; renderer setting कार्रवाई हटाती है, यह न मानें।
ऐप @a2ui/web_core 0.10.2 या बाद का चलाता है।रखरखावकर्ता 0.10.2 को सुधरा संस्करण बताते हैं; patch URL parse, HTTP/HTTPS allowlist और noopener,noreferrer जोड़ता है।मान्य/अमान्य schemes के regression tests और custom openUrl समीक्षा बनाए रखें।

हमले का चरण-दर-चरण प्रवाह

चरण 1

एजेंट Button कार्रवाई देता है

A2UI डेटा function call और तर्क वाला Button बना सकता है। एजेंट से आई कार्रवाई को अविश्वसनीय मानें।[1]

चरण 2

Basic Catalog openUrl हल करता है

डिफ़ॉल्ट Basic Catalog openUrl देता है; schema string माँगता है, पर कमजोर कोड URL scheme सीमित नहीं करता था।[1]

चरण 3

व्यक्ति रेंडर किया Button क्लिक करता है

सलाह का रास्ता उपयोगकर्ता क्लिक माँगता है। इसे बिना-इंटरैक्शन न कहें।[1], [2]

चरण 4

कार्रवाई window.open तक पहुँचती है

patch से पहले openUrl प्रोटोकॉल जाँचे बिना string को window.open भेजता था। सलाह पीड़ित ऐप के browser-origin में script execution बताती है।[1]

चरण 5

सुधारी कार्रवाई नेविगेशन सीमित करती है

सुधार URL resolve करता, HTTP/HTTPS के अलावा प्रोटोकॉल अस्वीकारता और noopener,noreferrer उपयोग करता है। 0.10.2 या बाद में अपग्रेड करें।[1], [2]

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

कमज़ोर अंश A2UI सलाह में बताई implementation से है। PR #1707 पते को parse/resolve करता है, केवल HTTP/HTTPS स्वीकारता है, और खुले पृष्ठ को मूल पृष्ठ नियंत्रित करने या referrer पाने से रोकता है। project types/imports छोड़े हैं; यह पूरा फ़ाइल या PoC नहीं।[1], [2]

सोर्स अंश: basic_functions.ts — OpenUrlImplementation

कमज़ोर कार्यान्वयन
export const OpenUrlImplementation = createFunctionImplementation(OpenUrlApi, args => {
  if (args.url && typeof window !== 'undefined' && window.open) {
    window.open(args.url, '_blank');
  }
});
सुरक्षित और सुदृढ़ फ़िक्स
export const OpenUrlImplementation = createFunctionImplementation(OpenUrlApi, args => {
  if (args.url && typeof window !== 'undefined' && window.open) {
    const baseHref =
      typeof window.location !== 'undefined' && window.location.href
        ? window.location.href
        : undefined;
    let url: URL;
    try {
      url = baseHref ? new URL(args.url, baseHref) : new URL(args.url);
    } catch (e: any) {
      throw new A2uiExpressionError(`Invalid URL specified: ${args.url}`, 'openUrl', e);
    }

    // प्रोटोकॉल की सख्त अनुमति-सूची: केवल HTTP और HTTPS की अनुमति है।
    if (url.protocol !== 'https:' && url.protocol !== 'http:') {
      throw new A2uiExpressionError(`Unsupported URL scheme: ${url.protocol}`, 'openUrl');
    }

    // खुले हुए पेज को मूल विंडो नियंत्रित करने से रोकने के लिए हमेशा noopener और noreferrer का उपयोग करें।
    window.open(url.href, '_blank', 'noopener,noreferrer');
  }
});

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

स्रोत