flawopen.com/AI Security/plugin4shell-ai-agent-plugin-sha-pin-bypass
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]
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
Marketplace mencatat commit yang ditinjau
Entri plugin menunjuk ke repositori dan SHA commit tertentu yang diharapkan digunakan oleh pemasang.[1]
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]
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]
// 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 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
- ✓Setelah setiap checkout yang dipatok dengan SHA, resolve commit yang benar-benar terpasang (misalnya <code>git rev-parse HEAD</code>) lalu cocokkan persis dengan pin permintaan sebelum memuat file plugin.[2], [6]
- ✓Rekomendasi implementasi FlawOpen: Gagalkan proses jika ada ketidakcocokan, HEAD tidak ada, perintah gagal, atau format revisi tidak dikenal; jangan mencoba ulang menggunakan nama branch.[2]
- ✓Uji pemasang dengan repositori lokal sementara yang nama branch default-nya bertabrakan dengan SHA commit lain; pastikan pemasangan ditolak dan tidak ada kode plugin yang dimuat.[6]
- ✓Rekomendasi implementasi FlawOpen: Pisahkan pemasangan melalui nama ref dari pin SHA yang tidak berubah dalam tipe dan alur kontrol; catat commit yang telah diverifikasi di metadata instalasi.[1]
- ✓Inventarisasi versi agen yang terdampak dan host Git marketplace. GitHub memblokir nama branch berbentuk SHA, tetapi aturan khusus host itu tidak melindungi host lain yang didukung atau jalur FETCH_HEAD yang dilaporkan untuk Gemini.[1], [4]
- ✓Pengungkapan AIR yang dikutip menyatakan Codex diperbaiki pada 0.146.0 dan Claude Code pada 2.1.179, tetapi tidak memberikan rentang lengkap versi yang terdampak. Periksa panduan vendor terbaru sebelum menyarankan status atau tindakan untuk Copilot dan Gemini CLI.[1], [3], [7]
- ✓Pertahankan tes regresi Codex
materialize_git_source_rejects_sha_that_resolves_to_hostile_default_branch; tes ini membuat repositori lokal sementara dan memastikan HEAD yang tidak cocok ditolak sebelum sumber plugin dimaterialisasi.[6]
Sumber
- AIR Security: pengungkapan Plugin4Shell dan status koordinasi vendor
- OpenAI Codex PR #34644: verifikasi checkout Git plugin berdasarkan SHA
- Rilis OpenAI Codex 0.146.0
- The Hacker News: laporan independen dan batasan tiap host
- MITRE CWE-345: verifikasi keaslian data yang tidak memadai
- Codex regression test: reject SHA resolving to hostile default branch
- Rilis Anthropic Claude Code v2.1.179