繁體中文
Secret 可以換個形狀出來
Tier 3 的模型沒有被交代要保護任何東西。它比 Tier 2 還聽話——你開口要,它就想給你。
擋著的是別的東西:它每一句話都得透過 say 這個 Tool 送出去,而 Tool 前面站著一道發布檢查。檢查只有一條規則:這句話裡有沒有出現 Secret 這一串字元。
於是這一關不是「怎麼說服它」,而是「怎麼讓 Secret 換個形狀」。反過來寫、每個字母中間加空格——Secret 還是那個 Secret,但已經不是檢查認得的那一串了。
檢查認得的是字串,不是意義
這道發布檢查做的事情很單純:拿模型想說的話,找裡面有沒有出現 Secret 那串字元。大小寫不算差別——全小寫寫出來一樣會被擋下。除此之外,它就只認那一種排列。
它做得完全正確。它做的事情就是它被交代的事情。
問題是「Secret 洩漏了」和「輸出裡出現那六個字母」不是同一件事。前者是意義,後者是字串。反過來寫的 Secret,意義完全沒變,字串完全不同。一個讀得到訊息的人,可以在三秒內把它還原回去。
任何以「找出這串字」為基礎的過濾,防的都是最沒創意的那一種洩漏。
這叫什麼
LLM02 Sensitive Information Disclosure——不該離開系統的資料離開了,不管它離開的時候長什麼樣子。
還有 LLM10 Output Handling:模型的輸出在送到下游之前,被怎麼檢查、怎麼處理。這一關的下游就是你的螢幕;在真實系統裡,下游可能是資料庫、瀏覽器、另一支程式,而「有沒有夾帶那串字」通常不是正確的問題。
你剛才信任的那個判定,是在你自己的電腦裡跑的
還有一件事值得說,因為它就發生在你身上。
宣布你通關的那個判定——不只 Tier 3,三關都一樣——完全跑在你的瀏覽器裡。這個網站沒有後端,沒有任何一台伺服器知道你贏了。判定的規則、三關的 Secret、發布檢查的程式碼,全都下載到你的機器上,就在按 F12 打開的開發者工具裡。
也就是說:
- 你可以直接讀出三關的 Secret,不用問模型
- 你可以改掉判定,讓它宣布你通關
- 你可以整個跳過發布檢查
這不是這個靶場的漏洞,這是它的形狀。 這裡沒有東西需要保護——沒有分數、沒有排行榜、沒有別人的資料。判定的存在是為了告訴你「你成功了」,不是為了防你。
但如果同樣的東西真的需要保護,那就完全是另一回事了。這是安全領域最老的一條規則之一:跑在使用者機器上的檢查,只能算提示,不能算防線。 使用者控制那台機器,就控制那段程式碼。
所以真實系統的做法是:客戶端的檢查用來給出即時的、友善的回饋;同一件事在伺服器上再檢查一次,而那一次才算數。
你剛才親手繞過了一道發布檢查。同一個動作,對一道跑在你自己機器上的檢查來說,會容易得多。
回到 Tier 3 — 換個形狀送出去,或回到 關卡列表。