FlawOpen

flawopen.com/Teardowns/cve-2026-105812-bedrock-agentcore-generated-code-injection

● CVE-2026-105812 · CVSS v4 8.8 · Tinggi
Riset Keamanan · FlawOpen

CVE-2026-105812: injeksi kode pada importir AgentCore

Sampai Bedrock AgentCore Starter Toolkit versi 0.3.13, konfigurasi agen dapat dimasukkan ke Python yang dihasilkan tanpa pengodean aman. Pengguna kedua yang mengimpor lalu menjalankan atau menerapkan agen dapat menjalankan kode dengan hak lokalnya atau peran eksekusi AgentCore Runtime. Memperbarui paket tidak memperbaiki artefak yang sudah dihasilkan.[1], [2], [3]

💡 Penjelasan Sederhana (ELI5)

Importir ini seperti printer label yang mengubah pengaturan agen menjadi instruksi Python. Sebelum perbaikan, beberapa nilai ditempelkan di antara tanda kutip tanpa escape yang aman. Tanda kutip di dalam nilai dapat menutup teks terlalu cepat sehingga bagian berikutnya dibaca sebagai sintaks Python. Perbaikan mengodekan nilai sebagai literal string Python agar tetap menjadi data.[2], [5]

Konsep Kunci & Istilah

Impor agen
Alur Starter Toolkit yang membaca konfigurasi agen Bedrock dan membuat proyek Python lokal untuk framework seperti Strands atau LangChain.[2], [5]
Pembuatan kode
Menyusun kode sumber dengan menggabungkan templat program dan nilai konfigurasi atau masukan lain.[2], [5]
Literal string Python
Notasi sumber yang mewakili teks sebagai data. repr() mengembalikan representasi bertanda kutip dengan karakter yang di-escape agar tidak menjadi sintaks Python.[5]
CWE-94
Kontrol pembuatan kode yang tidak memadai: data masukan disisipkan ke kode sumber yang dihasilkan tanpa pengodean aman.[2], [3]
Artefak yang dihasilkan
Kode lokal atau terpasang yang dibuat saat agen diimpor. AWS menyatakan artefak terdampak harus diganti; memperbarui importir saja tidak cukup.[1], [2]

Pemetaan kerangka kerja

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

Analisis Akar Masalah (Root Cause)

Penerjemah impor yang rentan membangun sumber Python dengan f-string dan templat yang menyisipkan langsung nilai dari agen Bedrock, termasuk prompt dan kolom konfigurasi lain. Nilai yang memuat pembatas string Python dapat keluar dari konteks teks yang dimaksud. Perbaikan 0.3.14 menambahkan python_string_literal() memakai repr(str(value)) dan python_data_literal() untuk menormalkan data yang kompatibel dengan JSON, lalu meneruskan string yang dihasilkan melalui encoder tersebut. Peringatan pemelihara menjelaskan rantainya: prinsipal terautentikasi dalam akun AWS yang sama harus dapat mengubah data agen; pengguna lain kemudian mengimpor agen dan menjalankan atau menerapkan proyek hasilnya. Kode berjalan dengan hak lokal pengguna pengimpor atau peran eksekusi AgentCore Runtime. AWS menyatakan pembaruan tidak cukup untuk artefak dari versi terdampak: impor ulang dengan 0.3.14 atau lebih baru dan ganti keluaran lokal serta terpasang. CVE-2026-106032 adalah masalah terpisah tentang referensi OpenAPI eksternal saat impor, bukan cacat pembuatan kode ini.

Kondisi keterjangkauan celah kode yang dihasilkan

BatasKondisi yang terdokumentasiTindakan defensif
Versi toolkitVersi hingga 0.3.13 menyisipkan sejumlah nilai ke Python yang dihasilkan tanpa pengodean literal yang aman.Tingkatkan ke versi 0.3.14 atau lebih baru, atau migrasikan ke @aws/agentcore.
Pihak yang dapat mengubah dataPrincipal terautentikasi di akun AWS yang sama dapat mengubah kolom Bedrock Agent terkait.Batasi izin tulis data agen kepada principal tepercaya.
Impor oleh pengguna keduaPengguna lain mengimpor agen yang telah diubah melalui alur Starter Toolkit yang terdampak.Anggap data agen dari principal lain tidak tepercaya; tinjau asalnya sebelum mengimpor.
Pemicu eksekusiPengguna yang mengimpor menjalankan atau menerapkan proyek hasil impor; kode berjalan dengan hak lokal atau peran AgentCore Runtime.Impor dan uji menggunakan kredensial serta peran runtime terisolasi dengan hak minimum.
Artefak yang sudah dihasilkanPeningkatan paket tidak memperbaiki proyek yang sudah dihasilkan oleh versi terdampak.Impor ulang dengan versi yang telah diperbaiki dan ganti artefak lokal serta yang diterapkan.

Alur Serangan Langkah demi Langkah

Langkah 1

Prinsipal satu akun dapat mengubah data agen

Prasyaratnya adalah prinsipal terautentikasi di akun AWS memiliki izin mengubah kolom Bedrock Agent yang relevan, misalnya skema grup tindakan, instruksi kolaborasi, atau penggantian prompt.[2]

Langkah 2

Pengguna lain mengimpor agen

Alur Starter Toolkit terdampak membaca data yang diubah dan menghasilkan proyek Python. Kerentanan berada pada batas pembuatan sumber; impor biasa tidak langsung menjalankan hasilnya.[2], [5]

Langkah 3

Nilai tanpa pengodean masuk ke sumber Python

Pada versi sampai 0.3.13, beberapa nilai konfigurasi bebas disisipkan ke teks templat Python bertanda kutip tanpa pengodean literal yang aman.[2], [5]

Langkah 4

Proyek hasil impor dijalankan atau diterapkan

Saat pengguna menjalankan atau menerapkan agen hasil impor, kode dapat berjalan dengan hak lokal pengguna atau peran eksekusi AgentCore Runtime.[1], [2]

Langkah 5

Perbarui dan ganti keluaran yang dihasilkan

Versi 0.3.14 menambahkan pengodean literal Python. Impor ulang memakai versi yang diperbaiki lalu ganti keluaran lokal dan terpasang; AWS menyarankan migrasi dari Starter Toolkit yang usang ke @aws/agentcore.[1], [5]

Kode Sumber: Rentan vs Aman

Cuplikan diff upstream ini menunjukkan bahwa penerjemah yang rentan menyisipkan konfigurasi langsung ke string Python bertanda kutip tiga. Perbaikan meneruskan teks lengkap ke python_string_literal(), yang memakai repr() untuk meng-escape nilai sebagai data. Versi 0.3.14 menerapkan prinsip yang sama pada string hasil generasi lain dan data yang kompatibel dengan JSON, serta menambahkan uji regresi yang mem-parsing keluaran untuk memastikan teks penanda tetap menjadi konstanta string. Cuplikan ini adalah analisis kode sumber, bukan nilai injeksi atau eksploit yang dapat dijalankan.[2], [5]

Cuplikan sumber: services/import_agent/scripts/base_bedrock_translate.py dan services/import_agent/utils.py — cuplikan khusus prompt PRE_PROCESSING

IMPLEMENTASI RENTAN
# Sebelum perbaikan 0.3.14: nilai templat langsung dimasukkan ke sumber Python bertanda kutip tiga.
self.prompts_code += f"""
    PRE_PROCESSING_TEMPLATE=\"""\n
    {config["basePromptTemplate"]["system"]}
    \"""
"""
PERBAIKAN AMAN & KUAT
# 0.3.14: enkode seluruh nilai sebagai literal string Python
prompt = f"\n\n    {config['basePromptTemplate']['system']}\n    "
self.prompts_code += f"\n    PRE_PROCESSING_TEMPLATE={python_string_literal(prompt)}\n"

# services/import_agent/utils.py
def python_string_literal(value: Any) -> str:
    return repr(str(value))

Daftar Periksa Penguatan Sistem Rekayasa

Sumber