flawopen.com/Teardowns/cve-2026-25592-semantic-kernel-agent-file-write
CVE-2026-25592: Semantic Kernel में फ़ाइल लेखन
CVE-2026-25592 ने Semantic Kernel के डाउनलोड सहायक को AI टूल बनाया, जिससे host पर फ़ाइल लिखना संभव हुआ। मॉडल की पहुँच हटाएँ और 1.71.0 में अपडेट करें।[2]
एक संदेशवाहक बंद परीक्षण-कक्ष से कंपनी के कार्यालय तक पार्सल पहुँचा सकता है। उसे केवल कर्मचारियों के अनुरोध मानने चाहिए थे, लेकिन उसका बैज AI सहायक की बात भी मनवा देता था। कोई दुर्भावनापूर्ण नोट सहायक को कार्यालय की दराज़ चुनने के लिए मना सकता था। सुधार में वह बैज हटाया जाता है जो मॉडल को इस सहायक फ़ंक्शन को बुलाने देता है; ऐप कोड से बुलाने पर भी गंतव्य सीमित रखना आवश्यक है।[1], [2]
इस पेज के मुख्य शब्द
KernelFunction- Semantic Kernel का attribute जो किसी method को मॉडल के लिए callable tool के रूप में प्रकाशित करता है।[1], [2]
फ्रेमवर्क मैपिंग
- इस गाइड में बताई गई कमजोरी के लिए 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 सूची किसी भी पूर्ण पथ को अनुमति देती है। |
हमले का चरण-दर-चरण प्रवाह
सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन
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);
इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट
- ✓Microsoft.SemanticKernel.Plugins.Core को 1.71.0 या उसके बाद के संस्करण में अपडेट करें; project file के साथ lockfile और runtime assembly भी जाँचें।[2]
- ✓SessionsPythonPlugin register करने वाले agents की सूची बनाएँ और पुष्टि करें कि मॉडल के tool schema में DownloadFileAsync नहीं है।[1], [2]
- ✓यदि application code DownloadFileAsync या UploadFileAsync बुलाता है, Function Invocation Filter या समान authorization layer में canonical path allowlist लागू करें।[2]
- ✓गंतव्य सीमित करना हो तो AllowedDownloadDirectories खाली न छोड़ें; upstream implementation खाली सूची को किसी भी पूर्ण path की अनुमति मानती है।[3]
- ✓कमजोर deployment अवधि की host file-write telemetry जाँचें और स्वीकृत directories से बाहर agent process की writes का विश्लेषण करें; credentials केवल exposure के प्रमाण होने पर बदलें।
- ✓मॉडल के लिए पंजीकृत tool schema और host permissions जाँचें; पुष्टि करें कि कोई agent tool स्पष्ट रूप से स्वीकृत directories के बाहर नहीं लिख सकता।[1]