FlawOpen

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

● CVE-2026-25592 · CVSS 9.9[2], [4] · Kritisch
Sicherheitsforschung · FlawOpen

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]

💡 Einfache Erklärung (ELI5)

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]
SessionsPythonPlugin
Semantic-Kernel-Plugin, mit dem ein Agent mit Code in einer isolierten entfernten Python-Sitzung interagieren kann.[1], [2]
localFilePath
Der optionale Zielpfad auf dem Host, den DownloadFileAsync erhält.[1], [2]
Pfad-Allowlist
Richtlinie, die Schreibvorgänge nur in ausdrücklich konfigurierten und kanonisierten Verzeichnissen erlaubt.[1], [2], [5]

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 / UmfangBetroffene und behobene VersionenUmfang dieses Artikels
.NET Microsoft.SemanticKernel.Plugins.CoreBetroffen: < 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-kernelBetroffen: < 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 speichernDas 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

Schritt 1

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]

Schritt 2

Das Modell sieht eine hostseitige Hilfsfunktion

In betroffenen .NET-Bereitstellungen nahm KernelFunction DownloadFileAsync in die vom Modell aufrufbare Werkzeugoberfläche auf.[1], [2]

Schritt 3

Argumente überschreiten die Vertrauensgrenze

Das Modell konnte localFilePath wählen, während es eine Datei aus der entfernten Sitzung anforderte. Die Hilfsfunktion verarbeitete diesen Pfad im Hostprozess.[1], [2]

Schritt 4

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`

VERWUNDBARE IMPLEMENTIERUNG
[KernelFunction, Description("Downloads a file from the current session.")]
public abstract Task<byte[]> DownloadFileAsync(
    string remoteFileName,
    string? localFilePath = null,
    CancellationToken cancellationToken = default);
GEHÄRTETER SICHERHEITS-PATCH
[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

Quellen