flawopen.com/Teardowns/cve-2026-25592-semantic-kernel-agent-file-write
CVE-2026-25592: Dateischreiben in Semantic Kernel
CVE-2026-25592 machte DownloadFileAsync von Semantic Kernel zum KI-Werkzeug für Host-Schreibzugriffe. Zugriff entfernen, auf 1.71.0 aktualisieren.[2]
Ein Bote darf ein Paket aus einem abgeschlossenen Testraum in ein Firmenbüro bringen. Eigentlich sollte er nur Aufträge von Mitarbeitern annehmen, doch sein Ausweis ließ ihn auch dem KI-Assistenten gehorchen. Eine bösartige Notiz konnte den Assistenten dazu bringen, eine Büroschublade als Ziel auszuwählen. Die Korrektur entfernt den Ausweis, der diese Hilfsfunktion für das Modell aufrufbar macht; Aufrufe durch den Anwendungscode brauchen weiterhin eine beschränkte Zielregel.[1], [2]
Kernkonzepte & Begriffe
KernelFunction- Attribut von Semantic Kernel, das eine Methode dem Modell als aufrufbares Werkzeug anbietet.[1], [2]
Framework-Zuordnungen
- CWE-Referenz für die in diesem Leitfaden beschriebene Schwachstelle: CWE-22
Ursachenanalyse
Semantic Kernels SessionsPythonPlugin für .NET verbindet eine entfernte Python-Sitzung mit dem Anwendungshost. DownloadFileAsync ruft eine Datei aus der Sitzung ab und kann die zurückgegebenen Bytes unter localFilePath auf dem Host speichern. Die Methode trug das Attribut KernelFunction, das ihre Argumente für die Werkzeugauswahl des Modells sichtbar machte. Wenn ein Angreifer die Eingabe des Agenten beeinflussen konnte, konnte er versuchen, den Aufruf der Hilfsfunktion mit einem unerwünschten Ziel auszulösen. Dies ist ein Fehler bei der Werkzeugautorisierung und der Pfadgrenze, kein Fehler des Sprachmodells und kein Ausbruch aus der entfernten Python-Sandbox. Microsofts Korrektur entfernt KernelFunction von DownloadFileAsync, sodass das Modell die Funktion nicht aufrufen kann. Wenn Anwendungscode die Hilfsfunktion weiterhin nutzt, konfigurieren und erzwingen Sie eine explizite Richtlinie erlaubter Verzeichnisse; die Upstream-Implementierung erlaubt alle Ziele, wenn diese Liste leer ist. GHSA-2ww3-72rp-wpp4 nennt NuGet-Versionen von Microsoft.SemanticKernel.Plugins.Core vor 1.71.0 und zusätzlich PyPI-Versionen von semantic-kernel vor 1.39.3; dieser Beitrag behandelt die von Microsoft dokumentierte .NET-Angriffskette.[1], [2], [3]
Paketumfang und behobene Versionen
| Paket / Umfang | Betroffene und behobene Versionen | Umfang dieses Artikels |
|---|---|---|
.NET Microsoft.SemanticKernel.Plugins.Core | Betroffen: < 1.71.0; behoben ab 1.71.0. | Die dokumentierte SessionsPythonPlugin-Kette: Das für das Modell erreichbare DownloadFileAsync konnte Sitzungsdaten in einen Host-Pfad schreiben. |
Python semantic-kernel | Betroffen: < 1.39.3; behoben ab 1.39.3. | Das Advisory führt auch dieses Paket auf. Dieser Artikel analysiert keinen Python-spezifischen Angriffsweg; aktualisieren Sie das Python-Paket separat. |
| Anwendungen, die Sitzungsdateien absichtlich auf dem Host speichern | Das Ziel auch nach dem Entfernen des Modellzugriffs begrenzen. | Eine explizite Positivliste kanonischer Pfade in einem Function Invocation Filter oder einer gleichwertigen Autorisierungsschicht verwenden. Eine leere AllowedDownloadDirectories-Liste ist in der Upstream-Implementierung freizügig. |
Schritt-für-Schritt Angriffsablauf
Nicht vertrauenswürdige Inhalte beeinflussen den Agenten
Ein Angreifer muss die Eingabe des Agents beeinflussen können, etwa durch Inhalte, die der Agent verarbeiten soll. In der von Microsoft dokumentierten Kette legt der erste Tool-Aufruf eine Datei in der isolierten Remote-Python-Sitzung ab; zu diesem Zeitpunkt bleibt sie dort eingeschlossen.[1], [2]
Schreiben auf dem Host wird möglich
Ein Schreibzugriff auf den Host setzt voraus, dass das Modell dieses Hilfsprogramm mit einem durch nicht vertrauenswürdige Eingaben beeinflussten localFilePath außerhalb eines wirksam erzwungenen erlaubten Verzeichnisses aufruft. Microsoft beschreibt eine kontrollierte Forschungskette, keine weitverbreitete Ausnutzung.[1], [2]
Quellcode: Verwundbar vs. Sicher
Der Upstream-Patch entfernt das Attribut KernelFunction von DownloadFileAsync und unterbricht den Modellzugriff an der Werkzeugregistrierung. Die Signatur bleibt für die beabsichtigte Verwendung durch Anwendungscode erhalten. Das Advisory empfiehlt außerdem, Argumente von DownloadFileAsync und UploadFileAsync mit einem Function Invocation Filter und einer expliziten Pfad-Allowlist zu prüfen. Path.GetFullPath allein ist keine Autorisierungsrichtlinie; eine leere AllowedDownloadDirectories-Liste ist in der Upstream-Implementierung zudem uneingeschränkt.[2], [3]
Quelltextauszug: Betroffene Methode: `DownloadFileAsync` in `SessionsPythonPlugin`
[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);
Checkliste für Engineering & Systemsicherheit
- ✓Aktualisieren Sie Microsoft.SemanticKernel.Plugins.Core auf Version 1.71.0 oder neuer und prüfen Sie die Laufzeitassembly sowie die gesperrten Abhängigkeiten, nicht nur die Projektdatei.[2]
- ✓Erfassen Sie alle Agenten, die SessionsPythonPlugin registrieren, und bestätigen Sie, dass DownloadFileAsync nicht mehr im Werkzeug-Schema des Modells enthalten ist.[1], [2]
- ✓Wenn Anwendungscode DownloadFileAsync oder UploadFileAsync aufruft, erzwingen Sie eine kanonisierte Pfad-Allowlist in einem Function Invocation Filter oder einer gleichwertigen Autorisierungsschicht.[2]
- ✓Lassen Sie AllowedDownloadDirectories nicht leer, wenn Zielpfade eingeschränkt werden müssen; eine leere Liste erlaubt laut Upstream-Implementierung jeden vollständigen Pfad.[3]
- ✓Prüfen Sie während des anfälligen Bereitstellungszeitraums die Host-Telemetrie zu Dateischreibvorgängen und untersuchen Sie Agent-Prozess-Schreibvorgänge außerhalb freigegebener Verzeichnisse; rotieren Sie Zugangsdaten nur bei Hinweisen auf eine Offenlegung.
- ✓Prüfen Sie das registrierte, dem Modell bereitgestellte Tool-Schema und die Host-Berechtigungen; stellen Sie sicher, dass kein Agent-Tool außerhalb ausdrücklich freigegebener Verzeichnisse schreiben kann.[1]