FlawOpen

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

● CVE-2026-25592 · CVSS 9.9[2], [4] · Kritis
Riset Keamanan · FlawOpen

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]

💡 Penjelasan Sederhana (ELI5)

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]
SessionsPythonPlugin
Plugin Semantic Kernel yang memungkinkan agen berinteraksi dengan kode di sesi Python jarak jauh yang terisolasi.[1], [2]
localFilePath
Path tujuan opsional pada host yang diterima DownloadFileAsync.[1], [2]
Allowlist path
Kebijakan yang hanya mengizinkan penulisan di bawah direktori yang dikonfigurasi dan dikanonisasi secara eksplisit.[1], [2], [5]

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 / cakupanVersi terdampak dan versi perbaikanCakupan artikel ini
.NET Microsoft.SemanticKernel.Plugins.CoreTerdampak: < 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-kernelTerdampak: < 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 hostBatasi 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

Langkah 1

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]

Langkah 2

Model melihat helper host

Pada deployment .NET yang terdampak, KernelFunction memasukkan DownloadFileAsync ke permukaan tool yang dapat dipanggil model.[1], [2]

Langkah 3

Argumen melintasi batas kepercayaan

Saat meminta file dari sesi jarak jauh, model dapat memilih localFilePath. Helper memproses path itu di proses host.[1], [2]

Langkah 4

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`

IMPLEMENTASI RENTAN
[KernelFunction, Description("Downloads a file from the current session.")]
public abstract Task<byte[]> DownloadFileAsync(
    string remoteFileName,
    string? localFilePath = null,
    CancellationToken cancellationToken = default);
PERBAIKAN AMAN & KUAT
[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

Sumber