FlawOpen

flawopen.com/Teardowns/cve-2026-25592-semantic-kernel-agent-file-write

● CVE-2026-25592 · CVSS 9.9[2], [4] · अति गंभीर
सुरक्षा अनुसंधान · FlawOpen

CVE-2026-25592: Semantic Kernel में फ़ाइल लेखन

CVE-2026-25592 ने Semantic Kernel के डाउनलोड सहायक को AI टूल बनाया, जिससे host पर फ़ाइल लिखना संभव हुआ। मॉडल की पहुँच हटाएँ और 1.71.0 में अपडेट करें।[2]

💡 आसान भाषा में (ELI5)

एक संदेशवाहक बंद परीक्षण-कक्ष से कंपनी के कार्यालय तक पार्सल पहुँचा सकता है। उसे केवल कर्मचारियों के अनुरोध मानने चाहिए थे, लेकिन उसका बैज AI सहायक की बात भी मनवा देता था। कोई दुर्भावनापूर्ण नोट सहायक को कार्यालय की दराज़ चुनने के लिए मना सकता था। सुधार में वह बैज हटाया जाता है जो मॉडल को इस सहायक फ़ंक्शन को बुलाने देता है; ऐप कोड से बुलाने पर भी गंतव्य सीमित रखना आवश्यक है।[1], [2]

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

KernelFunction
Semantic Kernel का attribute जो किसी method को मॉडल के लिए callable tool के रूप में प्रकाशित करता है।[1], [2]
SessionsPythonPlugin
Semantic Kernel plugin जिससे agent अलग-थलग remote Python session के code से काम कर सकता है।[1], [2]
localFilePath
DownloadFileAsync को दिया गया वैकल्पिक host-side destination path।[1], [2]
Path allowlist
नीति जो लिखने की अनुमति केवल स्पष्ट रूप से निर्धारित और canonicalized directories के भीतर देती है।[1], [2], [5]

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

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

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

.NET के लिए Semantic Kernel का SessionsPythonPlugin दूरस्थ Python सत्र को एप्लिकेशन host से जोड़ता है। DownloadFileAsync सत्र से फ़ाइल लाता है और लौटाए गए bytes को host पर localFilePath में सहेज सकता है। इस method पर KernelFunction attribute लगा था, जिससे मॉडल को टूल चुनते समय उसके arguments दिखते थे। यदि हमलावर एजेंट के input को प्रभावित कर सके, तो वह एजेंट से सहायक फ़ंक्शन को अनपेक्षित गंतव्य के साथ बुलवाने का प्रयास कर सकता है। यह tool authorization और path boundary की विफलता है, भाषा मॉडल का दोष या दूरस्थ Python सत्र से sandbox escape नहीं। Microsoft के सुधार में DownloadFileAsync से KernelFunction हटाया गया, इसलिए मॉडल उसे नहीं बुला सकता। यदि एप्लिकेशन कोड अब भी इस फ़ंक्शन का उपयोग करे, तो स्पष्ट allowed-directory नीति निर्धारित और लागू करें; सूची खाली होने पर upstream implementation सभी paths की अनुमति देता है। GHSA-2ww3-72rp-wpp4 NuGet Microsoft.SemanticKernel.Plugins.Core के 1.71.0 से पुराने संस्करणों और PyPI semantic-kernel के 1.39.3 से पुराने संस्करणों को भी सूचीबद्ध करता है; यह लेख Microsoft द्वारा बताए गए .NET chain पर केंद्रित है।[1], [2], [3]

पैकेज का दायरा और ठीक किए गए संस्करण

पैकेज / दायराप्रभावित और ठीक किए गए संस्करणइस लेख में क्या शामिल है
.NET Microsoft.SemanticKernel.Plugins.Coreप्रभावित: < 1.71.0; ठीक: 1.71.0 और बाद के संस्करण।दस्तावेज़ीकृत SessionsPythonPlugin श्रृंखला: मॉडल द्वारा बुलाया जा सकने वाला DownloadFileAsync सत्र डेटा को होस्ट पथ पर लिख सकता था।
Python semantic-kernelप्रभावित: < 1.39.3; ठीक: 1.39.3 और बाद के संस्करण।Advisory में यह पैकेज भी सूचीबद्ध है। यह लेख Python-विशिष्ट exploit path का विश्लेषण नहीं करता; Python पैकेज को अलग से अपडेट करें।
वे अनुप्रयोग जो जानबूझकर सत्र फ़ाइलें होस्ट पर सहेजते हैंमॉडल की पहुँच हटाने के बाद भी गंतव्य सीमित रखें।Function Invocation Filter या समकक्ष authorization layer में canonical paths की स्पष्ट allowlist लागू करें। Upstream implementation में खाली AllowedDownloadDirectories सूची किसी भी पूर्ण पथ को अनुमति देती है।

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

चरण 1

अविश्वसनीय सामग्री एजेंट को प्रभावित करती है

हमलावर को एजेंट के इनपुट को प्रभावित करने का कोई तरीका चाहिए, जैसे एजेंट द्वारा संसाधित की जाने वाली सामग्री। Microsoft द्वारा दर्ज श्रृंखला में पहली tool call फ़ाइल को अलग remote Python session में रखती है; इस चरण पर फ़ाइल वहीं सीमित रहती है।[1], [2]

चरण 2

मॉडल को host-side helper दिखता है

प्रभावित .NET deployment में KernelFunction ने DownloadFileAsync को मॉडल के callable tools में शामिल किया।[1], [2]

चरण 3

Arguments trust boundary पार करते हैं

दूरस्थ session से फ़ाइल माँगते समय मॉडल localFilePath चुन सकता था। helper उस path को host process में संभालता था।[1], [2]

चरण 4

Host पर लिखना संभव होता है

होस्ट पर लिखने के लिए मॉडल को इस helper को ऐसे localFilePath के साथ बुलाना होगा जिसे अविश्वसनीय इनपुट ने प्रभावित किया हो और जो लागू की गई अनुमति-प्राप्त directory से बाहर हो। Microsoft ने नियंत्रित शोध-श्रृंखला बताई है, व्यापक शोषण नहीं।[1], [2]

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

upstream patch DownloadFileAsync से KernelFunction attribute हटाता है और tool-registration boundary पर मॉडल की पहुँच रोकता है। application code के जानबूझकर उपयोग के लिए signature बना रहता है। advisory, Function Invocation Filter और स्पष्ट path allowlist से DownloadFileAsync तथा UploadFileAsync के arguments जाँचने की सलाह भी देता है। केवल Path.GetFullPath authorization policy नहीं है; upstream implementation में खाली AllowedDownloadDirectories सूची अनुमति को सीमित नहीं करती।[2], [3]

सोर्स अंश: स्रोत मेथड: `SessionsPythonPlugin` का `DownloadFileAsync`

कमज़ोर कार्यान्वयन
[KernelFunction, Description("Downloads a file from the current session.")]
public abstract Task<byte[]> DownloadFileAsync(
    string remoteFileName,
    string? localFilePath = null,
    CancellationToken cancellationToken = default);
सुरक्षित और सुदृढ़ फ़िक्स
[Description("Downloads a file from the current session.")]
public abstract Task<byte[]> DownloadFileAsync(
    string remoteFileName,
    string? localFilePath = null,
    CancellationToken cancellationToken = default);

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

स्रोत