「CVSS 10.0 的 RCE」——這是漏洞新聞裡最讓人神經緊繃的一句話。本站從零開始解說:為什麼 RCE 是「最糟一類」,它和其他漏洞究竟有何不同。
它和其他漏洞究竟有何不同
許多漏洞的被害是有限的。RCE 因為「在伺服器本體上執行命令」,量級完全不同。下面拿三個有代表性的漏洞來比較。
| 漏洞 | 程式碼執行的地方 | 主要被害 | 一般嚴重度 |
|---|---|---|---|
| XSS | 使用者的瀏覽器 | 竊取工作階段、竄改畫面 | 中~高 |
| SQLi | 資料庫 | 讀出、竄改資料 | 高 |
| RCE | 伺服器本體 | 接管、橫向擴散、全部 | 最糟(可達 10.0 級) |
為什麼是最糟一類
攻擊者能在伺服器上執行命令,就意味著那個程序能做的一切,攻擊者都能做。
RCE 成立(任意程式碼執行)
.env 竊取金鑰被害範圍由「那個程序的權限」決定。正因如此,**容器化、最小權限、隔離(把爆炸半徑降到最小)**才有效。若以 root 執行就會全盤淪陷,若以非特權使用者+隔離執行就能把被害關在小範圍內。
多數並非「自己的 bug」,而是來自「已知的洞」
RCE 不僅來自自己寫出的 bug,更多時候是來自所用框架或函式庫的已知漏洞。歷史上的重大事故,也大多是 RCE。
- Log4Shell(CVE-2021-44228):經由日誌元件的 RCE,曾讓全世界震動。
- Equifax(CVE-2017-5638):未修補的 Struts RCE,波及 1.47 億人。
- 放任 CVSS 10.0 而被踩的故事:把已公開的 RCE 放任了數月。
使用者能做的防禦
不要放任已公開的 CVE(最大的防禦)
用機器監控 CVE(Dependabot / osv-scanner),並迅速更新到修復版本。RCE 大半都源於「放任已知的洞不管」。
按實際執行版本來判定
不要看清單裡的下限標註,而要按實際正在執行的版本來衡量危險。相信標註會讓你誤判危險度。
把爆炸半徑降到最小
以非特權使用者執行,隔離容器與網路。萬一被踩,也能把被害關在小範圍內。
不要把輸入直接交給執行系統
不要讓外部輸入直通到 shell 命令、deserialization 或範本求值。這是不自己製造出 RCE 的基本功。
接下來閱讀
FAQ
QRCE 和常見漏洞(如 XSS)有什麼不同?
XSS 等主要在「使用者的瀏覽器內」作惡,而 RCE 能在「伺服器本體」上執行任意程式。它會波及伺服器的權限、資料和其他服務,因此一般來說最為嚴重。
QRCE 的被害能擴散到多大範圍?
擴散範圍取決於「被攻擊時正在執行的那個程序的權限」。如果以 root 或較大權限執行,被害將極其慘重;若以非特權使用者+容器隔離執行,就能把被害關在小範圍內。所以最小權限和隔離才有效。
Q使用者(開發者)這一側該如何防禦 RCE?
除了不讓自己寫出 RCE 漏洞(例如不把輸入直接交給執行系統)之外,最大的防禦是「不要放任所用框架/函式庫已公開的 RCE 不管」。CVE 監控和迅速更新是關鍵。