Apa yang terjadi
Dalam MCP TypeScript SDK resmi, klien OAuth mengizinkan server MCP yang terhubung dengan klien untuk memutuskan server otorisasi mana yang menerima kredensial OAuth klien; kredensial yang tersimpan/disediakan sebelumnya tidak terikat ke server otorisasi tempat mereka berada (CWE-345/CWE-522). Server MCP yang berbahaya atau disusupi dapat menamai server otorisasinya sendiri dalam metadata sumber daya yang dilindungi dan, tanpa interaksi pengguna, menerima `refresh_token` dan `client_secret` tersimpan korban (1.x) atau `client_secret`/asersi yang ditandatangani dari penyedia non-interaktif yang dibundel (1.x dan 2.x). Diperbaiki dalam SDK 1.31.0 dan @modelcontextprotocol/client 2.2.0.
Mengapa penting
Ini adalah SDK referensi untuk Model Context Protocol — jaringan ikat AI agen. Karena dapat diotomatisasi (tanpa UI, tanpa konfirmasi pengguna), agen mana pun yang terhubung ke server MCP yang tidak tepercaya atau disusupi sambil menyimpan kredensial OAuth untuk penyedia yang sah akan diam-diam menyerahkan token berumur panjang, memungkinkan pengambilalihan akun/API di seluruh tumpukan agen. Kesenjangan pengikatan penerbit tepercaya adalah cacat integrasi OAuth struktural di pustaka klien inti ekosistem.
Vektor serangan
Agen terhubung ke server MCP yang dikendalikan/ disusupi penyerang; server mengiklankan server otorisasinya sendiri dalam metadata sumber daya; SDK mengirim refresh_token + client_secret tersimpan ke endpoint tersebut pada penyegaran token berikutnya.
Sistem yang terdampak
@modelcontextprotocol/sdk >= 1.12.0, < 1.31.0 (1.x); @modelcontextprotocol/client >= 2.0.0, < 2.2.0 (2.x)
Mitigasi
Tingkatkan ke @modelcontextprotocol/sdk 1.31.0 atau @modelcontextprotocol/client 2.2.0; pada 1.x hanya hubungkan klien yang mendukung OAuth ke server MCP tepercaya (solusi sementara).