2017-06-06 41 views
1

コードからMicrosoft Rdpアプリケーションを実行しようとしています。Javaのコマンドインジェクションの脆弱性

私は、次の擬似コードとSonarQubeCommand Injection Vulnerability

String rdpFilePath = myObject.getRdpFilePath() // get path of .rdp settings file 
ProcessBuilder processBuilder = new ProcessBuilder(); 
processBuilder.command("mstsc", rdpFilePath).start(); 

SonarQube問題の説明は、次のされて文句を言うている:

-Potential Command Injection- 
The highlighted API is used to execute a system command. 
If unfiltered input is passed to this API, it can lead to arbitrary command execution. 

どのように私の入力をフィルタリングすることができ、どのように私は、このセキュリティ問題を修正することができますか?

答えて

1

サンプルはかなり安全です。 mstscを実行する前にここに追加しておかなければならないことは、rdpFilePathというファイルが存在することを確認していることです。

フィルタリングされていないユーザー入力をcommandメソッドの1番目の引数として使用すると、セキュリティ上の問題が発生します(実行するプログラムでもコマンドを実行できる場合は、次の引数も脆弱になることがあります)。このような場合、ユーザはシステム上で任意のコマンドを実行することができます。

+0

こんにちは、rdpFilePathの存在チェックと可読性チェックを追加しました。しかし、この場合でも、SonarQubeはコマンド注入の脆弱性について警告しています。私が探しているのは、この問題に対する最も安全な解決策です。 –

+0

これらのチェックではセキュリティ上の問題はありません。しかし、SonarQubeはフィルタリングコードを理解することができず、潜在的なセキュリティリスクについて引き続き警告します。コードブロックに対して特定の警告を無効にすることができます。この[回答](https://stackoverflow.com/questions/10971968/turning-sonar-off-for-certain-code)を確認してください。 – berserkk