簡體   English   中英

強化問題-命令注入

[英]Fortify issue - Command Injection

我正在嘗試對我的Java應用程序進行hp強化安全掃描。 我有幾個問題,並且已經解決。 但是我找不到以下問題的解決方法。

  1. 命令注入

     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()之類的函數使用了調用它們的程序的環境,因此攻擊者有潛在的機會來影響這些調用的行為

解析度:

  1. 使用本機Java API /庫來實現所需的功能,而不是運行命令-這可能是最佳選擇。 僅在不可避免的情況下使用命令,例如:沒有Java客戶端庫的第三方工具。 這種方法的另一個優點是更便攜,在大多數情況下也更高效。 庫可能會幫助您解決問題。
  2. 如果必須運行命令,請確保甚至不間接使用用戶提供的數據或外部數據來構造它。
  3. 或者,如果您要硬編碼要從代碼運行的命令,請使用命令的絕對路徑,並且不要將環境變量用作命令的一部分。 對於hostname (假設您使用內置命令),它通常是/usr/bin/hostname但是您可以使用which hostname查找環境的命令路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM