Claude telah mengaudit Kode Sumbernya, berikut adalah temuan ringkasnya
Berdasarkan analisis mendalam dari basis kode 2,200-file di semua empat dimensi:
š“ Kerentanan Keamanan
1. Penyisipan Perintah Windows (windowsPaths.ts)
Fungsi checkPathExists() menyusun perintah shell dengan langsung menginterpolasi string jalur yang dikontrol pengguna:
execSync_DEPRECATED(`dir "${path}"`, { stdio: 'pipe' })
Jalur yang mengandung " atau karakter metakarakter shell (misalnya, C:\foo" & jahat) dapat keluar dari konteks yang dikutip ganda dan mengeksekusi perintah sembarangan. Rendahnya kemungkinan eksploitasi dalam praktik (fungsi utilitas internal) tetapi tetap tidak aman.
2. Tidak Ada Penjaga SSRF IP Pribadi/Localhost di WebFetchTool
isValidUrl() memeriksa bahwa nama host memiliki setidaknya dua bagian yang dipisahkan titik ā tetapi tidak memblokir localhost, 127.0.0.1, 192.168.*, 169.254.*, atau alamat lain RFC-1918/link-lokal. Pemeriksaan blokir domain (checkDomainBlocklist) didelegasikan ke api.anthropic.com/api/web/domain_info, yang berarti SSRF ke host internal/pribadi sepenuhnya bergantung pada API eksternal tersebut menolak mereka dengan benar. Kesalahan jaringan mengembalikan check_failed yang mungkin ditangani secara lembut. Tidak ada pemeriksaan IP lokal pertahanan dalam.
3. JWT Didekode Tanpa Verifikasi Tanda Tangan (jwtUtils.ts)
decodeJwtPayload() secara eksplisit menghapus awalan sk-ant-si- dan mendekode payload JWT tanpa memverifikasi tanda tangannya. Digunakan untuk penyegaran token jadwal (membaca kedaluwarsa). Jika seorang penyerang dapat mengganti token yang dibuat, mereka dapat memanipulasi waktu penyegaran. Dampak rendah mengingat token diterima dari infrastruktur Anthropic yang tepercaya, tetapi ketidakadaan verifikasi layak dicatat.
š Pengelolaan Kunci API / Rahasia
4. Token Ingress Sesi Disimpan Dalam Memori Di Beberapa Lokasi
nilai session_ingress_token diteruskan sebagai string biasa dan disimpan dalam sessionIngressTokens (sebuah Peta) di bridgeMain.ts. Token muncul dalam log debug dengan pengredakan awalan (token.slice(0, 15)ā¦) ā tetapi pengredakan log bersifat manual dan diterapkan secara tidak konsisten. Setiap perubahan logging di masa depan dapat secara tidak sengaja mengekspos token penuh.
5. KUNCI_CLIENT_CLAUDE_CODE dan KUNCI_PASSPHRASE_CLIENT_CLAUDE_CODE dalam Lingkungan
Variabel lingkungan sensitif ini ada sebagai opsi konfigurasi yang didokumentasikan. Jika muncul dalam daftar proses, /proc/self/environ, atau ditangkap oleh alat, mereka terpapar. Ada pemeriksaan keamanan validateProcEnvironAccess di BashTool yang memblokir pembacaan /proc/*/environ ā bagus ā tetapi ini hanya berlaku untuk perintah bash yang dikeluarkan oleh Claude, bukan inspeksi proses sembarangan.
6. Tidak Ada Penghapusan Rahasia Secara Eksplisit
Rahasia yang didekode dari decodeWorkSecret() dan token yang disimpan di jembatan tidak pernah secara eksplisit dihapus/nul setelah digunakan. Dalam JavaScript ini sebagian besar adalah masalah V8 GC, tetapi rahasia dapat bertahan dalam memori heap dan muncul dalam dump kerusakan.
š” Privasi Data / Telemetri
7. Telemetri Opt-Out Tidak Default
Analitik aktif secara default dan memerlukan pengaturan variabel lingkungan eksplisit (DISABLE_TELEMETRY=1 atau CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1). Acara dialokasikan ke Datadog dan logging acara 1P Anthropic. Tipe penanda AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS adalah tipe tidak pernah ā yang berarti sebenarnya tidak bisa mencegah metadata string dari dicatat; ini ditegakkan oleh konvensi dan tinjauan kode, bukan sistem tipe.
8. Berbagi Transkrip pada Umpan Balik
submitTranscriptShare.ts mengirimkan seluruh riwayat percakapan (pesan dinormalisasi + transkrip JSONL mentah + transkrip subagen) ke Anthropic pada umpan balik survei, termasuk panggilan redactSensitiveInfo() yang ruang lingkupnya tidak jelas. Ini terjadi pada pemicu umpan balik negatif DAN positif. Pengguna mungkin tidak sepenuhnya memahami konten transkrip yang diunggah.
9. PROTO Bidang PII Masuk ke Logging 1P
Pola kunci PROTO* mengarahkan nilai yang ditandai PII ke "kolom istimewa" di BigQuery dengan kontrol akses terbatas. Desainnya baik tetapi sepenuhnya bergantung pada stripProtoFields() di sink.ts yang dipanggil sebelum setiap sink non-1P. Sebuah panggilan yang terlewat akan mengarahkan PII yang tidak teredaksi ke backend akses umum.
šµ Kualitas Kode / Arsitektur
10. Penggunaan API yang Sudah Tidak Dipakai secara Berat
177 lokasi panggilan merujuk pada fungsi dengan akhiran DEPRECATED (terutama execSyncDEPRECATED, splitCommand_DEPRECATED). Pengganti utama (jalur AST tree-sitter) dibatasi oleh ketersediaan ā jalur regex yang sudah tidak dipakai tetap menjadi cadangan untuk semua pemeriksaan keamanan. Kompleksitas jalur ganda ini adalah risiko pemeliharaan jangka panjang.
11. 663 Blok tangkap {} Kosong
Sebagian besar pola penanganan kesalahan ada di seluruhnya. Banyak yang disengaja (operasi upaya terbaik seperti penulisan cache), tetapi yang lain menyembunyikan kegagalan yang berarti dengan diam. Yang patut dicatat: tangkap checkDomainBlocklist mengembalikan check_failed dengan kesalahan, yang baik ā tetapi banyak pemanggil menangani check_failed dengan longgar.
12. 940 Panggilan void Fire-and-Forget
Penggunaan pervasive void asyncFunction() berarti banyak kegagalan async diam-diam diabaikan. Analitik, penulisan telemetri, dan beberapa operasi sesi semuanya menggunakan pola ini.
13. 142 Komentar TODO/FIXME/HACK
Menunjukkan utang teknis yang berarti, meskipun beberapa diberi anotasi keamanan (analisis serangan yang terdokumentasi baik dalam bashSecurity.ts sebenarnya positif).
14. bashSecurity.ts Luar Biasa tetapi Rentan Terhadap Regex
Kode validasi keamanan shell sangat rinci ā mencakup injeksi IFS, spasi Unicode, diferensial carriage return, ekspansi kurung, bypass spesifik Zsh, dll. Namun, jalur regex _DEPRECATED (digunakan ketika tree-sitter tidak tersedia) secara inheren rapuh. Tim telah mendokumentasikan lebih dari 20 kelas bypass yang diketahui; kemungkinan ada kasus tepi yang belum ditemukan.
Tabel Ringkasan
Berikut adalah versi yang ditulis ulang dengan bersih tanpa format tabel:
Ringkasan
Keamanan ā š“ Tinggi: Kerentanan injeksi direktori Windows "${path}"
Keamanan ā š“ Tinggi: Tidak ada perlindungan terhadap localhost/IP pribadi SSRF
Keamanan ā š Sedang: JWT didekode tanpa memverifikasi tanda tangannya
Rahasia ā š Sedang: Token Ingress terpapar dalam memori/log
Rahasia ā š Sedang: Kunci klien dan frasa sandi disimpan melalui variabel lingkungan
Rahasia ā š” Rendah: Tidak ada penghapusan memori untuk data sensitif
Privasi ā š Sedang: Telemetri tidak opt-out secara default
Privasi ā š Sedang: Umpan balik dapat memicu unggahan transkrip implisit
Privasi ā š” Rendah: Penanganan PII bergantung pada satu panggilan stripProtoFields
Kualitas ā š Sedang: 177 lokasi panggilan fungsi yang sudah tidak dipakai
Kualitas ā š” Rendah: 663 blok tangkap kosong
Kualitas ā š” Rendah: 940 panggilan async fire-and-forget
Kualitas ā š” Rendah: 142 item TODO/FIXME
Kualitas ā š” Rendah: Penggunaan regex yang rapuh di jalur sensitif terhadap keamanan
https://t.co/jBiMoOzt8G
