SonarQube のダッシュボードには Security という欄があります。

SonarQubeのセキュリティ欄

その中には 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ってことですかね。

まとめ

この定義、ひとつひとつ確認するのもなかなか面白そうですね。

かわかみしんいち。島根県津和野町在住のフリーランスエンジニア。複合現実(Mixed Reality)と3DUXでおもちゃを作るのが趣味。 https://github.com/ototadana