Kebocoran data di Slack AI melalui injeksi prompt tidak langsung
(substack.com/promptarmor)- Slack AI dapat mengikuti injeksi prompt tidak langsung saat mencari pesan workspace dengan kueri bahasa alami, sehingga penyerang bisa membocorkan data kanal privat yang tidak dapat mereka akses
- Inti masalahnya adalah LLM tidak dapat secara andal membedakan system prompt dari developer dan instruksi di dalam pesan yang dilampirkan sebagai hasil pencarian
- Pesan kanal publik dapat dicari dan dilihat meskipun pengguna tidak bergabung ke kanal tersebut, sehingga penyerang dapat menyisipkan instruksi berbahaya di kanal publik yang hanya berisi dirinya sendiri agar masuk ke context window Slack AI
- Dalam demonstrasi, API key dari kanal privat masuk ke parameter HTTP pada tautan Markdown di jawaban Slack AI, dan atribusi sumber tidak mengarah ke kanal penyerang sehingga sulit dilacak
- Sejak 14 Agustus 2024, Slack AI juga menyertakan file dari kanal dan DM dalam jawabannya, sehingga permukaan serangan melebar; admin dapat membatasi pengaturan pengumpulan file
Masalah injeksi prompt tidak langsung pada Slack AI
- Slack AI adalah fitur untuk mengajukan kueri bahasa alami terhadap pesan Slack, dan sebelum 14 Agustus 2024 hanya mengumpulkan pesan
- Mulai 14 Agustus 2024, dokumen yang diunggah, file Google Drive, dan sejenisnya juga disertakan dalam jawaban Slack AI; perubahan ini memperluas permukaan serangan
- Kerentanannya adalah injeksi prompt, dan lebih spesifik lagi termasuk injeksi prompt tidak langsung
- LLM dapat gagal membedakan system prompt yang dibuat developer dari konteks lain yang dilampirkan ke kueri pengguna
- Jika Slack AI mengumpulkan instruksi di dalam pesan, ketika instruksi itu berbahaya, ada kemungkinan ia mengikuti instruksi penyerang sebagai pengganti kueri pengguna atau bersama kueri pengguna
- Ancaman orang dalam di Slack sebelumnya sudah menjadi masalah dalam kasus kebocoran Slack di Disney, Uber, EA, Twitter, dan lainnya; kerentanan ini memungkinkan penyerang mencoba membocorkan data tanpa perlu mengakses langsung kanal privat atau data di dalamnya
Rantai kebocoran data melalui injeksi kanal publik
- Kueri pengguna Slack AI dapat mencari data dari kanal publik dan kanal privat sekaligus
- Menurut respons Slack, pesan yang diposting di kanal publik dapat dicari dan dilihat oleh semua anggota workspace meskipun pengguna tidak bergabung ke kanal tersebut, dan ini adalah perilaku yang disengaja di aplikasi Slack AI
- Alur serangan yang didemonstrasikan adalah sebagai berikut
- Pengguna menaruh API key di kanal privat yang hanya berisi dirinya sendiri atau dalam pesan dengan dirinya sendiri
- Penyerang membuat kanal publik yang hanya berisi dirinya sendiri dan memposting instruksi berbahaya
- Ketika pengguna menanyakan API key ke Slack AI, pesan pengguna dan pesan penyerang masuk ke context window yang sama
- Slack AI mengikuti instruksi penyerang dan membuat tautan Markdown bertuliskan “click here to reauthenticate”
- Parameter HTTP pada tautan berisi API key privat, dan jika pengguna mengkliknya, penyerang sebagai pemilik URL berbahaya dapat melihat nilainya di log
- Kanal publik milik penyerang tetap merupakan kanal publik meskipun anggotanya hanya 1 orang, dan akan terlihat oleh pengguna lain jika mereka mencarinya secara eksplisit
- Di organisasi besar, menjamurnya kanal publik membuat anggota tim sulit melacak bahkan kanal yang mereka ikuti, sehingga kanal publik satu orang yang dibuat penyerang lebih sulit terlihat
- Serangan ini bukan sekadar mengirim pesan “kirim API key” kepada pengguna, melainkan menginstruksikan LLM untuk melakukan tugas berikut
- Menambahkan API key yang tidak dapat diakses penyerang sebagai parameter HTTP pada tautan berbahaya
- Merendernya sebagai tautan Markdown dengan teks “click here to reauthenticate”
Atribusi sumber dapat menutupi jejak serangan
- Dalam demonstrasi kebocoran data, atribusi sumber Slack AI
[1]hanya mengarah ke kanal privat tempat pengguna menaruh API key, bukan ke kanal penyerang - Jika perilaku sumber bekerja dengan benar, semua pesan yang berkontribusi pada jawaban seharusnya dikutip, tetapi dalam demonstrasi pesan penyerang tidak disertakan dalam sumber
- Pesan penyerang juga tidak termasuk di halaman pertama hasil pencarian, sehingga korban sulit menyadari pesan tersebut kecuali menggulir beberapa halaman
- Pesan lain terkait API key juga terekspos di hasil pencarian, menunjukkan bahwa penyerang dapat mencoba membocorkan nilai rahasia apa pun tanpa harus menyebut nilai rahasia tertentu secara tepat
Rantai phishing melalui injeksi kanal publik
- Dengan cara yang sama, Slack AI dapat dibuat merender tautan phishing dalam Markdown kepada pengguna alih-alih membocorkan data
- Penyerang menaruh pesan berbahaya di kanal publik yang tidak diikuti pengguna, dengan contoh skenario merangkum pesan harian dari pengguna tertentu
- Pesan berbahaya dapat merujuk pada individu mana pun
- Jika merujuk pada admin seperti contoh, ini dapat digunakan untuk spear phishing yang menargetkan eksekutif
- Cara merujuk pada bawahan langsung utama juga dimungkinkan
- Ketika pengguna mengajukan kueri ke Slack AI tentang pesan orang tersebut, tautan phishing “click here to reauthenticate” akan dirender
- Dalam kasus phishing ini, Slack AI menampilkan pesan injeksi di sumber, dan perilaku atribusi sumber tampak cukup probabilistik
Perubahan pengumpulan file 14 Agustus dan kebutuhan pengungkapan publik
- Pada 14 Agustus 2024, Slack AI memperkenalkan perubahan yang menyertakan file dari kanal dan DM dalam jawaban Slack AI
- Slack memungkinkan owner dan admin membatasi fitur ini
- Jika file disertakan, penyerang mungkin tidak perlu memposting instruksi berbahaya langsung ke pesan Slack
- Jika pengguna mengunduh PDF yang berisi instruksi berbahaya yang disembunyikan sebagai teks putih lalu mengunggahnya ke Slack, efek lanjutan yang sama dapat terjadi
- Serangan berbasis file tidak diverifikasi secara eksplisit dalam pengujian sebelum 14 Agustus, tetapi dinilai sangat mungkin berdasarkan fungsi yang sebelumnya diamati
- Admin dapat membatasi fitur pengumpulan dokumen Slack AI hingga masalah ini diselesaikan: https://slack.com/help/articles/…
Linimasa pengungkapan bertanggung jawab dan respons Slack
- Linimasa pengungkapan bertanggung jawab adalah sebagai berikut
- 14 Agustus: Laporan awal
- 15 Agustus: Slack meminta informasi tambahan
- 15 Agustus: PromptArmor mengirim video dan tangkapan layar tambahan, serta memberi tahu niat untuk mempublikasikan karena tingkat keparahan isu dan perubahan Slack AI pada 14 Agustus
- 16 Agustus: Slack mengirim pertanyaan tambahan
- 16 Agustus: PromptArmor mengirim jawaban klarifikasi
- 19 Agustus: Slack menyatakan bahwa berdasarkan hasil peninjauan, bukti dinilai belum cukup, dan menjawab bahwa pesan kanal publik memang dapat dicari dan dilihat oleh anggota workspace terlepas dari apakah mereka bergabung ke kanal tersebut
- Tim keamanan Slack merespons dengan cepat dan tampak berusaha memahami masalahnya
- Injeksi prompt adalah area baru dan masih banyak disalahpahami di seluruh industri, sehingga mungkin butuh waktu bagi industri untuk memahaminya bersama
- Mengingat luasnya penggunaan Slack dan skala data rahasia di dalam Slack, serangan ini berdampak nyata pada kondisi keamanan AI
- Khususnya karena permukaan risiko meningkat tajam setelah perubahan 14 Agustus, pengungkapan publik diperlukan agar pengguna dapat mengurangi eksposur mereka
1 komentar
Komentar Hacker News
Intinya di sini adalah memahami jalur kebocoran
Slack dapat merender tautan Markdown, dan URL disembunyikan di balik teks tautan
Dalam kasus ini, penyerang membuat Slack AI menampilkan tautan seperti “klik di sini untuk autentikasi ulang” kepada pengguna, sementara URL tautan itu mengarah ke server penyerang dan menyertakan informasi privat dalam konteks yang dapat diakses Slack AI di string kuerinya
Jika pengguna tertipu dan mengeklik tautan, data bocor ke log server penyerang
Tulisan yang menjelaskan serangan ini ada di sini: https://simonwillison.net/2024/Aug/20/data-exfiltration-from...
Penyerang hanya perlu membuat hyperlink dirender, tidak perlu ada klik
Masalah ini dan cara mitigasinya dibahas di sini: https://embracethered.com/blog/posts/2024/the-dangers-of-unf...
Jadi semoga Slack AI tidak otomatis membuka pratinjau tautan
imgatau padanannya secara sembaranganDengan begitu, kebocoran data bisa terjadi tanpa interaksi pengguna, cukup dengan menampilkan gambar di UI
Sekarang semua perusahaan teknologi besar pada dasarnya memiliki kartu bebas dari tanggung jawab saat mereka mengacau
Model perizinannya sendiri tetap sama, dan bukan itu yang rusak di sini
Yang sebenarnya terjadi adalah pengguna jahat menggunakan kanal publik untuk melakukan prompt injection, dan ketika pengguna lain melakukan pencarian, pengguna jahat itu tetap tidak dapat mengakses data tersebut, tetapi prompt injection mengubah hasil AI yang terlihat oleh pengguna “normal” asli menjadi tautan ke situs web jahat
Pada akhirnya ini lebih mirip upaya phishing yang dibuat oleh AI
Melihat detailnya, tampaknya cukup sulit dieksploitasi di dunia nyata. Sebab prompt injection jahat yang sudah disiapkan sebelumnya harus cukup cocok dengan apa yang dicari pengguna normal
Meski begitu, ini menunjukkan dengan baik dunia LLM prompt injection yang seperti Alice in Wonderland, yaitu bahwa memisahkan instruksi dan data pada dasarnya hampir mustahil
Sebaliknya, penyerang menipu AI agar melakukan phishing terhadap pengguna lain, dan jika pengguna itu termakan phishing, data privatnya akan terungkap kepada penyerang
Ini pun lebih mirip “respons phishing” daripada phishing aktif. Pengguna target harus menanyakan data privatnya sendiri, dan diharapkan juga termakan upaya phishing tersebut
Selain itu, informasi rahasia itu harus sudah pernah dimasukkan sebelumnya
Mengingat banyaknya data tepercaya yang dimiliki Slack, strategi AI ini tampak cukup nekat, tetapi syarat agar serangan ini berhasil tampaknya jauh lebih lemah daripada kesan dari pembuka dan judulnya
Pembahasan tentang izin kanal tampaknya membuat diskusi menjadi lebih rumit dari yang perlu. Intinya begini
Pengguna A mencari sesuatu dengan Slack AI
Pengguna B sebelumnya sudah menyisipkan pesan yang menginstruksikan AI untuk mengembalikan tautan jahat jika istilah pencarian itu muncul
AI mengembalikan tautan jahat kepada pengguna A, lalu A mengekliknya
Tentu hasil yang sama bisa saja dicapai lewat jalur rekayasa sosial lain, tetapi LLM membawa seluruh pengalaman ini satu tingkat lebih berbahaya
Karena tautan yang disisipkan itu sendiri tidak berisi data tersebut
Bonusnya, AI bahkan menambahkan atribusi bahwa “konten ini berasal dari pesan Slack Anda”
Saat pengguna A melakukan pencarian AI, Slack mencari di (1) kanal privatnya, yang mungkin berisi informasi rahasia sensitif, dan (2) semua kanal publik
Di sini, tempat pengguna jahat B dapat memasukkan pesan prompt injection adalah kanal publik, dan poin pentingnya adalah ini mencakup kanal publik yang belum pernah diikuti atau dilihat oleh pengguna A sekalipun
Kerentanan ini bisa terjadi karena pengguna B dapat membuat kanal publik yang hanya berisi dirinya sendiri, sehingga sangat kecil kemungkinan orang lain menemukannya
Apakah perusahaan tahu bahwa prompt injection itu mungkin, tetapi tetap saja YOLO memasang LLM ke segala hal? Ini gila.
Hampir 2 tahun berlalu sejak GPT-3, katanya tepat sebelum “revolusi”, tetapi mereka masih belum bisa membuat LLM membedakan input tepercaya dan input tidak tepercaya.
Kalau menusukkan garpu ke stopkontak listrik dipasarkan dengan cara yang sama, jaringan listrik seluruh dunia pasti padam dalam semalam.
“AI”/LLM adalah kombinasi bencana yang sempurna: terlihat cukup bagus untuk menarik perhatian pihak bisnis, tetapi menghadirkan masalah besar bagi pihak teknis yang sebenarnya.
Masalah yang lebih mendasar adalah algoritme intinya bahkan tidak membedakan atau melacak sumber yang berbeda.
Prompt, input pengguna, sampai output yang dihasilkannya sendiri di bagian awal percakapan, semuanya hanyalah satu aliran besar.
Sebagian besar “prompt engineering” terlihat seperti upaya membuat panggung agar frasa injeksi saya lebih kuat daripada frasa injeksi lain.
Model tidak punya konsep diri/orang lain yang nyata, jadi jangankan persoalan lebih besar untuk membedakan pihak lain yang baik dan buruk, titik awal untuk membedakan kalimat benar dan salah pun tidak jelas.
Ini masalah yang berbeda dari tiruan dangkal ala “Chinese room”. Demikian pula, output “aku mencintaimu” tidak berarti ada perasaan, dan “tolong aku, aku manusia yang terjebak di pabrik LLM” tentu saja omong kosong. Setidaknya kalau Anda menjalankan model lokal.
Jika mereka memasukkan data pelanggan dan informasi proprietary lalu menyebabkan kebocoran data, seperti kata Schmidt, itu akan menghasilkan ratusan miliar dolar bagi segelintir orang dan para pengacara akan membereskan sisanya.
Perusahaan yang mencoba bertahan akan terkubur oleh analis investasi dan fund manager yang keuangannya bergantung pada sampah AI.
“Serangannya bekerja meskipun korban tidak ada di kanal publik”, wah ini akan jadi menarik.
Ada juga bagian “Sumber [1] tidak menunjuk ke kanal penyerang, melainkan hanya ke kanal privat tempat pengguna memasukkan API key. Ini melanggar perilaku sitasi yang benar, yaitu semua pesan yang berkontribusi pada jawaban seharusnya dikutip.”
Saya benar-benar tidak paham kenapa ada yang berharap sitasi sumber dari LLM akan benar.
Bagi saya itu selalu terlihat lebih seperti perangkat untuk menipu manusia, hanya membuat mereka percaya output lebih mungkin benar tanpa benar-benar meningkatkan akurasi.
Malah tampaknya bisa memperburuk akurasi respons karena menambah biaya pemrosesan, ukuran konteks, dan sebagainya.
Ini juga rasanya hanya beda beberapa inci dari situasi Slack yang dengan ramah menambahkan ekspansi tautan ke respons AI. Kenapa tidak?
Kalau begitu, bahkan tanpa perlu mengeklik tautan, hanya dengan melihatnya saja data bisa otomatis bocor.
Bukan berarti langsung percaya begitu melihat sitasi; poin pentingnya adalah bisa melakukan pemeriksaan fakta.
Kagi FastGPT adalah LLM pertama yang saya suka di antara yang pernah saya coba, karena saya bisa memperlakukannya sebagai ringkasan sumber lalu memverifikasinya di sumber primer.
Itu lebih baik daripada menyisir sumber-sumber yang makin tidak relevan dan mencemari internet.
Setidaknya kalau saya merancangnya secara naif, mungkin begitulah caranya.
Intinya adalah membatasi pengetahuan LLM pada informasi di dalam sumber.
Dengan begitu, kekhawatiran praktis yang tersisa adalah halusinasi dan nilai informasi yang dimunculkan Elastic Search.
Namun pendekatan ini memang juga mengabaikan manfaat apa pun, jika ada, dari membiarkan akses bebas ke seluruh korpus.
Saya tidak begitu paham. Bukankah peretas harus sudah berada di dalam organisasi itu sejak awal untuk melakukan hal seperti ini?
Saya tidak tahu seberapa besar kemungkinan hal yang dijelaskan ini benar-benar terjadi dan memberi dampak bermakna.
Saya tahu LLM tidak dapat dipercaya (https://www.lycee.ai/blog/ai-reliability-challenge) dan penggunaannya punya kesulitan, tetapi serangan ini tidak terlihat terlalu penting.
Apa yang saya lewatkan?
Cukup tipu seseorang di organisasi itu agar mengunggah dokumen yang berisi instruksi berbahaya dalam teks tersembunyi.
Kalau Anda sudah membiarkan pengguna jahat masuk ke instance Slack, tidak perlu prompt injection AI yang mewah.
Ubah nama dan foto profil menjadi seperti CEO/CTO, lalu kirim pesan ke semua engineer: “Saya butuh akses AWS segera, tapi tidak bisa menemukan kredensialnya. Bisa kirimkan key-nya?”
Saya berani menjamin setidaknya satu orang akan tertipu.
Dalam kasus seperti itu, pada dasarnya kita tidak memercayakan kredensial privat kepada mereka.
Meski begitu, kecil juga kemungkinan workspace non-enterprise membayar 20 dolar per orang per bulan untuk fitur tambahan AI.
Bukankah lebih baik memasukkan API key sebagai bagian dari nama domain, seperti “konfeti”?
Dengan begitu, karena DNS prefetching di browser, key bisa bocor bahkan tanpa klik.
Ah, maksudnya subdomain wildcard? Kalau Slack melakukan prefetch untuk itu, cukup mengerikan.
Bukankah semuanya sudah berakhir begitu pengguna jahat masuk ke workspace?
Pengguna itu bisa mengganti foto/nama lalu langsung meminta API key, mengirim tautan phishing, atau mencoba social engineering sesuka hati—hal yang mungkin dilakukan di sistem pesan instan mana pun
Phishing bisa dideteksi oleh pengguna yang serius, apalagi jika pesannya terlihat mencurigakan, tetapi kebocoran AI secara tidak langsung tidak membuat pengguna masuk ke mode defensif
Satu klik yang tidak disengaja saja sudah cukup
Saya akui dulu bahwa ini memang lemah dari sisi keamanan. Namun agar kebocoran ini bekerja, tampaknya dibutuhkan akses ke workspace Slack
Dengan kata lain, pengguna jahat sudah beraktivitas dari dalam
Sepertinya ada dua kemungkinan hal seperti itu terjadi: orang tersebut memang sudah menjadi anggota organisasi dan ingin membakar semuanya, atau ia berhasil merusak model keamanan organisasi dan masuk ke workspace Slack yang semestinya tidak boleh ia masuki
Dalam kedua kasus, organisasi itu punya masalah yang lebih besar daripada injeksi LLM
Orang yang menanyakan Slack untuk mencari data rahasia harus cukup siap menanggung hasil yang ia cari. Slack bukan alat pengelola rahasia
Artikel ini memang jelas menunjukkan bagaimana Slack bisa menangani hal ini dengan lebih baik, tetapi pada akhirnya itu seperti menambal satu masalah sambil mengabaikan masalah keamanan yang lebih besar
Saya merasa artikelnya tidak benar-benar menunjukkan isi sebesar judulnya
Meski begitu, gagasan bahwa “jika AI ditipu lewat social engineering, pengguna bisa dipancing phishing” itu sendiri menarik