SV.SQL.DBSOURCE
このエラーは、データベースクエリの結果が未チェックで別のデータベースクエリの作成に使用されており、SQL インジェクション攻撃の危険がある状況を検出します。
脆弱性とリスク
SQL インジェクションは、データベースのデータを危険な状態にします。未検証のユーザー入力が SQL 文で使用されているため、攻撃者は実行しようとする任意の SQL 文を挿入できるようになります。これには、データの削除、更新、作成などが含まれます。また、この種の脆弱性があるデータベースから機密データが取得される可能性もあります。この脆弱性は、SV.DATA.DB の脆弱性とともに攻撃されることがあります。
Klocwork セキュリティ脆弱性 (SV) チェッカーは、潜在的に危険なデータを生成する呼び出しを特定します。このような呼び出しは安全でないソースと考えられます。ユーザーは攻撃者になる可能性があり、ヒューマンエラーを取り込む可能性があるため、安全でないソースはユーザーが指定した任意のデータである可能性があります。
軽減と防止
詳細については、knowledge base (ナレッジベース) のパラメーターを参照してください。
例 1
public ResultSet getAllPeopleWithSameLastName(ServletRequest req, Connection con, int userId) throws SQLException {
Statement statement = con.createStatement();
ResultSet results = statement.executeQuery("SELECT lastName FROM user_data WHERE userid=" + userId);
String lastName = results.getString("lastName");
String query = "SELECT * FROM user_data WHERE lastName = '" + lastName + "'";
return statement.executeQuery(query);
}
SV.SQL.DBSOURCE が 16 行目に対して報告されています。'lastName' にはデータベースから取得されたデータ (14 行目) が含まれ、この値は 15 行目で定数文字列と連結され、'query' に保存されます。'query' は、16 行目で SQL 文として実行されます。すなわち、データベースから取得された情報が未チェックのまま、同一または別のデータベース上の SQL 文で実行されることになります。これは、データベースデータインジェクション ( SV.DATA.DB ) が可能な場合、任意の SQL 文のインジェクションに利用される可能性があります。
関連チェッカー
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。
拡張機能
このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、Java 解析のチューニングを参照してください。