FlawOpen

flawopen.com/Teardowns/cve-2026-106032-bedrock-agentcore-openapi-reference-ssrf

● CVE-2026-106032 · CVSS v4 5.7 · Sedang
Riset Keamanan · FlawOpen

CVE-2026-106032: SSRF pada importir OpenAPI AgentCore

Starter Toolkit hingga versi 0.3.13 menyelesaikan referensi OpenAPI eksternal saat mengimpor agen. Data grup tindakan yang dimanipulasi dapat memicu permintaan keluar atau pembacaan berkas lokal. Tingkatkan ke versi 0.3.14 atau lebih baru, impor ulang agen terdampak, dan ganti artefak yang dihasilkan.[1], [2], [3]

💡 Penjelasan Sederhana (ELI5)

Bayangkan importir sebagai petugas yang menyusun map dengan mengikuti referensi dalam dokumen. Petugas yang rentan mengikuti semua referensi, termasuk yang menuju ke luar map atau ke berkas lokal. Agen yang tampak tepercaya dapat membuat komputer mengambil atau membaca data saat proses penyusunan. Perbaikannya hanya mengizinkan referensi di dalam dokumen yang sama.[2], [7], [8]

Konsep Kunci & Istilah

OpenAPI $ref
Rujukan ke skema atau definisi OpenAPI. Fragmen menunjuk ke dalam dokumen saat ini; referensi eksternal dapat menunjuk ke sumber lain.[1]
Prance ResolvingParser
Parser yang digunakan Starter Toolkit untuk memuat dan menyelesaikan referensi OpenAPI saat impor agen.[2]
SSRF
Server-side request forgery: input tak tepercaya membuat perangkat lunak mengirim permintaan dari posisi jaringannya sendiri.[7], [8]
CWE-918
cweId utama yang terstruktur pada catatan CVE adalah CWE-918 (Server-Side Request Forgery). Deskripsinya juga menyebut CWE-73 untuk aspek jalur berkas yang dikendalikan dari luar.[2], [3], [5]
CWE-73: External Control of File Name or Path
Catatan CVE yang sama juga menyebut CWE-73, Kontrol Eksternal atas Nama atau Jalur Berkas, untuk aspek pembacaan berkas lokal. CWE-73 muncul dalam deskripsi jenis masalah; cweId utama yang terstruktur adalah CWE-918.[3], [9]

Pemetaan kerangka kerja

Analisis Akar Masalah (Root Cause)

Pada 0.3.13, get_agent_info() meneruskan payload OpenAPI grup tindakan langsung ke prance.ResolvingParser tanpa membatasi jenis resolusi. Pada 0.3.14, importir terlebih dahulu memanggil assert_local_references_only(), yang secara rekursif menolak nilai string $ref yang tidak diawali prefiks fragmen internal #/, lalu mengatur resolve_types=RESOLVE_INTERNAL. Dengan demikian parser tidak mengambil referensi OpenAPI eksternal melalui jalur impor ini. Pengujian maintainer memastikan penolakan terjadi sebelum parser dipanggil dan mencakup referensi HTTP, file, jalur absolut, dan jalur jaringan, sementara fragmen internal tetap diizinkan. Jangan memperluas temuan ini ke jalur importir lain atau mengklaim semua akses jaringan dan berkas proses terblokir. Perbaikan yang didukung adalah peningkatan versi; perbandingan kode menunjukkan batas upstream, bukan resep eksploitasi. Advisory GitHub mencantumkan @seankohjs sebagai pelapor; AWS berterima kasih kepada Koh Jun Sheng atas kolaborasinya dalam pengungkapan kerentanan yang terkoordinasi.[2], [7], [8], [1]

Alur Serangan Langkah demi Langkah

Langkah 1

Principal dalam akun yang sama mengubah data agen

Principal terautentikasi dalam akun AWS yang sama harus dapat mengubah skema OpenAPI grup tindakan Bedrock Agent untuk menempatkan nilai referensi eksternal yang dirancang khusus di sana. Ini bukan serangan internet tanpa autentikasi.[2]

Langkah 2

Pengguna lain mengimpor agen

Pengguna menjalankan alur impor Starter Toolkit yang terdampak. Versi rentan memproses OpenAPI grup tindakan selama operasi ini.[1], [2]

Langkah 3

Parser menyelesaikan referensi eksternal

Versi 0.3.13 mengirim dokumen ke ResolvingParser tanpa membatasi penyelesaian ke referensi internal. Referensi eksternal yang dimanipulasi dapat memicu permintaan keluar atau akses berkas lokal dari lingkungan impor.[7], [2]

Langkah 4

Tingkatkan versi, impor ulang, dan ganti artefak

Tingkatkan ke 0.3.14 atau lebih baru, impor ulang agen yang sebelumnya diimpor dengan versi terdampak, lalu ganti artefak lokal dan yang sudah diterapkan. Jika memungkinkan, migrasikan dari Starter Toolkit yang tidak lagi didukung ke @aws/agentcore.[1], [8]

Kode Sumber: Rentan vs Aman

Cuplikan ini berasal dari distribusi sumber resmi 0.3.13 dan 0.3.14. Perbaikan menolak $ref eksternal sebelum Prance berjalan dan membatasi resolver pada referensi internal. Pengujian upstream memeriksa penolakan sebelum parser dan penerimaan fragmen internal. Ini perbandingan kode sumber yang terfokus, bukan contoh permintaan; tingkatkan paket alih-alih menyalin cuplikan.[7], [8], [2]

Cuplikan sumber: Cuplikan importir AgentCore versi 0.3.13 dan 0.3.14

IMPLEMENTASI RENTAN
# 0.3.13: parser menyelesaikan referensi dari dokumen OpenAPI.
parser = ResolvingParser(
    spec_string=json.dumps(action_group["apiSchema"]["payload"])
)
action_group["apiSchema"]["payload"] = parser.specification
PERBAIKAN AMAN & KUAT
# 0.3.14: tolak referensi eksternal sebelum penguraian.
assert_local_references_only(action_group["apiSchema"]["payload"])
parser = ResolvingParser(
    spec_string=json.dumps(action_group["apiSchema"]["payload"]),
    resolve_types=RESOLVE_INTERNAL,
)

def assert_local_references_only(node, path: str = "$") -> None:
    if isinstance(node, dict):
        reference = node.get("$ref")
        if isinstance(reference, str) and not reference.startswith("#/"):
            raise ValueError(
                f"External OpenAPI references are not supported: {reference!r} at {path}."
            )
        for key, child in node.items():
            assert_local_references_only(child, f"{path}.{key}")
    elif isinstance(node, list):
        for index, child in enumerate(node):
            assert_local_references_only(child, f"{path}[{index}]")

Daftar Periksa Penguatan Sistem Rekayasa

Sumber