[英]Fortify issue - Command Injection
我正在嘗試對我的Java應用程序進行hp強化安全掃描。 我有幾個問題,並且已經解決。 但是我找不到以下問題的解決方法。
命令注入
String hostname = execReadToString("hostname").split("\\\\.")[0]; public static String execReadToString(String execCommand) throws IOException { try (Scanner s = new Scanner(Runtime.getRuntime().exec(execCommand).getInputStream()).useDelimiter("\\\\A")) { return s.hasNext() ? s.next() : ""; }
execReadToString()方法調用exec()執行命令。 此調用可能允許攻擊者注入惡意命令。
所以我也嘗試過使用流程構建器。
private static void gethostname(String cmd1) throws IOException {
if(Pattern.matches("[A-Za-z]+", cmd1)) {
ProcessBuilder pb = new ProcessBuilder(cmd1);
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(
p.getInputStream()));
String readline;
while ((readline = reader.readLine()) != null) {
System.out.println(readline);
}
}
}
即使這樣也給我帶來了安全問題。start()調用可能允許攻擊者注入惡意命令。
什么是解決此問題的理想方法?
提前致謝
通常這是因為您正在使用用戶輸入來構成命令字符串,其中用戶可以注入惡意代碼來操縱最終正在運行的命令(即使您添加驗證,也將有辦法避免這種情況)。
在您的情況下,您似乎在對命令進行硬編碼,因此這應該不是問題,但是,請參見有關硬編碼命令調用的OWASP頁面(重點是我的):
與前面的示例不同,此示例中的命令是硬編碼的,因此攻擊者無法控制傳遞給system()的參數。 但是,由於該程序未指定make的絕對路徑,並且在調用該命令之前未清除任何環境變量,因此攻擊者可以修改其$ PATH變量以指向名為make的惡意二進制文件,並從命令行執行CGI腳本。外殼提示。 並且由於該程序已安裝為setuid root,因此攻擊者的make版本現在具有root特權。
在程序中執行系統命令時,環境扮演着重要角色。 諸如system()和exec()之類的函數使用了調用它們的程序的環境,因此攻擊者有潛在的機會來影響這些調用的行為 。
解析度:
hostname
(假設您使用內置命令),它通常是/usr/bin/hostname
但是您可以使用which hostname
查找環境的命令路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.