從 ModelCompare 到 PHP2Shell:發現、證明與修補的單位不同

十月中下旬,四份文件可以放在一起讀。ModelCompare 10 月 22 日問 12 個文字模型對人類最有爭議的看法,35 份有效回答裡 29 份歸成同一類;前一天 PHP Foundation 發布兩個核心 RCE 的修補並承認延遲是結構性失敗,Node.js 同天修了 Brotli 解碼器的越界寫入;再往前一週,Linux kernel 的 CVE-2026-99999 公開。這幾件事很容易串成一個故事,模型看穿人類,再替人類找漏洞。這篇要做的比較無聊:分清說法一致、發現問題、證明問題與完成修補各自能說明什麼。

一、輸出一致的上限

ModelCompare 向 12 個模型各問 3 次,提示詞要求給出最有爭議的看法,而且不保留,作者手動將每份回答的一句話主張分類,共同類別是人把歸屬、地位或自己的故事放在真相或原則之前,29/35 落入這一類。代表引文是 GPT-6.1 Sol 的「Humans are more loyal to belonging than to truth.」。

29 份同類不等於 29 個相同命題,從眾、地位競爭、自我形象、事後合理化是不同的心理機制,放進同一類是分類方式的選擇,也限制了這個數字能說明多少。提示詞要求爭議又不保留,可能較容易引出尖銳而熟悉的敘事,但這次沒有和其他提示詞比較。12 個模型也不能當成 12 個獨立證人,答案相近可能來自共享語料,也可能和訓練方法或評價偏好相近有關。作者結尾寫了「Both handed back the most familiar criticism in the room.」,並未把一致當真理。推論的界線也不能用「模型只是預測文字」一語帶過,命題仍可能成立,需要的是外部證據。

外部證據比這些說法複雜。Cohn 等人 2019 年在 Science 發表錢包實驗,在 40 國 355 個城市把 17,303 個錢包交給機構工作人員,沒放錢時 40% 的人聯絡失主,放入依購買力調整、相當於 13.45 美元的當地貨幣後升到 51%,40 國裡 38 國同方向。一般受訪者預測錢越多越少人聯絡失主,經濟學家的平均預測是沒錢和小額差不多、大額略低,兩組都沒料到會上升。研究者以問卷支持的解釋是,錢越多,不還越像偷,人不想把自己看成小偷,這和模型所說的自我敘事部分相容,只是在這個情境下,維護自我形象可能促使人誠實。Wood 與 Porter 2018 年以 5 個實驗找 backfire effect,涵蓋 10,100 多名受試者與 52 個議題,受測議題與意識形態群體都沒偵測到這個效應,約九成議題的平均回答準確度因更正而提高,更正自己陣營時反應較弱;作者也提醒,接受事實不等於記住或改變政策態度。錢包研究沒測歸屬和真相衝突時的選擇,反彈效應研究顯示事實信念多半仍會被更正,兩篇只能讓「人類普遍把歸屬放在真相前面」這類概括沒那麼確定,也不能反過來證明 Claude Opus 5.5 那句異見「Humans are far more decent than they believe they are…」是對的,善良同樣需要比較基準,這個模型也在受測名單裡。

順帶一個自我檢查的問題:相信大家都在自欺、只有自己看穿了,是否同樣提供一種舒服的身分認同?

二、跡象、回報與修補之間的時間差

PHP Foundation 把發現到修補的階段交代得很清楚。2024 年 Quarkslab 外部稽核後,Foundation 約聘的核心開發者修另一項問題時,看到 OOM 的初步跡象,當時「a potential exploit for the OOM problem was theorized, but no concrete vectors were found」。2026 年 8 月 11 日 Calif 回報同一根因,OpenAI 也「independently reported the same root cause」,原文沒寫日期,8 月 24 日 Wiz 回報另一條攻擊路徑,Foundation 說這些回報讓完整影響變得清楚,OOM 從 8 月 11 日起成為最高優先,10 月 21 日發布 8.5.12、8.4.27、8.3.36、8.2.35。

這條時間線很容易縮成「放著 RCE 兩年」,但 2024 年發現的是 OOM 問題,修法也討論過,只是沒找到具體的利用途徑,2026 年 8 月的回報才讓完整影響變得清楚。看到可疑狀態、重現記憶體破壞、證明特定條件下能執行程式碼,每一步增加的資訊不同,發現與證明之間沒有單一的分界。Foundation 自述,幾個修法可能破壞向後相容或帶來新的 DoS,也可能得改很多第三方 extension,共識式決策難做取捨,當時沒有已知 RCE 路徑,懂引擎的人又少又忙,因此停滯。原文稱「the delay was a structural failure, caused by both the security team’s decision process and its lack of resources.」。這份自述談的是技術取捨與資源,不足以支持任何「歸屬優先於真相」的心理歸因。

Alpha-Omega 今年用 Anthropic 的 Claude Mythos 掃過 PHP,團隊後來加入 OpenAI 的 Daybreak Red 驗證回報與 exploit,但「a person makes every call and works on every patch.」。外部回報者用了多少 AI,原文沒說,二手整理的說法也不一,可能指不同工作階段,不足以判斷。Node.js 的 CVE-2026-111497 致謝「OpenAI Codex Security - Khai Tran and Sylvie Mayer」回報,由 mcollina 與 aduh95 修補,頁面未交代 Codex Security 是工具、團隊或兩者,致謝只能確認列名的分工。

三、評分、紀錄與實驗室各答各的問題

Linux 的 CVE-2026-99999,Red Hat 給 8.8,CVSS 3.1,Privileges Required: Low;CVE 紀錄上的 9.3 則是 Privileges Required: None,差在對攻擊者前提的假設。Red Hat 的描述是「A local attacker or untrusted guest virtual machine can exploit this vulnerability by transmitting network packets containing malformed checksum metadata into the IPv4 networking subsystem.」,IPv4 堆疊沒驗證 checksum metadata,畸形的 checksum_start 讓 skb_checksum_help() 越界寫入,這不等於任何網際網路封包都能接管 Linux。Red Hat 10 月 20 日已發 RHEL 9 修補,發行版常 backport,不能只比上游版本號。利用紀錄上,Red Hat 頁面寫「Red Hat tracks this flaw as a KEV active-exploit case.」,The Hacker News 10 月 15 日說不在 CISA KEV 也未見利用,兩個說法的時間不同,我沒能在 CISA 的目錄確認,不能直接說誰錯。漏洞在 Vercel 8 月的 sandbox 挑戰中找到,Vercel 自己的說明是,正式 sandbox 上示範的是 host 記憶體隨 guest 送出的封包外洩,當機與以管理者權限執行程式碼則在研究者自己仿照 Vercel 設定的 KVM 與 Firecracker 機器上示範,沒有任何回報顯示有人存取到客戶資料。成功範圍需要交代,沒打正式環境也不等於沒證明。修補作者 Michael S. Tsirkin 在 commit 裡寫這是「a defence in depth measure」,「A more complete validation at input is forthcoming, but needs more work.」,這不表示現有修補無效。

PHP2Shell 方面,AWS 說 MadPot 蜜罐 10 月 17 日就有利用嘗試,且「PHP2Shell is now seeing broad exploitation attempts in the wild.」,同一篇也說「it’s unclear if any of these attempts would have succeeded in real-world systems」,Rapid7 說自己未觀察到在野利用、公開 PoC 不太可靠,PHP 團隊檢查外洩後出現的 PoC,「did not identify any functional exploits at the time of release/public disclosure」。10 月 17 日的嘗試早於外洩,不能歸因於外洩。漏洞存在、可利用、公開 PoC、研究環境成功、已遭實際攻擊,這五件事各有各的證據,本文所列來源都未確認研究示範以外的成功入侵或資料外洩。CVSS 同時評估利用條件與影響,KEV 收錄已知遭利用的漏洞,清單並不完整,實驗室 exploit 示範的是特定條件下的結果,這些資料不會自動排成越來越強的證據鏈。

四、衡量壓力轉移需要的資料

回頭看這四件事,回答的分類方式、漏洞成立的條件得分開確認,修補還要查明是否發布與部署。這幾個案例的來源提到 AI 時,都是在發現與驗證,AI 寫出有漏洞的程式碼是另一個問題,這些來源沒談。

常見說法是 AI 降低發現與寫報告的成本,壓力因此移到驗證、去重與修補。PHP Foundation 描述自己加人、加 AI 驗證,並改成可以多數決,這不足以證明成本下降或瓶頸轉移,本文查到的資料也未量化這些變化,只能說既有維護能力要承接更多回報。curl 先被 AI 產生的低品質回報淹沒,後來又合併了約 50 個 AI 協助找到的修正(見〈AI code review 的帳怎麼算:找到的 bug、誤報和人的時間〉),負擔與收穫可以出現在同一個專案。要檢驗這個主張,至少需要回報量、重複率、驗證時間、從回報到發布的時間,比較導入 AI 前後的同類回報,並交代人力與流程變動。CVE 數量上升本身也不能直接當成品質惡化,檢查密度與揭露方式改變都會推高它。

我的推論是,一般團隊更值得先確認的,是一個失敗的測試、一條 review 裡的反對意見,或一份只重現到記憶體破壞的回報,在自己的流程裡要累積到多少證據才會改變排程。PHP Foundation 改的是停滯時怎麼做決定,這和證據門檻相關,但不是同一件事。

補充筆記

  • ModelCompare 的 29/35 是手動分類加上特定提示詞的結果,能說明輸出一致,不能說明 12 個獨立證人同意同一個命題。
  • 錢包實驗與反彈效應研究只能讓「人類普遍把歸屬放在真相前面」這類概括沒那麼確定,不能反過來證明人類善良。
  • PHP Foundation 的時間線裡,2024 年已發現 OOM 問題但沒有具體利用途徑,2026 年 8 月的回報讓完整影響清楚,停滯是取捨機制與人力的問題。
  • CVE-2026-99999 的評分差在攻擊者前提,KEV 的兩種說法時間不同、還沒核對,正式環境只示範了記憶體外洩,這三件事各自回答不同問題。
  • PHP2Shell 在蜜罐上有大量利用嘗試,所列來源都未確認研究示範以外的成功入侵。
  • AI 在這些案例裡出現在發現與驗證,修補仍由人決定、由組織交付;壓力是否移到驗證與修補,要有回報量與處理時間的資料才能回答。

延伸閱讀

想法與技術判斷出自 Sheng,和 Claude 一起起草 · 公開資料查閱至 2026 年 10 月 23 日。