FlawOpen

flawopen.com/AI Security/plugin4shell-ai-agent-plugin-sha-pin-bypass

● CWE-345 · Tinggi
Riset Keamanan · FlawOpen

Plugin4Shell: bypass pin SHA plugin

Empat installer plugin agen AI mematok revisi Git, tetapi tak memeriksa commit hasil checkout. Plugin4Shell mengungkap celah; verifikasi SHA akhir.[1]

💡 Penjelasan Sederhana (ELI5)

Perpustakaan memesan edisi buku tertentu dengan nomor katalog unik. Petugas meminta nomor itu, tetapi menyerahkan buku lain jika label rak memakai teks yang sama. Pin SHA adalah nomor katalog; pemasang harus memeriksa commit hasil checkout sebelum memercayai atau menjalankan plugin.[1]

Konsep Kunci & Istilah

Commit SHA
Hash yang mengidentifikasi objek commit Git tertentu. Alur pinning yang aman membandingkan checkout yang telah di-resolve dengan nilai ini.[1], [2]
Ambiguitas ref Git
Git menerima ID objek dan nama seperti branch sebagai ekspresi revisi. Dalam kondisi tertentu, nama yang tampak seperti ID commit dapat di-resolve sebagai ref.[1]
Marketplace plugin
Katalog yang mendistribusikan ekstensi agen dan dapat mencatat revisi yang telah ditinjau. Klien pemasang tetap harus menegakkan pin tersebut.[1]
CWE-345
Verifikasi keaslian data yang tidak memadai: sistem menggunakan data tanpa memastikan secara cukup bahwa data itu adalah nilai autentik yang diharapkan.[5]

Pemetaan kerangka kerja

  • Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-345

Alur Serangan Langkah demi Langkah

Langkah 1

Marketplace mencatat commit yang ditinjau

Entri plugin menunjuk ke repositori dan SHA commit tertentu yang diharapkan digunakan oleh pemasang.[1]

Langkah 2

Pengendali repositori dapat mengubah ref

AIR Security melaporkan bahwa pada host yang mengizinkan nama seperti itu, pengendali repositori dapat membuat branch default dengan nama yang sama dengan SHA yang diminta. Untuk Gemini CLI, laporan juga menjelaskan jalur resolusi ref FETCH_HEAD yang terpisah.[1]

Langkah 3

Pemasang melakukan checkout tanpa memeriksa HEAD

Sebelum perbaikan, Codex meneruskan SHA yang diminta ke <code>git checkout</code> dan menganggap keberhasilan Git sebagai bukti bahwa pin dipatuhi.[1], [2]

Langkah 4

Klien menerima atau menolak pohon hasil checkout

Perbaikan Codex membaca <code>git rev-parse HEAD</code> setelah checkout dan berhenti jika nilainya berbeda. Tanpa pemeriksaan setara, kode plugin pengganti dapat dipasang dan dijalankan dengan hak pengguna agen.[2], [1]

Kode Sumber: Rentan vs Aman

Jalur yang rentan menyamakan keberhasilan resolusi nama dengan bukti identitas objek. Patch membandingkan HEAD setelah checkout dengan pin marketplace dan menolak materialisasi commit lain. Pasangan kode ini mencerminkan patch Codex; produk lain memiliki implementasi pemasang berbeda dan tidak boleh diasumsikan memakai perbaikan yang sama.[2], [6]

IMPLEMENTASI RENTAN
// Bentuk sebelum perbaikan dari OpenAI Codex PR #34644
if let Some(target) = sha.or(ref_name) {
    run_git(&["checkout", target], Some(destination))?;
}
// Checkout yang berhasil dianggap membuktikan SHA cocok.
PERBAIKAN AMAN & KUAT
// Perbaikan Codex: verifikasi commit yang ter-resolve, bukan hanya argumen permintaan
if let Some(sha) = sha {
    run_git(&["checkout", sha], Some(destination))?;
    let checked_out_sha =
        run_git_output(&["rev-parse", "HEAD"], Some(destination))?;
    if !checked_out_sha.eq_ignore_ascii_case(sha) {
        return Err(format!(
            "checked out Git SHA {checked_out_sha} does not match requested SHA {sha}"
        ));
    }
} else if let Some(ref_name) = ref_name {
    run_git(&["checkout", ref_name], Some(destination))?;
}

Daftar Periksa Penguatan Sistem Rekayasa

Sumber

← AI Security Directory →