Skip to main content
網路安全

什麼是 OS 命令注入?利用、影響與防禦

OS 命令注入(CWE-78)可讓攻擊者透過未經淨化的輸入執行任意命令。了解利用技術、真實世界 CVE 與防禦措施。

作者 SentinelOne
什麼是 OS 命令注入?利用、影響與防禦

什麼是 OS 命令注入?

OS 命令注入是一種漏洞,允許攻擊者透過存在漏洞的應用程式,在伺服器上執行任意作業系統命令。MITRE 將其歸類為 CWE-78,當應用程式使用外部提供的輸入來建構 OS 命令,卻未正確中和可能改變預期命令的特殊字元時,就會發生此問題。其結果是可直接、未經授權地存取底層作業系統。

此類漏洞已與多起重大網路攻擊有關,從 2014 年 Shellshock 的大規模利用,到 CISA 公告中記錄的持續性網路設備攻擊皆是如此。CWE-78 名列 MITRE Top 25,與越界寫入、 跨網站指令碼,以及 SQL 注入。

在 OWASP Top 10 中,較廣泛的 Injection 類別同時對應 CWE-77 與 CWE-78。了解此漏洞如何在 shell 層級運作,是阻止它的第一步。

OS 命令注入如何運作?

OS 命令注入利用了一個根本性缺陷:應用程式將使用者可控制的輸入直接傳入 OS shell 命令,而未將資料與控制指令分離。

MITRE 識別出 OS 命令注入的兩種子類型。

子類型 1:直接型(命令分隔符注入)

應用程式原本打算執行單一固定程式,僅將外部輸入作為引數使用。攻擊者會注入命令分隔符(;, |, &&, ||, 或換行)以附加額外命令。

請考慮一個執行 DNS 查詢的 Web 應用程式:

攻擊者提供 example.com; cat /etc/passwd 作為網域參數。shell 會同時執行 nslookup example.com 與 cat /etc/passwd,並回傳伺服器的密碼檔案。

子類型 2:間接型(完整命令控制)

應用程式接受可完全決定要執行哪個程式的輸入。攻擊者控制的是完整命令,而不只是其引數:

如果攻擊者控制 SCRIPTNAME 屬性,他們就能將其指向系統上的任何可執行檔。

攻擊流程

典型的 OS 命令注入攻擊會遵循以下順序:

  1. 攻擊者識別出會流入伺服器端命令的輸入欄位,例如表單參數、HTTP 標頭、Cookie 或 URL 查詢字串。
  2. 攻擊者將 shell 中繼字元與惡意命令結合後注入該輸入中。
  3. 應用程式將未經淨化的輸入傳遞給 OS shell。
  4. shell 會解譯這些中繼字元,並以與應用程式程序相同的權限執行注入的命令。如果應用程式以 root 身分執行,攻擊者也會取得相同權限。

上述每個步驟都取決於 shell 將特定字元解譯為控制指令。使這種情況成為可能的運算子會因平台而異。

常見的注入運算子與中繼字元

OS 命令注入依賴會改變作業系統解譯命令字串方式的 shell 中繼字元。攻擊者可使用的運算子取決於目標平台。

命令分隔符與行內執行

運算子功能平台
;依序執行命令Unix
&在背景執行第二個命令Unix 與 Windows
&&僅在第一個命令成功時執行第二個命令Unix 與 Windows
||僅在第一個命令失敗時才執行第二個命令Unix 和 Windows
|將第一個命令的輸出透過管線傳遞給第二個命令Unix 和 Windows
` (反引號)內嵌執行;輸出會取代該運算式Unix
$()內嵌執行;功能上等同於反引號Unix
0x0a(換行)在某些 shell 中會開始新的命令Unix

當使用者輸入落在原始命令中的帶引號字串內時,攻擊者必須先關閉引號(" 或 '),分隔符才會生效。URL 編碼、雙重編碼與 Unicode 正規化等編碼技術,也可繞過僅檢查這些字元字面形式的過濾器。這些運算子之所以會到達 shell,是因為特定的程式設計模式未能將使用者資料與命令語法分離。

OS 命令注入的成因

OS 命令注入源自於允許使用者輸入在缺乏足夠控制的情況下到達系統 shell 的程式設計實務。五個根本原因造成了大多數漏洞。

輸入驗證不足

這是最直接的原因。根據 OWASP 指南,當應用程式將不安全的使用者提供資料(例如表單、Cookie 和 HTTP 標頭)在未經清理的情況下傳遞給系統 shell 時,就可能發生命令注入攻擊。當你相信使用者會提供預期值時,可能會完全略過驗證。

使用 Shell 執行而非語言原生 API

呼叫 system()、exec()、shell_exec() 或 os.system() 會以 OS shell 作為中介。每次呼叫 shell 都會建立一個注入面。該 OWASP 備忘單 識別出主要語言中的危險 API:

語言危險 API
JavaRuntime.exec()
C / C++system(), exec(), ShellExecute()
Pythonexec(), eval(), os.system(), os.popen(), subprocess.Popen(), subprocess.call()
PHPsystem(), shell_exec(), exec(), proc_open(), eval(), passthru()
Node.jschild_process.exec(), execSync(), spawn()

依賴拒絕清單過濾

你可能會嘗試封鎖特定危險字元,而不是定義允許的內容。這種方法被歸類為 CWE-184(不完整的拒絕清單),且一再失敗。OWASP 明確指出,PHP 的 escapeshellcmd() 可防止執行額外命令,但仍允許引數注入。攻擊者可注入類似 --output-document= 的旗標,以在不使用命令分隔符的情況下達成檔案寫入。

環境變數操控

當應用程式未為可執行檔指定絕對路徑,且未清理環境變數時,攻擊者可以重新導向 $PATH 以指向惡意二進位檔。如果應用程式以 setuid root 權限執行,攻擊者的二進位檔將以 root 存取權限執行。

違反最小權限原則

以提升的系統權限執行的應用程式會放大每一個注入缺陷。一個 命令注入 若是針對以 www-data 執行的應用程式,會將攻擊者限制在該使用者的權限內。若對 root 層級程序進行相同的注入,則會授予完整的系統控制權。當這些成因中的任何一項未獲處理時,造成的影響將遠遠超出易受攻擊的應用程式本身。

OS 命令注入的影響與風險

OS 命令注入在弱點分類系統中一向名列前茅。The OWASP Top 10:2021 將注入識別為一個重大且持續存在的風險類別。其功能性影響很直接:攻擊者獲得在您的伺服器上以遭入侵應用程式程序相同權限執行任意命令的能力。

依影響類別區分的嚴重性

影響證據
遠端程式碼執行CVE-2024-3400
完整系統遭入侵SANS report: "完整系統遭入侵、資料外洩或網路滲透"
橫向移動CISA advisory: OS 命令注入結合路徑遍歷,進而實現多階段入侵
殭屍網路招募Mirai variant
勒索軟體傳遞CISA advisory; CISA advisory

CVSS 評分無法說明全貌

CVE-2024-20399 (Cisco NX-OS) 的 CVSS 評分相對不高,且需要本機存取與管理員權限。然而,在確認遭到與中國有關聯的 Velvet Ant 活動利用後,CISA 仍將其加入已知遭利用弱點目錄。 

此案例說明,單靠 CVSS 評分無法反映作業風險。KEV 目錄成員資格、國家級行為者利用,以及裝置的網路位置,都是獨立的風險因素,而且其重要性可能遠遠超過基礎評分。了解攻擊者使用的具體技術,有助於解釋為何已確認的利用如此常見。

攻擊者如何利用 OS 命令注入

攻擊者會使用一系列技術來尋找、確認並利用 OS 命令注入,從探索開始,並逐步升級到盲注入與弱點鏈結利用。

探索與列舉

攻擊者會識別與伺服器端系統命令互動的輸入欄位,測試所有參數、HTTP 標頭(User-Agent、Referer)、Cookie、URL 查詢字串,以及結構化資料輸入(JSON、XML、SOAP)。

直接輸出注入

攻擊者會注入命令分隔符,後接已知會產生輸出的命令:

如果回應包含執行中程序的使用者名稱,即可確認注入成立,且攻擊者可繼續執行破壞性更高的命令。

透過時間延遲進行盲注入

當命令輸出未出現在 HTTP 回應中時,攻擊者會注入時間延遲命令並測量回應延遲。對 Linux 目標注入 & sleep 10 & 時,若命令已執行,便會產生可測量的延遲。

頻外(OAST)資料外洩

攻擊者會注入命令,以觸發對其控制基礎架構的 DNS 回呼:

當 DNS 查詢到達攻擊者的伺服器時,即可確認程式碼執行,即使沒有可觀察到的輸出或時間差異也是如此。 PortSwigger OAST 指出,Burp Collaborator 使得原本無法透過其他方式識別的盲式 OS 命令注入弱點得以被發現。

驗證繞過鏈結利用

CVE-2024-21887(Ivanti Connect Secure)需要已驗證的管理員存取權限,但攻擊者將其與 CVE-2023-46805(驗證繞過)搭配使用,從而完全消除此要求。根據 CISA 公告,中國國家支持的威脅行為者在 Ivanti、Cisco 及其他網路設備目標上,系統性地使用此類鏈結模式。

引數注入繞過

當防禦者過濾命令分隔符(;, |, &&)時,攻擊者會轉向 引數注入(CWE-88)。透過注入以 - 或 -- 為前綴的旗標或選項,他們可在不引入新命令的情況下,操控已被呼叫程式的行為。OWASP 記錄指出,PHP 的 escapeshellcmd() 即使在命令分隔符遭封鎖時,仍允許此攻擊路徑。這些技術的廣泛性意味著其影響不限於單一應用程式類型或產業。

哪些對象會受到 OS 命令注入影響?

OS 命令注入會影響任何將使用者輸入傳遞至 OS shell 的應用程式碼所在系統。根據已確認的利用資料,某些應用程式類型與產業承擔了不成比例的風險。

最脆弱的應用程式類型

  • 網路設備與 SSL-VPN 裝置: 此類別在 CISA KEV catalog中產生了最高密度的已確認遭利用 CWE-78 項目。CVE-2023-44221(SonicWall SMA100)、CVE-2024-8190(Ivanti Cloud Services Appliance)、CVE-2024-40891(Zyxel CPE)以及 CVE-2023-28771(Zyxel Firewall/VPN)皆涉及管理介面將輸入直接傳遞至 OS 層級的命令執行。
  • IoT 與嵌入式韌體: QNAP NAS 裝置(CVE-2023-47218)、TP-Link 路由器(CVE-2023-1389)以及 Wavlink 路由器皆存在已確認的 CWE-78 漏洞。 Mirai variant 系統性地將多個路由器與 IoT 韌體平台上的 OS 命令注入 CVE 武器化,用於招募殭屍網路。
  • 具有伺服器端系統呼叫的 Web 應用程式:  OWASP Top 10 的典型情境描述了一個 Java 應用程式透過字串串接,使用 Runtime.getRuntime().exec() 建構 OS 命令。
  • 企業管理介面: CISA advisory 記錄了利用鏈結式命令注入攻擊 Ivanti Cloud Service Application 管理介面的情況。

風險最高的產業

  • 關鍵基礎設施與電信: CISA 公告記錄了中國國家支持的威脅行為者利用網路設備中的命令注入,鎖定電信與路由器基礎設施。
  • 聯邦政府: CISA KEV 項目明確指出其「對聯邦企業構成重大風險」。聯邦機構面臨 KEV timelines,適用於 KEV 清單中的命令注入 CVE。

這些類別中的利用資料顯示,OS 命令注入如何從程式碼層級的缺陷轉化為組織規模的損害。

OS 命令注入的真實世界案例

已確認的 OS 命令注入事件,涵蓋從對開源軟體的大規模利用,到針對網路基礎設施的國家級定向攻擊。

Shellshock (CVE-2014-6271), 2014

GNU Bash 直到 4.3 版為止,會處理環境變數中函式定義後方的尾隨字串,允許 精心構造的值 注入 shell 命令。此漏洞可透過 CGI 指令碼、DHCP 用戶端及 SSH ForceCommand 組態加以利用,展現單一 OS 命令注入缺陷在網際網路規模上的攻擊面。

Equifax 資料外洩事件 (CVE-2017-5638), 2017

Apache Struts 2 允許攻擊者透過 Content-Type 標頭注入 OGNL 運算式,進而實現任意程式碼執行。根據 眾議院報告,Apache 於 2017 年 3 月 7 日釋出修補程式。三天後,也就是 3 月 10 日,攻擊者首次在 Equifax 的網路上利用了該漏洞。最終造成的資料外洩導致 7 億美元和解金以及高階主管辭職。

Log4Shell (CVE-2021-44228),2021

Apache Log4j2 的 JNDI 訊息查找功能可透過精心構造的日誌訊息實現未經驗證的遠端程式碼執行, CVSS 10.0。根據 CISA 公告,APT 行為者在未修補的 VMware Horizon 伺服器上利用了 Log4Shell,實現橫向移動並外洩敏感資料。 LockBit 附屬組織 以及 北韓組織 都利用了此漏洞。

Velvet Ant / CVE-2024-20399,2024

Sygnia 報告 描述了一個與中國有關聯的間諜組織利用 Cisco NX-OS CLI 命令注入漏洞。儘管其 CVSS 分數相對較低,該組織仍在 Nexus 交換器底層的 Linux OS 上執行惡意程式碼。CISA 將其加入 KEV 目錄,凸顯出營運風險往往超過 CVSS 所反映的程度。

Zyxel 防火牆利用 (CVE-2023-28771),2023

Zyxel 防火牆韌體中的錯誤訊息處理不當,允許未經驗證的遠端 OS 命令執行, CVSS 9.8。Cybersecurity Dive 報導了 主動鎖定攻擊,且在單日內出現,先前沒有任何活動。

這些事件是更廣泛模式的一部分,可追溯至 Web 應用程式最早期的年代。

OS 命令注入的時間軸與歷史

  1. 1988 至 1998:CGI 時代。早期 Web 伺服器會以未經清理的使用者輸入呼叫 shell 指令碼,形成最早的 OS 命令注入攻擊面。位於 MIT Lincoln Laboratory 的 DARPA Intrusion Detection Evaluation 資料集記錄了此時期基於 CGI 的攻擊與 sendmail 利用。
  2. 1999: 正式分類。CVE-1999-0067 記錄了最早期正式的命令注入條目之一:某 CGI 程式在呼叫電話簿程式時,未能中和管線 (|) 中繼字元。MITRE 的 CWE-78 將此漏洞類別加以編碼。
  3. 2014:Shellshock。CVE-2014-6271 成為第一個達到網際網路規模大規模利用的 OS 命令注入漏洞。
  4. 2017: 企業後果。透過 CVE-2017-5638 發生的 Equifax 資料外洩證明,嵌入於應用程式框架中的命令執行原語,在企業規模下會帶來等同於直接 OS 命令注入的後果。
  5. 2021: 注入類別整併。OWASP Top 10:2021 將所有注入類型整併至 A03 Injection 類別之下。 Log4Shell (CVE-2021-44228) 將此模式延伸至無所不在的記錄程式庫。
  6. 2023 至 2026: 網路設備鎖定攻擊。這個 攻擊面 已明確轉向網路邊界設備。根據 CISA 公告,中國國家支持的行為者在 2021 至 2025 年期間系統性地利用網路裝置中的命令注入漏洞。OWASP Top 10:2025 明確新增 CWE-88 (Argument Injection) 作為對應弱點。

在利用持續進行的情況下,於完整應用程式生命週期中及早識別仍是優先事項。

如何偵測 OS 命令注入

找出 OS 命令注入需要分層方法,結合部署前測試與執行階段可視性。

靜態應用程式安全測試 (SAST)

根據 OWASP Top 10,原始碼審查是找出注入漏洞的最佳方法。SAST 工具會標記對 system(), exec(), popen(), shell_exec(),以及其他在接收使用者可控制輸入時的危險 API。應標記的關鍵模式包括將字串串接後傳入 OS 命令執行函式,以及 PHP 使用 escapeshellcmd() 而非較安全的 escapeshellarg()。

您應該在 CI/CD 管線中執行 SAST,以便在部署前找出注入漏洞。其主要限制在於無法發現僅於執行階段才會顯現的弱點。

動態應用程式安全測試 (DAST)

DAST 透過測試執行中的應用程式,驗證哪些項目實際上可被利用。 Web Security Academy 記錄了三種 DAST 技術:

  1. 直接輸出注入:注入 & echo uniquestring & 並檢查該字串是否出現在回應中。
  2. 盲式時間型注入:注入 & sleep 10 & 並測量回應延遲。
  3. 帶外 (OAST) 注入:注入 DNS 回呼命令,並監控對受控伺服器的外部請求。這是盲式注入最可靠的技術。

程序層級的行為可視性

在主機層級, NIST SP 800-53(資訊系統監控)建立了行為異常識別的框架。您的 SOC 應尋找以下特定指標:

  • Web 伺服器程序 (apache, nginx, tomcat) 產生 Shell 程序 (bash, sh, cmd.exe, powershell)
  • 來自 Web 應用程式程序內容的非預期 execve() 或 system() 呼叫
  • 由應用程式程序發起、連往外部 IP 的對外網路連線

Web 應用程式防火牆 (WAF) 規則

OWASP ModSecurity Core Rule Set 會標記 Shell 中繼字元 (;, |, &, backticks, $()) 以及 HTTP 輸入中的常見 OS 命令 (whoami, cat /etc/passwd, nslookup)。 WAF 規則可透過編碼與大小寫變化繞過,因此您應將其視為一種訊號來源,而非完整控制措施。

方法比較

方法時機可偵測盲式注入主要限制
SAST部署前不適用(靜態)無法找出僅於執行階段出現的問題
DAST部署前/後是(透過 OAST)可能遺漏複雜流程
行為可視性正式環境是需要基準調校
WAF正式環境部分可被繞過,無法修正根本原因

僅找出漏洞是不夠的。預防需要在您的程式碼與架構中消除根本原因。

如何預防 OS 命令注入

預防的重點在於消除根本原因:以使用者可控制的輸入直接呼叫 OS shell。若無法移除 shell 呼叫,則可透過分層控制來降低攻擊面。

主要防禦:完全避免 OS 命令

根據 PortSwigger,最強的預防方式是永遠不要從應用程式層程式碼呼叫 OS 命令。在幾乎所有情況下,您都可以使用更安全的平台原生 API 來實作所需功能。如果您需要傳送電子郵件,請使用 SMTP 程式庫。如果您需要 DNS 解析,請使用 DNS 程式庫。消除 shell 這個中介層。

使用參數化命令 API

當無法避免執行 OS 命令時,請使用可強制區分資料與命令的結構化機制。在 Python 中,這表示使用 subprocess.run() 的清單形式:

以清單為基礎的形式可防止 shell 解譯任何引數中的中介字元。

透過允許清單進行輸入驗證

該 OWASP 備忘單 建議將基於允許清單的驗證作為第二層防禦。使用嚴格的正規表示式定義允許的字元與最大字串長度。OWASP 提供的範例為 ^[a-z0-9]{3,10}$, ,排除所有中介字元與空白字元。

PortSwigger 明確警告:絕不要嘗試透過逸出 shell 中介字元來淨化輸入。這種方法容易出錯,且容易被技術熟練的攻擊者繞過。允許清單永遠是較佳選擇。

套用最小權限原則(NIST AC-6)

NIST SP 800-53 要求採用最小權限原則。對於命令注入防禦:

  • 以專用、非特權的服務帳戶執行 Web 應用程式程序
  • 將服務帳戶權限限制為僅限必要的檔案系統路徑
  • 拒絕 Web 應用程式服務帳戶的 shell 存取 (/bin/sh, /bin/bash) to web application service accounts
  • 在 Linux 上套用 seccomp 設定檔,以限制可用的系統呼叫

實作沙箱與容器化

具備唯讀根檔案系統、Linux namespaces 與 cgroups,以及強制存取控制設定檔(AppArmor 或 SELinux)的容器隔離,都能在發生注入時降低影響範圍。這些控制措施符合 NIST CM-7 的最小功能原則。

PHP 特定控制措施

如果您使用 PHP 且必須呼叫 shell 命令,請使用 escapeshellarg() 而非 escapeshellcmd(),因為它會將輸入限制為單一參數,並防止引數注入。

這些程式設計與架構控制構成了基礎,但工具提供了在大規模環境中強制執行這些控制所需的可視性。

用於偵測與防止 OS 命令注入的工具

有效的防禦需要涵蓋應用程式安全測試、執行階段保護與端點可視性的工具。一份由 CISA 和 FBI 警示專門針對 OS 命令注入,特別建議使用可將命令與其引數分離的內建函式庫功能、輸入參數化,以及對所有使用者提供的輸入進行驗證。

應用程式安全測試工具

  • SAST 工具會掃描原始碼中接收使用者輸入的危險 API 呼叫。您可以將這些工具整合到 CI/CD 流程中,以便在部署前找出注入缺陷。
  • DAST 工具例如 Burp Suite,可測試執行中的應用程式是否存在可利用的注入點。Burp Suite 的 OAST 功能對於找出不會產生可見輸出的盲式命令注入特別有效。

執行階段與網路保護

  • WAF 解決方案使用 OWASP ModSecurity Core Rule Set,可在網路層過濾 shell 中繼字元與常見注入酬載。這些可作為縱深防禦的一層,但不應取代根本原因修復。
  • RASP 解決方案會在執行階段對應用程式進行插樁,並可在具備完整應用程式情境的情況下封鎖注入嘗試,作為難以修補之舊版應用程式的補償性控制。

端點與行為可視性

端點安全平台若能監看程序建立、父子程序關係與命令列引數,對於發現利用後活動至關重要。當 Web 伺服器程序產生非預期的 shell 時,核心層級的行為分析就成為您的最後一道防線。

Callout Background Image Gradient

Unleash AI-Powered Cybersecurity

Elevate your security posture with real-time detection, machine-speed response, and total visibility of your entire digital environment.

相關弱點

OS 命令注入屬於一類注入弱點家族,其共同根本原因是未能將使用者資料與可執行指令分離。數個相關的弱點類別可能會串連至或與 CWE-78 重疊。

  • SQL 注入 (CWE-89): 目標是 SQL 資料庫引擎,而非 OS shell。SQL 注入可透過資料庫功能(例如 xp_cmdshell)串連至 OS 命令注入。
  • 程式碼注入 (CWE-94): 目標是應用程式本身的語言執行階段(PHP eval()、Python exec())。程式碼注入允許攻擊者加入其自有程式碼,然後由應用程式執行;若注入的程式碼呼叫 system() 或 exec(),則可升級為 OS 命令注入。
  • 引數注入 (CWE-88): CWE-78 的子變體。攻擊者不是透過分隔符號注入新命令,而是使用旗標字元 (-, --) 操控已被呼叫程式的引數。即使已實施命令分隔符過濾,此攻擊仍可成功。
  • 伺服器端範本注入 (CWE-1336): 目標是範本引擎(Jinja2、FreeMarker)。SSTI 經常升級為 OS 命令注入,因為範本引擎通常可存取底層語言執行階段。
  • 運算式語言注入 (CWE-917): 目標是 Web 框架中的運算式語言剖析器(OGNL、Spring SpEL)。Log4Shell (CVE-2021-44228) 是最著名的範例,且經常串連至 OS 命令執行。
弱點CWE目標直譯器直接通往 OS 執行的路徑
OS 命令注入CWE-78OS shell直接
SQL 注入CWE-89SQL 引擎間接(透過 xp_cmdshell)
程式碼注入CWE-94應用程式執行階段間接(透過系統呼叫)
引數注入CWE-88OS shell 引數剖析器直接(操控被呼叫的命令)
SSTICWE-1336範本引擎經常升級為 OS 命令
EL InjectionCWE-917運算式語言剖析器經常升級為 OS 命令s

上表顯示,數種弱點類別會提供直接或間接通往 OS 層級執行的路徑,因此在所有注入類型上採取縱深防禦至關重要。

相關 CVE

CVE ID說明嚴重性受影響產品年份

CVE-2026-33718

git diff API 端點中的命令注入可繞過代理程式執行控制重大OpenHands AI Platform2026

CVE-2026-25857

透過 curl 參數在 WAN 診斷功能中發生的 OS 命令注入重大Tenda G300-F Router2026

CVE-2026-0631

VPN 模組中的 OS 命令注入;已驗證身分的相鄰攻擊者高TP-Link Archer BE2302026

CVE-2025-64127

ICS 通訊裝置中的未經驗證 OS 命令注入重大Zenitel Devices2025

CVE-2025-34041

EDR 管理平台中的未經驗證 OS 命令注入;已遭到主動利用重大Sangfor EDR2025

CVE-2025-11730

驗證後 DDNS CLI 組態中的命令注入高Zyxel ATP/USG FLEX Firewalls2025

CVE-2025-65791

透過傳遞至 image.php 中 exec() 的未淨化輸入進行命令注入重大ZoneMinder v1.36.342025

CVE-2025-54123

透過中介軟體 API 端點中的命令注入實現未經驗證的 RCE重大Hoverfly API Simulator2025

CVE-2024-20399

Nexus 交換器上的 CLI 命令注入;遭 Velvet Ant campaign 利用中Cisco NX-OS2024

CVE-2024-10443

Task Manager 元件中的未經驗證 OS 命令注入重大Synology BeePhotos/Photos2024

CVE-2024-29972

remote_help-cgi 端點中的未經驗證命令注入重大Zyxel NAS326/NAS5422024

CVE-2024-40890

透過 CGI 程式中的 HTTP POST 進行驗證後命令注入;CISA KEV高Zyxel VMG1312-B10A2024

CVE-2024-12828

可實現 root 層級程式碼執行的 CGI 請求命令注入CriticaWebmin2024

CVE-2023-20273

透過 Web UI 的 root 層級命令注入;已遭積極利用;CISA KEV重大Cisco IOS XE2023

CVE-2023-2868

透過惡意 .tar 檔案名稱進行命令注入;已遭積極利用;CISA KEV重大Barracuda ESG2023

CVE-2023-27992

透過 HTTP 請求進行預先驗證 OS 命令注入;CISA KEV重大Zyxel NAS326/540/5422023

CVE-2023-35138

show_zysync_server_contents 函式中的未驗證命令注入重大Zyxel NAS326/NAS5422023

CVE-2023-51385

透過使用者名稱或主機名稱中的 shell 中繼字元進行 OS 命令注入中等OpenBSD OpenSSH2023

CVE-2022-44877

登入介面中的未驗證 shell 中繼字元注入;CISA KEV重大Control Web Panel 72022

CVE-2022-2068

透過 c_rehash 指令碼中的惡意憑證檔案名稱進行命令注入重大OpenSSL2022

CVE-2021-4039

透過 Web 管理介面進行未驗證 OS 命令注入重大Zyxel NWA1100-NH2021

CVE-2020-8515

路由器韌體中的預先驗證命令注入;CISA KEV重大DrayTek Vigor Routers2020

CVE-2020-9054

透過 weblogin.cgi 進行預先驗證命令注入;root 權限提升;CISA KEV重大Zyxel NAS3262020

CVE-2020-10987

透過 goform/setUsbUnload 中的 deviceName 參數進行命令注入;CISA KEV重大Tenda AC15 Router2020

結論

OS 命令注入會讓攻擊者透過將不安全的輸入傳遞給 shell 解譯器的應用程式,直接取得 OS 層級的執行能力。您可以透過在可能情況下移除 OS 命令呼叫、在必要時使用參數化 API,以及強制執行允許清單驗證,來降低曝險。 

如果預防失敗,端點上的行為可視性可協助您快速發現 shell 產生、對外連線及其他遭利用的跡象。

常見問題

OS 命令注入(CWE-78)是一種漏洞,指應用程式使用未經清理的外部輸入來建構作業系統命令。攻擊者會注入 shell 中繼字元(;, |, &&)以附加惡意命令,而這些命令會由 OS shell 以應用程式的權限執行。 

根本原因是在將輸入傳遞給 shell 直譯器之前,未能將使用者資料與命令語法分離。

是。OS 命令注入在 OWASP Top 10:2021 和 OWASP Top 10:2025 中都被歸類於 Injection 類別之下。CWE-77 和 CWE-78 均被明確納入。 

2025 版也新增了 CWE-88(引數注入)作為對應的弱點。

可以。CISA KEV 目錄中大多數已確認遭利用的 CWE-78 漏洞都不需要驗證,且可被遠端利用。CVE-2014-6271 (Shellshock)、CVE-2023-28771 (Zyxel) 以及 CVE-2024-3400 都允許未經驗證的遠端利用。

網路設備,包括防火牆、VPN 集中器和企業交換器,產生了最高比例的已確認遭利用 CWE-78 項目。IoT 與嵌入式韌體,包括 NAS 裝置和路由器,會被系統性鎖定以進行 botnet 招募。 

會呼叫伺服器端系統命令的 Web 應用程式以及企業管理介面也具有較高風險。

攻擊者會透過注入 shell 中繼字元並接續診斷命令,來探測輸入欄位、HTTP 標頭、Cookie 和 URL 參數。對於盲注入,他們會使用時間延遲(sleep 10)或對攻擊者控制伺服器的 DNS 回呼。 

掃描器與模糊測試工具會系統性地測試所有輸入向量。

關鍵指標包括 Web 伺服器程序 (apache, nginx, tomcat) 產生非預期的 shell 程序 (bash, sh, cmd.exe)。其他跡象還包括應用程式程序對不熟悉 IP 的對外網路連線,以及在 Web 應用程式程序內容中出現異常的 execve() 或 system() 呼叫。

OS 命令注入屬於高嚴重性漏洞類別,因為它會讓攻擊者直接取得 OS 層級存取權,這表示他們可以執行主機作業系統支援的任何命令。 

CWE-78 在 MITRE 軟體弱點類別中名列前茅,而已確認的 CVE 通常具有 9.0 或更高的 CVSS 分數。

會。SANS 對 CVE-2024-40891 的報告明確描述了「完整系統遭入侵、data exfiltration,或網路滲透。」當遭入侵的應用程式以較高權限執行時,攻擊者將取得等同的 OS 層級存取權。 

已確認的後果包括 ransomware 部署、橫向移動,以及持久性後門安裝。

SAST 工具可可靠地在原始碼中標示危險的 API 呼叫,但會漏掉僅在執行階段出現的漏洞。DAST 工具可找出可利用的注入點,尤其是在對盲注入使用 OAST 技術時。 

WAF 規則可攔截已知模式,但可透過編碼繞過。程序層級的行為可視性可提供最可靠的執行階段識別。沒有任何單一工具能捕捉每一種變體,因此需要分層涵蓋。

關鍵基礎設施與電信業面臨最高的已確認風險。CISA 公告文件記錄了中國國家支持的利用活動,目標鎖定電信與路由器基礎設施。 

聯邦政府機關面臨強制性的 KEV 修補時程。任何使用對外暴露網路設備或嵌入式韌體的產業都可能成為目標。

深入了解 網路安全

Decorative background gradient

體驗最先進的資安平台

了解全球最智慧、最自主的資安平台如何在今日及未來保護您的組織。
Dark dashboard UI with purple-highlighted nav, summary cards showing 149, 7, 78, 56, 1.2 h, and a status table with linked purple text