flawopen.com/Teardowns/cve-2026-25592-semantic-kernel-agent-file-write
CVE-2026-25592 : écriture dans Semantic Kernel
CVE-2026-25592 exposait le téléchargement Semantic Kernel comme outil IA, avec écriture sur l’hôte. Retirez l’accès du modèle et mettez à jour.[2]
Un coursier peut transporter un colis depuis une salle de test verrouillée vers les bureaux de l’entreprise. Il devrait accepter les demandes du personnel seulement, mais son badge l’amenait aussi à obéir à l’assistant IA. Une note malveillante pouvait alors convaincre l’assistant de choisir un tiroir du bureau. Le correctif retire le badge qui rend cet assistant appelable par le modèle ; les appels du programme doivent encore respecter une règle de destination limitée.[1], [2]
Concepts Clés et Termes
KernelFunction- Attribut Semantic Kernel qui présente une méthode au modèle comme un outil qu’il peut appeler.[1], [2]
Correspondances de référentiels
- Référence CWE pour la faiblesse décrite dans ce guide : CWE-22
Analyse de Cause Racine
SessionsPythonPlugin de Semantic Kernel pour .NET relie une session Python distante à l’hôte de l’application. DownloadFileAsync récupère un fichier de la session et peut enregistrer les octets reçus dans localFilePath sur l’hôte. La méthode portait l’attribut KernelFunction, qui exposait ses arguments à la sélection d’outils du modèle. Si un attaquant pouvait influencer l’invite de l’agent, il pouvait tenter de lui faire appeler l’assistant avec une destination inattendue. Il s’agit d’un défaut d’autorisation d’outil et de frontière de chemin, pas d’un défaut du modèle de langage ni d’une évasion du sandbox Python distant. Le correctif Microsoft retire KernelFunction de DownloadFileAsync afin que le modèle ne puisse plus l’appeler. Si le code de l’application utilise encore l’assistant, configurez et appliquez une politique explicite de répertoires autorisés ; l’implémentation amont est permissive lorsque cette liste est vide. GHSA-2ww3-72rp-wpp4 répertorie les versions NuGet de Microsoft.SemanticKernel.Plugins.Core antérieures à 1.71.0 et aussi les versions PyPI de semantic-kernel antérieures à 1.39.3 ; cette analyse se concentre sur la chaîne .NET documentée par Microsoft.[1], [2], [3]
Périmètre des paquets et versions corrigées
| Paquet / périmètre | Versions affectées et corrigées | Contenu de cet article |
|---|---|---|
.NET Microsoft.SemanticKernel.Plugins.Core | Affectées : < 1.71.0 ; corrigée : 1.71.0 ou ultérieure. | La chaîne documentée de SessionsPythonPlugin : DownloadFileAsync, accessible au modèle, pouvait écrire les données de session vers un chemin de l’hôte. |
Python semantic-kernel | Affectées : < 1.39.3 ; corrigée : 1.39.3 ou ultérieure. | L’avis répertorie aussi ce paquet. Cet article n’analyse pas de chaîne d’exploitation propre à Python ; mettez le paquet Python à niveau séparément. |
| Applications qui enregistrent volontairement des fichiers de session sur l’hôte | Limitez la destination même après avoir supprimé l’accès du modèle. | Utilisez une liste explicite de chemins canoniques autorisés dans un Function Invocation Filter ou une couche d’autorisation équivalente. Une liste AllowedDownloadDirectories vide est permissive dans l’implémentation upstream. |
Déroulement de l'Attaque Étape par Étape
Un contenu non fiable influence l’agent
L’attaquant doit pouvoir influencer l’entrée de l’agent, par exemple avec un contenu qu’il doit traiter. Dans la chaîne documentée par Microsoft, le premier appel d’outil place un fichier dans la session Python distante isolée ; à ce stade, le fichier reste confiné.[1], [2]
Une écriture sur l’hôte devient possible
Une écriture sur l’hôte nécessite que le modèle appelle cet helper avec un localFilePath influencé par une entrée non fiable et situé hors de tout répertoire autorisé effectivement imposé. Microsoft décrit une chaîne de recherche contrôlée, pas une exploitation généralisée.[1], [2]
Code Source : Vulnérable vs Sécurisé
Le correctif amont retire l’attribut KernelFunction de DownloadFileAsync et coupe l’accès du modèle à la frontière d’enregistrement des outils. La signature reste disponible pour un usage délibéré par l’application. L’advisory recommande aussi de valider les arguments de DownloadFileAsync et UploadFileAsync avec un Function Invocation Filter et une liste explicite de chemins. Path.GetFullPath seul ne constitue pas une politique d’autorisation ; en outre, une liste AllowedDownloadDirectories vide est permissive dans l’implémentation amont.[2], [3]
Extrait source: Méthode concernée : `DownloadFileAsync` dans `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);
Liste de Contrôle de Sécurité pour l'Ingénierie
- ✓Mettez Microsoft.SemanticKernel.Plugins.Core à niveau vers 1.71.0 ou une version ultérieure ; vérifiez le fichier de verrouillage et l’assembly réellement exécuté, pas uniquement le fichier projet.[2]
- ✓Inventoriez les agents qui enregistrent SessionsPythonPlugin et vérifiez que DownloadFileAsync n’apparaît plus dans le schéma d’outils du modèle.[1], [2]
- ✓Si le code de l’application appelle DownloadFileAsync ou UploadFileAsync, appliquez une liste canonicalisée de chemins autorisés dans un Function Invocation Filter ou une couche d’autorisation équivalente.[2]
- ✓Ne laissez pas AllowedDownloadDirectories vide si une restriction de destination est requise ; l’implémentation amont autorise tout chemin complet lorsque la liste est vide.[3]
- ✓Examinez la télémétrie d’écriture de fichiers sur l’hôte pendant la période vulnérable et enquêtez sur les écritures du processus agent hors des répertoires approuvés ; ne faites tourner les identifiants qu’en présence d’indices d’exposition.
- ✓Inspectez le schéma des outils exposés au modèle et les permissions de l’hôte ; vérifiez qu’aucun outil de l’agent ne peut écrire hors des répertoires explicitement autorisés.[1]