flawopen.com/Teardowns/cve-2026-25592-semantic-kernel-agent-file-write
CVE-2026-25592: Penulisan File di Semantic Kernel
CVE-2026-25592 mengekspos helper unduhan Semantic Kernel sebagai tool AI yang dapat menulis ke host. Hapus akses model dan perbarui ke 1.71.0.[2]
Kurir dapat membawa paket dari ruang uji terkunci ke kantor perusahaan. Seharusnya ia hanya menerima permintaan staf, tetapi lencananya juga membuatnya mematuhi asisten AI. Catatan berbahaya dapat membujuk asisten memilih laci kantor. Perbaikannya menghapus lencana yang membuat helper ini dapat dipanggil model; pemanggilan oleh kode aplikasi tetap memerlukan aturan tujuan yang dibatasi.[1], [2]
Konsep Kunci & Istilah
KernelFunction- Atribut Semantic Kernel yang mengekspos metode kepada model sebagai tool yang dapat dipanggil.[1], [2]
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-22
Analisis Akar Masalah (Root Cause)
SessionsPythonPlugin pada Semantic Kernel .NET menghubungkan sesi Python jarak jauh ke host aplikasi. DownloadFileAsync mengambil file dari sesi dan dapat menyimpan byte yang dikembalikan ke localFilePath pada host. Metode ini memiliki atribut KernelFunction sehingga argumennya terlihat oleh model saat memilih tool. Jika penyerang dapat memengaruhi input agen, ia dapat mencoba membuat agen memanggil helper dengan tujuan yang tidak diinginkan. Ini adalah kegagalan otorisasi tool dan batas path, bukan cacat model bahasa atau pelarian dari sandbox sesi Python jarak jauh. Perbaikan Microsoft menghapus KernelFunction dari DownloadFileAsync agar model tidak dapat memanggilnya. Jika kode aplikasi masih memakai helper ini, konfigurasikan dan tegakkan kebijakan direktori yang diizinkan secara eksplisit; implementasi upstream bersifat permisif ketika daftarnya kosong. GHSA-2ww3-72rp-wpp4 mencantumkan versi NuGet Microsoft.SemanticKernel.Plugins.Core sebelum 1.71.0 dan juga versi PyPI semantic-kernel sebelum 1.39.3; teardown ini berfokus pada rantai .NET yang dijelaskan Microsoft.[1], [2], [3]
Cakupan paket dan versi yang diperbaiki
| Paket / cakupan | Versi terdampak dan versi perbaikan | Cakupan artikel ini |
|---|---|---|
.NET Microsoft.SemanticKernel.Plugins.Core | Terdampak: < 1.71.0; diperbaiki pada 1.71.0 dan versi lebih baru. | Rantai SessionsPythonPlugin yang terdokumentasi: DownloadFileAsync yang dapat dipanggil model bisa menulis data sesi ke jalur host. |
Python semantic-kernel | Terdampak: < 1.39.3; diperbaiki pada 1.39.3 dan versi lebih baru. | Advisory juga mencantumkan paket ini. Artikel ini tidak menganalisis jalur eksploitasi khusus Python; tingkatkan paket Python secara terpisah. |
| Aplikasi yang memang menyimpan file sesi di host | Batasi tujuan meskipun akses model sudah dihapus. | Gunakan allowlist jalur kanonis yang eksplisit dalam Function Invocation Filter atau lapisan otorisasi setara. Dalam implementasi upstream, daftar AllowedDownloadDirectories yang kosong bersifat permisif. |
Alur Serangan Langkah demi Langkah
Konten tidak tepercaya memengaruhi agen
Penyerang memerlukan cara untuk memengaruhi input agen, misalnya melalui konten yang diminta untuk diproses. Dalam rantai yang didokumentasikan Microsoft, pemanggilan tool pertama menempatkan file di sesi Python jarak jauh yang terisolasi; pada tahap ini file tetap berada di dalam sesi.[1], [2]
Penulisan pada host menjadi mungkin
Penulisan ke host mengharuskan model memanggil helper ini dengan localFilePath yang dipengaruhi input tidak tepercaya dan berada di luar direktori yang diizinkan serta benar-benar diberlakukan. Microsoft menjelaskan rantai riset terkontrol, bukan eksploitasi yang meluas.[1], [2]
Kode Sumber: Rentan vs Aman
Patch upstream menghapus atribut KernelFunction dari DownloadFileAsync sehingga akses model terputus pada batas registrasi tool. Signature tetap tersedia untuk penggunaan aplikasi yang disengaja. Advisory juga menyarankan pemeriksaan argumen DownloadFileAsync dan UploadFileAsync dengan Function Invocation Filter dan allowlist path eksplisit. Path.GetFullPath saja bukan kebijakan otorisasi; daftar AllowedDownloadDirectories yang kosong juga permisif pada implementasi upstream.[2], [3]
Cuplikan sumber: Metode sumber: `DownloadFileAsync` pada `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);
Daftar Periksa Penguatan Sistem Rekayasa
- ✓Perbarui Microsoft.SemanticKernel.Plugins.Core ke 1.71.0 atau lebih baru; verifikasi lockfile dan assembly runtime yang benar-benar dimuat, bukan hanya file proyek.[2]
- ✓Inventarisasikan agen yang mendaftarkan SessionsPythonPlugin dan pastikan DownloadFileAsync tidak muncul dalam skema tool model.[1], [2]
- ✓Jika kode aplikasi memanggil DownloadFileAsync atau UploadFileAsync, tegakkan allowlist path yang dikanonisasi melalui Function Invocation Filter atau lapisan otorisasi setara.[2]
- ✓Jangan biarkan AllowedDownloadDirectories kosong ketika tujuan harus dibatasi; implementasi upstream menganggap daftar kosong mengizinkan semua path penuh.[3]
- ✓Tinjau telemetri penulisan file host selama periode rentan dan selidiki penulisan proses agen di luar direktori yang disetujui; rotasi kredensial hanya jika ada bukti paparan.
- ✓Periksa skema tool yang terdaftar untuk model dan izin host; pastikan tidak ada tool agen yang dapat menulis di luar direktori yang secara eksplisit disetujui.[1]