本卡屬 FR-195(Agent 資安修正),第 4 批 G1。首腦實質驗收 F7(CM-3830)時實測發現的副作用,從那張卡拆出來補。依賴:CM-3830 已合進工作坊 branch(61c9118)。

這張卡做什麼(白話)

F7(CM-3830)為了擋「一個特製的小壓縮包吃光記憶體」,在解壓前加了一道總量上限:解壓後的總位元組數不能超過「允許的內容大小 + 檔數上限 × 每個檔 1 KB 的餘裕」。那 1 KB 是給 tar 格式本身的開銷用的(每個檔一個標頭加補齊)。

問題是 1 KB 只夠短檔名。路徑超過約 155 個字的檔,tar 會多放兩個區塊來存長檔名,每個檔實際多佔 2 KB 以上;路徑越長越多。原始碼包裡這種深層路徑很常見(例如 node_modules 底下)。結果是:一個完全合法、內容也沒超過上限的壓縮包,只要長路徑的檔夠多、總量又貼近上限,就會被誤判成超量而拒絕。

這張卡把每個檔的餘裕調到 8 KB,涵蓋到 Linux 路徑長度上限(4,096 字)。防護不會變弱:原本要擋的攻擊是一個標頭宣告幾百 MB,8 KB 乘以檔數上限仍然遠小於那個量級。

問題在哪(首腦在工作坊 branch 6cf52eb 開檔核過並實測)

改哪些檔

guidant_agent/shared/archive_safety.py
test/test_fr177_resource_limits.py

怎麼做

行為變更

原本會被誤擋的長路徑壓縮包可以正常解壓。對惡意壓縮包的防護不變:test_tar_huge_pax_header_rejected_fast(宣告 512 MB 的擴充標頭)必須仍然被擋。

要補的測試