讓 AI 扮演駭客攻擊購物車:從退款四捨五入漏洞到 Patriot 飛彈誤差事故
核心故事
作者做了一套購物車系統,測試覆蓋率 100%。
表面看起來萬無一失,但他意識到一個問題:
一個負責「驗證能不能過」的 AI,潛意識其實希望系統拿到 100 分。
於是他換了一個角度,叫另一個 AI 扮演「想佔便宜的駭客」,用完全正常的 API 操作系統,目標只有一個:
想辦法獲得最大利益。
結果,AI 找到了一個真實可利用的商業邏輯漏洞。
漏洞怎麼出現
這個漏洞不是什麼高深的 injection 或 memory corruption,而是非常典型、也非常危險的組合:
round()四捨五入- 按比例退款
- 特定升降級順序
在這套邏輯下,AI 發現只要以特定方式每天升降不同方案,就可以讓退款金額略高於應退金額。
看起來每次只多拿幾分錢,但它像一個極度自律的套利機器:
- 每天準時操作
- 重複升級 / 退款
- 持續 30 天
- 最終白拿了 30 個付費服務、各兩個月使用權,還沒付續約費
這就是很典型的:
單次看似微不足道的 rounding error,在系統化重複利用下,會變成穩定套利。
為什麼這個測試方法很重要
這篇真正有價值的地方,不只是找到一個退款 bug,而是:
1. 把 AI 從「驗證者」變成「對手方」
一般測試容易只驗證:
- 功能正不正常
- 流程有沒有跑通
- 預期輸入能不能過
但真實世界的問題很多不是出在「正常使用」,而是出在:
- 使用者很精明
- 惡意但合法地用 API
- 把多個合理規則拼成不合理結果
這時候,讓 AI 扮演 adversary,比單純跑單元測試更接近現實。
2. AI 很適合做耐心型漏洞搜索
人類測試者往往不會天天準時做同一件小套利操作;AI 會。
它最可怕的地方不是聰明,而是:
- 不嫌麻煩
- 不覺得賺幾分錢無聊
- 可以長期穩定重複
這讓很多原本「理論上可被利用、但人懶得搞」的漏洞,變成實際可持續榨取的商業漏洞。
後半段的歷史案例:Patriot 飛彈事故
作者接了一個很強的類比:1991 年波斯灣戰爭期間,美軍 Patriot 飛彈系統因為時間換算中的誤差累積,最終導致攔截失敗。
關鍵點在於:
- 系統把時鐘乘以
1/10換算成秒 - 但
1/10在二進位中是無限小數 - 每次運算都會發生極微小截斷誤差
- 系統連續跑了約 100 小時未重開
- 誤差累積到 0.34 秒
- 以飛毛腿飛彈速度計算,攔截位置偏差超過 500 公尺
- 最終導致飛彈命中軍營,28 名美軍身亡
這個案例和前面的退款漏洞表面完全不同,但本質一樣:
小誤差本身不致命,長時間累積才致命。
兩個故事背後的共同原理
1. 微小誤差會被時間放大
無論是退款多幾分錢,還是時間偏差不到一秒,單次看都微不足道;一旦可累積、可重複、可自動化,後果就會被放大。
2. 系統的危險常出在「規則組合」
每一條規則本身看起來都合理:
- 比例退款合理
- 四捨五入合理
- 時間換算合理
但組合在一起,就可能產生意外。
3. 真正的風險不一定在 happy path
覆蓋率 100% 不代表安全,因為很多問題根本不在主流程,而在:
- 邊界條件
- 長時間運行
- 惡意但合法的使用方式
- 小數、時間、比例等累積誤差
對工程與交易系統的啟示
作者最後把問題拉回交易策略與回測,這其實很合理。
因為不管是:
- 電商訂閱 / 退款系統
- 金融交易策略
- 計費系統
- 風控系統
- 長時間運行的即時系統
都會碰到同一種問題:
你以為只是小數點問題,但它可能是整個商業模型或風險模型的破口。
所以真正該做的,不只是測功能,而是測:
- 長時間累積後會怎樣
- 有人刻意利用時會怎樣
- 在極端但合法的操作順序下會怎樣
- 小誤差會不會變成大偏差
結論
這篇最值得記下來的一句話不是「AI 幫我找到 bug」,而是:
別只讓 AI 幫你驗證系統,還要讓 AI 想辦法摧毀系統。
因為很多最真實、最昂貴的漏洞,不是來自駭客技巧多高,而是來自系統設計者低估了:
- 小數誤差
- 長時間累積
- 惡意但合法的操作路徑
一旦把 AI 變成你的 adversarial tester,它找到的,往往不是程式 bug,而是你整個商業邏輯最脆弱的地方。