《缺陷周話》第6期:命令注入
程式碼審計是使用靜態分析發現原始碼中安全缺陷的方法,能夠輔助開發或測試人員在軟體上線前較為全面地瞭解其安全問題,防患於未然,因此一直以來都是學術界和產業界研究的熱點,並且已經成為安全開發生命週期 SDL 和 DevSecOps 等保障體系的重要技術手段。
360程式碼衛士團隊基於自主研發的國內首款原始碼安全檢測商用工具,以及十餘年漏洞技術研究的積累,推出“缺陷周話”系列欄目。每週針對 CWE、OWASP 等標準中的一類缺陷,結合例項和工具使用進行詳細介紹,旨在為廣大開發和安全人員提供程式碼審計的基礎性標準化教程。
一、命令注入
命令注入指應用程式所執行命令的內容或部分內容源於不可信賴的資料來源時,程式本身沒有對這些不可信賴的資料進行正確、合理的驗證和過濾,導致程式執行了惡意命令。在 JAVA 應用程式中,敏感函式的引數如 Runtime.getRuntime().exec(Stringcommand) 中的 command 引數,該引數可為 os 命令,如果該引數可由使用者控制,則極易造成命令注入。
本文以JAVA語言原始碼為例,分析命令注入產生的原因以及修復方法。詳見 CWE ID 77: Improper Neutralization of Special Elements used in a Command (‘Command Injection’)( ofollow,noindex" target="_blank">http://cwe.mitre.org/data/definitions/77.html )。
二、命令注入的危害
命令注入利用應用程式的輸入可以執行一些特殊的 os 命令,例如:使用 cpuinfo 命令檢視系統資訊,使用 shutdown命令關閉伺服器。從2018年1月至10月,CVE中共有 205 條漏洞資訊與其相關。部分漏洞如下:
CVE | 漏洞概述 |
---|---|
CVE-2018-0714 | QNAP QTS 是中國威聯通(QNAP Systems)公司的一套 Turbo NAS 作業系統。該系統可提供檔案儲存、管理、備份,多媒體應用及安全監控等功能。Helpdesk 是其中的一個幫助臺程式。 QNAP QTS 中的 Helpdesk 1.1.21 及之前版本存在命令注入漏洞。遠端攻擊者可利用該漏洞在受影響的應用程式中執行任意命令。 |
CVE-2018-10900 | Network Manager VPNC plugin (networkmanager-vpnc) 是一款支援連線 Cisco VPN 的虛擬網路管理器。Network Manager VPNC 外掛 1.2.6 之前版本中存在安全漏洞,該漏洞源於換行字元可以被用來將 Password helper 引數注入到配置資料中並傳入到 VPNC。攻擊者可利用該漏洞以 root 許可權執行命令。 |
CVE-2018-1000189 | CloudBees Jenkins 是由美國公司 CloudBees 開發的一套基於Java 開發的持續整合工具,主要用於監控持續的軟體版本釋出/測試專案以及一些定時執行的任務。Absint Astree Plugin 是其中一個靜態程式分析外掛。CloudBees Jenkins Absint Astree Plugin 1.0.5 及之前版本中的 AstreeBuilder.java 檔案存在命令執行漏洞。遠端攻擊者可利用該漏洞執行命令。 |
CVE-2018-1335 | 從 Apache Tika 版本 1.7 到 1.17,客戶端可以將精心設計的標頭檔案傳送到 tika-server,該標頭檔案可用於將命令注入執行 tika-server 的伺服器的命令列。此漏洞僅影響在對不受信任的客戶端開放的伺服器上執行 tika-server 的漏洞。 |
三、示例程式碼
示例源於 Samate Juliet Test Suite for Java v1.3 ( https://samate.nist.gov/SARD/testsuite.php ),原始檔名:CWE78OSCommandInjectionProperty01.java。
3.1 缺陷程式碼
上述示例程式碼在第30行使用 getProperty() 函式獲取了使用者的賬戶名稱,在第43行將獲取的賬戶名稱和變數 osCommand 進行拼接,直接執行了拼接的結果。攻擊者可在使用者的賬戶名稱中存入特殊的 os 命令進行操作,例如刪除檔案,關閉主機等命令,從而造成命令注入。
使用360程式碼衛士對上述示例程式碼進行檢測,可以檢出“命令注入”缺陷,顯示等級為高。如圖1所示:
圖1 命令注入檢測示例
3.2 修復程式碼
使用360程式碼衛士對修復後的程式碼進行檢測,可以看到已不存在“命令注入”缺陷。如圖2: