SV.PASSWD.PLAIN.HC

資格情報の保護が不十分

この指摘は、製品が認証資格情報を送信または保存する中で、無許可の傍受や取得につながる可能性のある安全でない方法が使用されている場合に発生します。

脆弱性とリスク

攻撃者がユーザーアカウントにアクセスし、ユーザーアカウントで使用されている機密データにアクセスする可能性があります。

脆弱コード例

コピー
   Properties prop = new Properties();
   prop.load(new FileInputStream("config.properties"));
   String password = prop.getProperty("password"); //Defect
   DriverManager.getConnection(url, usr, password);

上記のコードはプロパティファイルからパスワードを読み取り、そのパスワードを使用してデータベースに接続するため、Klocwork は 3 行目で SV.PASSWD.PLAIN.HC 欠陥を報告します。このコードは正常に実行されますが、config.properties ファイルへのアクセス権限を持つ人は誰でもパスワードの値を読み取ることができます。たとえば、ある従業員にこの情報へのアクセス権限がある場合、その従業員はその権限を利用してシステムに侵入できます。

修正コード例

コピー
    /*
     * First, create (or ask some other component for) the adequate encryptor for
     * decrypting the values in the .properties file.
     */
    StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
    encryptor.setPassword("jasypt"); // could be obtained from the web, env variable, etc
    encryptor.setAlgorithm("PBEWithHMACSHA512AndAES_256");
    encryptor.setIvGenerator(new RandomIvGenerator());
     
   /*
    * Create an EncryptableProperties object and load it the usual way.
    */
   Properties props = new EncryptableProperties(encryptor);
   props.load(new FileInputStream("/path/to/my/configuration.properties"));
   
   /*
    * To get an encrypted value, do exactly the same.Decryption will
    * be transparently performed behind the scenes.
    */
   String datasourcePassword = props.getProperty("datasource.password");

プロパティファイルには暗号化技術 (Jasypt 暗号化) が使用されるため、Klocwork はもはやプロパティファイルからパスワードを取得する際にに欠陥を報告しなくなります。