SonarQube のダッシュボードには Security という欄があります。
その中には Vulnerabilities (脆弱性) と Security Hotspots (セキュリティ・ホットスポット) という2項目があります。 これを見ていて、ふと「それって何が違うの?」という疑問がわいたので調べてみました。
Vulnerabilities と Security Hotspots の違い
以下のページに説明がありました。
一言でいうと「Vulnerabilities は有無を言わさずに修正対象」で「Security Hotspots は場合によっては対応が必要」という違いのようです。
表にまとめるとこんな感じになります。
タイプ | 内容 | 例 | 検出時の対応 |
---|---|---|---|
Vulnerabilities | 明らかにセキュリティに問題があるもの | SQLインジェクション | すぐに修正 |
Security Hotspots | 状況によってはセキュリティ上の問題となるもの | Cookieに HttpOnly フラグを設定していない | 修正要否は要判断 |
具体的な定義内容
具体的に SonarQube が何を Vulnerability とし、何を Security Hotspot と定義しているかについては、https://rules.sonarsource.com/ で確認できます。
例えば Java の場合、Vulnerability は https://rules.sonarsource.com/java/type/Vulnerability 、 Security Hotspot は https://rules.sonarsource.com/java/type/Security%20Hotspot で確認できます。
Security Hotspot の具体例
例えば「ハードコードされた資格情報 (Hard-coded credentials are security-sensitive) 」は Security Hotspot として定義されています。
例として挙げられているのは以下のようなコードです。
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost/test?" +
"user=steve&password=blue");
ぱっと見は「これ Security Hotspot じゃなくて Vulnerability でしょ?」という気もするのですが、Security Hotspot なんですね…
このケースでは以下の質問に対して一つでも「Yes」があるとセキュリティリスクがあると説明しています。
- データベース、ファイルストレージ、API、サービスなどの機密性の高いコンポーネントにアクセスできる資格情報か?
- 本番環境で使用される資格情報か?
- 資格情報の更新前にアプリケーションの再配布が必要か?
なるほどおっしゃる通り。 漏れても問題のないような、本番環境では絶対に正常動作しないようなパスワードに関してはOKってことですかね。
まとめ
この定義、ひとつひとつ確認するのもなかなか面白そうですね。