flawopen.com/Teardowns/cve-2026-97662-aws-security-agent-mcp-git-argument-injection
CVE-2026-97662: injeksi argumen Git pada AWS Security Agent MCP
CVE-2026-97662 memungkinkan referensi Git yang dipengaruhi pemanggil dalam diff scan AWS Security Agent MCP ditafsirkan sebagai opsi perintah, melewati pembatasan workspace, dan menulis file pada host. Perbarui ke versi 0.2.0 atau lebih baru.[1], [2]
Vektor CVSS
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:H/SC:N/SI:N/SA:NSeorang petugas diminta mencari map berdasarkan label, tetapi menerima label yang diawali instruksi kontrol. Sistem arsip menjalankan instruksi itu alih-alih mencari map. Dalam kasus ini, referensi Git yang diawali tanda hubung dapat dianggap sebagai opsi. Menolak referensi kosong atau yang tampak seperti opsi sebelum menjalankan Git menutup batas input tersebut. Ini adalah penguraian opsi oleh Git, bukan eksekusi perintah shell secara sembarang.[2]
Konsep Kunci & Istilah
Server MCP- Proses lokal yang menyediakan alat bagi aplikasi AI melalui Model Context Protocol. Argumen alat masuk ke server sebagai data yang tidak tepercaya.
Injeksi argumen (CWE-88)- Program baris perintah menafsirkan input tidak tepercaya sebagai opsi atau pemisah, meskipun proses menerima daftar argumen alih-alih string shell.[2], [4]
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-88
- OWASP GenAI 2025 — LLM01:2025 Injeksi prompt
Analisis Akar Masalah (Root Cause)
AWS menjelaskan injeksi argumen kontekstual pada operasi diff scan: referensi yang diberikan ke pemindaian dapat ditafsirkan sebagai opsi baris perintah, bukan revisi Git. PR upstream mengonfirmasi bahwa start_diff_scan meneruskan base_ref ke git diff <base_ref> -- dan git archive; nilai kosong atau yang diawali tanda hubung dapat ditafsirkan berbeda. Ini bukan injeksi metakarakter shell: daftar argumen mencegah parsing shell, tetapi program yang dipanggil tetap dapat mem-parsing opsinya sendiri. Menurut AWS, masalah ini dapat membuat, menimpa, atau memotong file di luar workspace yang dimaksud, sebatas izin OS proses. Perbaikan yang digabung memvalidasi base_ref sebelum Git dan menolak nilai kosong serta nilai yang setelah trim diawali -; pengujian memastikan tidak ada subprocess maupun unggahan untuk input yang ditolak. Versi >=0.1.1 dan <0.2.0 terdampak; 0.2.0 memperbaikinya. Catatan CVE memberi CVSS 4.0 6,9 Sedang; GitHub Advisory juga mencantumkan CVSS 3.1 8,2 Tinggi. Payload eksploit tidak ditampilkan di sini.[1], [2], [3], [4]
Alur Serangan Langkah demi Langkah
Agen memanggil alat diff scan
Server MCP lokal menerima base_ref yang dapat dipengaruhi pemanggil. Risiko bergantung pada alur yang memungkinkan repositori, konten, atau pengguna tidak tepercaya memengaruhi nilai tersebut; prompt injection saja tidak otomatis mencapai jalur kode ini.[2]
Alur batas: teks revisi dan opsi Git
Alur data konseptual, bukan urutan perintah atau reproduksi exploit.
Dua parser, dua batas yang berbeda
- Parsing shell
- Array argumen mencegah shell menafsirkan nilai sebagai sintaks shell dan menutup batas ini.[3]
Kode Sumber: Rentan vs Aman
Perbandingan terfokus pada batas pemanggilan upstream, bukan salinan penuh scanner. Perubahan yang digabung memvalidasi referensi sebelum Git; pengujian memastikan nilai kosong dan berawalan tanda hubung tidak memulai subprocess atau unggahan. Daftar argumen mencegah parsing shell, tetapi tidak mencegah Git menafsirkan opsi. Cuplikan ini hanya menampilkan pemanggilan git diff; validasi yang sama harus melindungi setiap penggunaan base_ref, termasuk git archive.[3]
def start_diff_scan(path: str, base_ref: str):
# Ref yang menyerupai opsi mencapai Git sebelum divalidasi.
return subprocess.run(
["git", "diff", base_ref, "--"],
cwd=path,
check=False,
)
def _validate_git_ref(base_ref: str) -> None:
if not base_ref or not base_ref.strip():
raise ValueError("base_ref must not be empty.")
if base_ref.strip().startswith("-"):
raise ValueError("base_ref must not start with '-'.")
def start_diff_scan(path: str, base_ref: str):
_validate_git_ref(base_ref) # Tolak sebelum memulai subprocess atau mengunggah berkas.
return subprocess.run(
["git", "diff", base_ref, "--"],
cwd=path,
check=False,
)
Daftar Periksa Penguatan Sistem Rekayasa
- ✓Perbarui
awslabs.security-agent-mcp-serverversi 0.1.1 hingga 0.1.x ke 0.2.0 atau lebih baru; periksa versi proses MCP yang benar-benar berjalan.[1], [2], [6] - ✓Validasi setiap referensi Git yang dapat dipengaruhi pengguna atau repositori sebelum subprocess Git dan tolak nilai kosong atau berawalan tanda hubung sebelum unggahan atau efek samping lainnya.[2], [3]
- ✓Tambahkan uji regresi yang membuktikan referensi berawalan tanda hubung atau hanya spasi tidak memulai subprocess, unggahan, atau panggilan jarak jauh; sertakan referensi valid seperti
main,origin/main, danHEAD~1.[3] - ✓Gunakan daftar argumen, bukan string perintah shell, tetapi validasi juga setiap argumen sesuai tata bahasa opsi program yang dipanggil; escaping shell tidak mencegah injeksi argumen.[3]
- ✓Jalankan server MCP lokal dengan izin file minimum dan workspace terisolasi. Ini membatasi dampak, bukan pengganti pembaruan.[1]
- ✓Analisis FlawOpen: pada alur kerja yang meneruskan konten tidak tepercaya ke argumen alat agen, telusuri jalur hingga pemanggilan alat dan terapkan otorisasi serta validasi di server MCP.