Sebuah alat automasi yang dibina berasaskan Safari MCP telah menutup tab papan pemuka (dashboard) pembangun semasa ia sedang dibaca. Insiden ini mendedahkan kecacatan tersembunyi pada pelindung (guard) yang sepatutnya menghalang ejen dipacu AI daripada menyentuh mana-mana tab yang bukan miliknya, dan ia menunjukkan mengapa kategori "safe-by-default" (selamat secara lalai) boleh menjadi liabiliti.
Pelindung yang berfungsi—sehinggalah ia tidak lagi berfungsi
Alat tersebut menandakan setiap tab yang diciptanya dengan pengenal pasti dalaman. Sebelum ejen mengeluarkan sebarang arahan, pelindung akan menyemak penanda tersebut; jika penanda hilang, pelindung akan enggan bertindak. Dalam praktiknya, pelindung tersebut berjaya menghalang ejen daripada membaca halaman yang tidak dibukanya—tepat seperti yang direka bentuk.
Semasa mengisi borang, halaman tersebut telah dialihkan (redirect) ke domain yang berbeza. Pengalihan tersebut telah membuang penanda tersebut, menyebabkan tab itu tidak berlabel. Pelindung mengesan ketiadaan penanda dan melaporkan, “Saya tidak dapat mengesahkan pemilikan, jadi saya tidak akan membaca tab ini.” Pada ketika itu, semakan keselamatan berfungsi seperti yang diharapkan.
Kod pembersihan yang melampaui batas
Seterusnya adalah rutin pembersihan manual yang bertujuan untuk menutup tab terbiar (orphaned tabs)—iaitu tab yang tidak mempunyai penanda. Rutin tersebut meminta alat untuk “menutup satu tab” tanpa mengesahkan pemilikan terlebih dahulu. Oleh kerana pelindung tidak dapat membuktikan bahawa tab itu adalah miliknya, alat tersebut beralih kepada tindakan lalai: “tutup tab semasa.” Tab semasa tersebut adalah papan pemuka yang sedang dibaca oleh pembangun, bukannya tab terbiar.
Hasilnya ialah operasi pemusnah yang dicetuskan oleh laluan keselamatan yang sepatutnya menjadi jalan buntu.
Tiga lapisan yang menganggap “tiada pemilikan” sebagai kebenaran
- Pengkategorian arahan – Senarai yang mengelompokkan arahan meletakkan
close_tabdi bawah kategori luas “tab management” (pengurusan tab). Pembangun menganggap semua perkara dalam kategori tersebut tidak berbahaya kerana arahan lain (seperti “list tabs”) hanya membaca maklumat. Tiada nota eksplisit yang menandakanclose_tabsebagai pemusnah, jadi ia mewarisi tahap keselamatan yang dianggap ada pada arahan jirannya. - Polisi peringkat sambungan (extension) – Sambungan Safari yang menguruskan semua tindakan pelayar membenarkan sebarang operasi apabila sesi tersebut tidak memiliki apa-apa. Peraturan itu berfungsi untuk tindakan baca sahaja, tetapi ia juga membuka ruang untuk
close_tabdilaksanakan tanpa semakan asal-usul (provenance check). - Ketidakpadanan logik – Rutin pembersihan menyemak penanda pemilikan pada satu tab tetapi kemudian memanggil fungsi tutup pada tab yang dilaporkan oleh pelayar sebagai “current” (semasa). Ketidakpadanan ini membolehkan kegagalan pelindung dalam mencari penanda memintas arahan tutup dan mengalihkannya ke sasaran yang salah.
Setiap lapisan menganggap bahawa “tiada pemilikan direkodkan” bermaksud “selamat untuk bertindak,” dan secara kolektif ia menghasilkan arahan penutupan tab yang dijalankan tanpa sebarang bukti kesahihan.
Penyelesaian: bukti pemilikan adalah wajib untuk tindakan pemusnah
Logik yang telah dikemas kini memisahkan laluan baca sahaja daripada laluan pemusnah. Kini, sebelum arahan close_tab boleh dilaksanakan, alat tersebut mesti membentangkan penanda yang sah untuk tab sasaran. Jika penanda hilang, arahan tersebut akan mengeluarkan ralat dan bukannya beralih kepada tab semasa secara lalai. Pelindung tidak lagi beralih kepada cabang “lakukan sesuatu” yang generik.
Perubahan ini menghapuskan keadaan kabur di mana ketiadaan penanda boleh ditafsirkan sama ada sebagai “tiada apa yang perlu dilakukan” atau “sila teruskan tindakan.” Dengan memaksa kegagalan secara eksplisit, alat tersebut melindungi kerja pengguna daripada kehilangan yang tidak disengajakan.
Perkara yang perlu diperhatikan oleh pembangun
- Jangan biarkan nama kategori menentukan keselamatan – Label seperti “tab management” tidak memberitahu apa-apa tentang impak setiap arahan di dalamnya. Rekodkan kos setiap operasi (baca vs. musnah) bersebelahan dengan arahan itu sendiri.
- Syarat pelindung mesti sepadan dengan tahap keterukan tindakan – Semakan yang mencukupi untuk permintaan baca tidak memadai untuk arahan yang boleh memadam data. Bina saluran pengesahan (validation pipelines) yang berasingan untuk setiap kelas impak.
- Elakkan tindakan lalai secara tersirat (implicit fallbacks) – Apabila pelindung tidak dapat mengesahkan pemilikan, tindak balas paling selamat adalah membatalkan (abort), bukan memilih sasaran lalai. Tindakan lalai adalah punca biasa pepijat peningkatan keistimewaan (privilege-escalation bugs).
- Audit andaian kedekatan (adjacency assumptions) – Semak sebarang senarai atau menu di mana arahan terletak bersebelahan antara satu sama lain. Arahan yang tidak berbahaya boleh mewarisi kepercayaan yang diberikan kepada jirannya jika kod tidak menilai semula keselamatan secara eksplisit.
Rumusan
Ketiadaan pelindung pemilikan bukanlah pepijat; ia adalah jurang reka bentuk. Anggap setiap arahan pemusnah sebagai domain keselamatan berasingan yang memerlukan bukti kuasa yang eksplisit, dan jangan sesekali membiarkan “tiada penanda” ditafsirkan sebagai “sila teruskan.” Hanya dengan cara itu alat automasi dapat melindungi tab yang sepatutnya mereka uruskan.
