Это использование java / lang / Runtime.exec ([Ljava / lang / String;) Ljava / lang / Process;может быть уязвимым для инъекции команд - PullRequest
1 голос
/ 03 октября 2019

как исправить следующий код в сонарной перспективе. выдает следующую ошибку

This usage of java/lang/Runtime.exec([Ljava/lang/String;)Ljava/lang/Process; can be vulnerable to Command Injection

Ниже приведен код

String commandArr[] = new String[] {"curl", "-v", "-X", "put", "--user", drUserName + ":" + drPwd, "-H", "Content-Type:text/plain",
            "-H","X-ATT-DR-META:"+metaData, "--data", response.toString(), "--post301", "--location-trusted", feedFile};

    String command = Arrays.toString(commandArr);
    int returnCode = -1;
    try {
        returnCode = obj.executeCommand(commandArr);
    } catch{...}

Имеет проблему в следующем коде

private int executeCommand(String[] command) {  
    int returnCode = -1;
    final String Msg = "HTTP/1.1 204 No Content";
    boolean isMsg= false; Process proc;
    try {
        proc = Runtime.getRuntime().exec(command); //sonar issue
        returnCode = proc.waitFor();
        BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
        String line = "";
        while ((line = reader.readLine()) != null) {
            if (!isMsg) {
                if (line.contains(Msg)) {
                    isMsg= true;
                }
            }
        }
    } catch (Exception e) {...} 
    .....
    .....
    return returnCode;
}

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 03 октября 2019

Согласно странице owasp.org о внедрении команд Java , использование Runtime.exec открывает ваше приложение для внедрения команд:

Уязвимости внедрения команд позволяют злоумышленнику внедрить произвольную системуКоманды в приложение. Команды выполняются с тем же уровнем привилегий, что и приложение Java, и предоставляют злоумышленнику функциональность, аналогичную системной оболочке.

В соответствии с OWASP рекомендуется применять метод инъекции команд Runtime.exec следующим образом:

Разработчики должны избегать вызова оболочки с помощью Runtime.exec для вызова специфичных для операционной системы команд и должны использовать вместо этого API-интерфейсы Java.

Так что в вашем случае вместо использованияRuntime.exec для выполнения cURL для выполнения операции PUT HTTP, вы можете рассмотреть возможность использования библиотеки Java для выполнения той же операции. Например, что-то из ответов на вопрос REST-клиенты для Java должно сработать.

...