コード自体を対象とする保護機能が2つあります:コードスキャンはすべての変更内容およびデフォルトブランチに対して固定されたルールを適用します。プルリクエストのセキュリティレビューは、Coroidレビューが検出したセキュリティ問題がpull requestの失敗要因となる前にそれらをチェックします。
コードスキャン
Coroidのルール
セキュリティ部門がこれらのルールを管理しています。これらは以前は品質管理のアンチスロップ機能の一部でしたが、現在はここに移されており、各ルールには専用のカテゴリがあります:
| ルール | 検出対象 |
|---|---|
security.hardcoded-secret | コード内に記載された認証情報。詳細は漏洩したシークレット。 |
security.tls-disabled | TLS証明書の検証が無効化されている。 |
security.auth-removed | 認証または権限制御用のデコレーターやミドルウェアが削除またはコメントアウトされている。 |
security.cors-wildcard-credentials | 認証情報と共に任意のオリジンが許可されている。 |
security.sql-concat | インターポレートされた文字列から生成されたSQLがクエリ関数に渡される。 |
security.eval | 入力値から実行されるコード:eval、new Function、未サニタイズのdangerouslySetInnerHTML。 |
security.remote-script-exec | ダウンロードしたスクリプトが直接シェルやインタプリタで実行される。 |
security.policy-changed | スキャナーの設定変更。詳細は保護機能と強制適用。 |
deps.nonexistent | レジストリに存在しない新規依存関係。 |
deps.known-malicious | 悪意のあるパッケージに関する警告がある新規依存関係。 |
deps.suspicious-new | 公開されてから30日未満でダウンロード数が極めて少なく、人気のあるパッケージと1~2文字しか違わない名前を持つ、またはメンテナが最近変更された新規依存関係。 |
deps.install-script | インストール時にスクリプトを実行する新規のnpm依存関係。 |
依存関係の衛生状態に関するルール、バージョンの固定なし、マニフェストとロックファイルの不一致は品質管理のアンチスロップ機能に残ります。詳細はアンチスロップ。
これらのルールは変更内容に対して適用され、品質管理のアンチスロップチェックと同じスキャンで実行され、各プッシュ時および1日1回デフォルトブランチでも実行されます。アンチスロップ機能が有効かどうかに関係なく、各ルールの動作を決定するのはセキュリティ部門ではなくアンチスロップの設定です。セキュリティ→設定→コードスキャンでこれらのルールを確認できます。コードスキャンが強制適用を開始するまで、各ルールは品質管理時と同じアクションを維持するため、ブロックを設定していたルールは引き続きブロックを引き起こします。
独自のスキャンコマンド
プロジェクトに既にセキュリティスキャナーが導入されている場合、そのコマンドを独自のスキャンコマンドのコードスキャン項目に入力してください。これにより、プロジェクトのsecurity_scanチェックとして各変更内容に対して実行されます。無効にするには空欄のままにしてください。
SonarQube、Snyk、Semgrepなどの外部ツールの結果もレビュー証拠としてCoroidに送信できます。詳細はレビュー証拠プロバイダー。
プルリクエストのセキュリティレビュー
Coroidレビューは品質管理内でプルリクエストをレビューします。セキュリティ問題を検出すると、それを文章形式でレビューに記載するのではなく、脆弱性の種類、該当ファイルと行番号、深刻度といった構造化された情報として報告します。セキュリティ部門は各情報を「未確認」として記録します。未確認。
独立したチェック
重大または高リスクの情報については、Coroidが独立したチェックを実行します。これは別途限定されたモデルで、情報が指し示すファイルをpull requestの最新コミット時点で確認し、問題を再検出しようとします。検出できれば、その情報は検証済みの静的検出結果となります。問題を判定するコードが別のファイルにある場合、チェックでは確認できず、情報は未確認のままです。
このチェックは他のモデル処理と同様に組織のクレジットを消費し、pull requestごとに定められた上限内で実行されます。クレジットや時間が使い切られると実行されず、レビューには「セキュリティ問題の有無を確認できませんでした:組織のクレジットまたは時間が使い切られています」と記載されます。
レビューが失敗する条件
| 留意事項 | 強制適用 | |
|---|---|---|
| 閾値以上(デフォルトでは高リスク)の確認済み情報。 | 中立、「検出結果が確認済み」 | Coroidレビューのチェックが失敗し、「検出結果が確認済み」となる。 |
| 未確認の情報。 | 決して失敗しない | 決して失敗しない |
強制適用され、確認済みの重大または高リスクの情報は、品質管理でレビューを勧告モードに設定していてもCoroidレビューで失敗します。これは勧告モードのレビューが決して失敗しないという原則の唯一の例外です。未確認のセキュリティ情報が原因で変更を求めるレビューは勧告モードとみなされます。
セキュリティレビューを利用するには、プロジェクトでCoroidレビューが有効である必要があります。Coroidレビューが無効な場合、セキュリティ→設定の該当行にその旨が記載されます。
GitHubに送信される情報
いかなるレビュー文、コメント、チェックがGitHubに到達する前に、まずは公開ゲートを通過します。パブリックなリポジトリ、またはその可視性をCoroidが確認できないリポジトリの場合、非公開のセキュリティ問題は「Coroidが潜在的なセキュリティ問題を検出しました。詳細はCoroidをご覧ください」という記述に置き換えられ、リンクが付与されます。参照してください。情報開示。