Skip to main content

一時的なプライベート フォークで、リポジトリのセキュリティ脆弱性を解決するためにコラボレートする

パブリック リポジトリにおけるセキュリティ脆弱性の修正について非公開でコラボレートするため、一時的なプライベートフォークを作成できます。

: この記事は、パブリック リポジトリの所有者としてのリポジトリ レベルのアドバイザリの編集に適用されます。

リポジトリの所有者ではないユーザーは、github.com/advisories にある GitHub Advisory Database のグローバル セキュリティ アドバイザリに貢献できます。 グローバル アドバイザリを編集しても、リポジトリでのアドバイザリの表示方法が変更されたり、影響を受けたりすることはありません。 詳しくは、「GitHub Advisory Database でのセキュリティ アドバイザリの編集」を参照してください。

前提条件

一時的なプライベートフォークでコラボレートする前に、ドラフトのセキュリティアドバイザリを作成する必要があります。 詳しくは、「リポジトリ セキュリティ アドバイザリの作成」を参照してください。

一時的なプライベートフォークを作成する

セキュリティアドバイザリに対する管理者権限があるユーザなら誰でも、一時的なプライベートフォークを作成できます。

脆弱性についての情報を保護するため、CI を含むインテグレーションは、一時的なプライベートフォークにアクセスできません。

  1. GitHub で、リポジトリのメイン ページに移動します。

  2. リポジトリ名の下にある [ セキュリティ] をクリックします。 [セキュリティ] タブが表示されない場合は、 [] ドロップダウン メニューを選び、 [セキュリティ] をクリックします。

    タブを示すリポジトリ ヘッダーのスクリーンショット。 [セキュリティ] タブが濃いオレンジ色の枠線で強調表示されています。

  3. 左側のサイドバーの [レポート] で、 [ アドバイザリ] をクリックします。

  4. [セキュリティ アドバイザリ] の一覧で、一時的なプライベート フォークを作成するセキュリティ アドバイザリの名前をクリックします。

  5. アドバイザリ フォームの一番下までスクロールし、 [一時的なプライベート フォークを開始する] をクリックします。

    フォームの [プライベートのパッチで共同作業する] 領域のスクリーンショット。 [一時的なプライベート フォークを開始する] というラベルのボタンが、濃いオレンジ色で囲まれています。

    リポジトリのプライベート フォークが作成され、アドバイザリ ページに表示されます。

    プライベート フォークの名前付け規則は、GitHub Advisory Database のアドバイザリに使う規則によく似ており、repo-ghsa-xxxx-xxxx-xxxx という形式に従っています。

    • repo はリポジトリの名前です。 リポジトリ名の文字数制限である 100 文字を超えないようにするには、元のリポジトリの名前を 80 文字に切り捨てます。
    • xxxx-xxxx-xxxx は、ドラフト セキュリティ アドバイザリの一意識別子です。
      • x はセット 23456789cfghjmpqrvwx からの文字または数字です。
      • 数字と文字はランダムに割り当てられます。
      • 文字と数字はすべて小文字です。

たとえば、octocat-repo というリポジトリに一時的なプライベート フォークを作成し、ドラフト アドバイザリに対して自動的に生成された ID が GHSA-x854-cvjg-vx26 である場合、その一時的なフォークは octocat-repo-ghsa-x854-cvjg-vx26 という名前になります。

REST API を使用して、一時的なプライベート フォークを作成することもできます。 詳細については、REST API ドキュメントの「一時的なプライベート フォークを作成する」を参照してください。

一時的なプライベートフォークにコラボレータを追加する

セキュリティアドバイザリの管理者権限を持つユーザは、セキュリティアドバイザリにコラボレータを追加でき、セキュリティアドバイザリのコラボレータは一時的なプライベートフォークにアクセスできます。 詳しくは、「リポジトリ セキュリティ アドバイザリへのコラボレータの追加」を参照してください。

一時的なプライベートフォークに変更を追加する

セキュリティ アドバイザリに対する書き込みアクセス許可があるユーザーなら誰でも、一時的なプライベート フォークに変更をコミットすることで、パッチに関する共同作業を行うことができます。

  1. GitHub で、リポジトリのメイン ページに移動します。

  2. リポジトリ名の下にある [ セキュリティ] をクリックします。 [セキュリティ] タブが表示されない場合は、 [] ドロップダウン メニューを選び、 [セキュリティ] をクリックします。

    タブを示すリポジトリ ヘッダーのスクリーンショット。 [セキュリティ] タブが濃いオレンジ色の枠線で強調表示されています。

  3. 左側のサイドバーの [レポート] で、 [ アドバイザリ] をクリックします。

  4. [セキュリティアドバイザリ] の一覧で、作業するセキュリティ アドバイザリの名前をクリックします。

  5. GitHub またはローカル環境で、変更を行うことができます。

    • GitHub で変更を行う場合は、[パッチで共同作業する] の下にある [一時的なプライベート フォーク] をクリックします。 そして、新しいブランチを作成し、ファイルを編集します。 詳細については、「リポジトリ内でブランチを作成および削除する」および「ファイルを編集する」を参照してください。
    • ローカルで変更を追加するには、「クローンを作成して新しいブランチを作成する」および「変更を加えてからプッシュする」の手順に従ってください。

    ドラフト セキュリティ アドバイザリの [パッチで共同作業する] 領域のスクリーンショット。 [一時的なプライベート フォーク] リンクが濃いオレンジ色で囲まれています。

一時的なプライベートフォークからプルリクエストを作成する

セキュリティアドバイザリに対する書き込み権限があるユーザなら誰でも、一時的なプライベートフォークからプルリクエストを作成できます。

  1. GitHub で、リポジトリのメイン ページに移動します。

  2. リポジトリ名の下にある [ セキュリティ] をクリックします。 [セキュリティ] タブが表示されない場合は、 [] ドロップダウン メニューを選び、 [セキュリティ] をクリックします。

    タブを示すリポジトリ ヘッダーのスクリーンショット。 [セキュリティ] タブが濃いオレンジ色の枠線で強調表示されています。

  3. 左側のサイドバーの [レポート] で、 [ アドバイザリ] をクリックします。

  4. [セキュリティ アドバイザリ] の一覧で、pull request を作成するセキュリティ アドバイザリの名前をクリックします。

  5. アドバイザリ フォームの一番下までスクロールします。 次に、[パッチで共同作業する] の下にある [比較と pull request] をクリックして、関連付けられているブランチの pull request を作成します。

    ドラフト セキュリティ アドバイザリの [パッチで共同作業する] 領域のスクリーンショット。 [比較と pull request] ボタンが濃いオレンジ色で囲まれています。
    [pull request を開く] には、pull request の作成時に 3 点の Git 差分比較で比較されるブランチを示すヘッダーが含まれています。 詳しくは、「プルリクエスト中でのブランチの比較について」を参照してください。

  6. レビューの準備が完了している pull request を作成するには、 [pull request の作成] をクリックします。 ドラフトの pull request を作成するには、ドロップダウンを使用して、 [ドラフトの pull request の作成] を選択し、 [ドラフトの pull request] をクリックします。 組織のメンバーである場合は、組織の所有者から下書きプル要求へのアクセスを要求することが必要になることがあります。 「pull requests について」をご覧ください。

一時的なプライベートフォーク内では、個々のプルリクエストをマージすることはできません。 その代わりに、対応するセキュリティアドバイザリ中ですべてのオープンなプルリクエストを一度にマージしてください。 詳細については、「変更をセキュリティ アドバイザリにマージする」を参照してください。

変更をセキュリティアドバイザリにマージする

セキュリティアドバイザリに対する管理者権限があるユーザなら誰でも、セキュリティアドバイザリに変更をマージできます。

一時的なプライベートフォーク内では、個々のプルリクエストをマージすることはできません。 その代わりに、対応するセキュリティアドバイザリ中ですべてのオープンなプルリクエストを一度にマージしてください。

セキュリティアドバイザリの変更をマージするには、一時的なプライベートフォークにあるすべてのオープンされたプルリクエストがマージできる必要があります。 脆弱性についての情報を保護するため、一時的なプライベートフォークにあるプルリクエストに対しては、ステータスチェックは実行されません。 詳しくは、「保護されたブランチについて」を参照してください。

さらに、マージの競合は発生せず、変更をマージしようとしているブランチに対してユーザーが設定している可能性のある保護規則は GitHub によって適用されません。

  1. GitHub で、リポジトリのメイン ページに移動します。

  2. リポジトリ名の下にある [ セキュリティ] をクリックします。 [セキュリティ] タブが表示されない場合は、 [] ドロップダウン メニューを選び、 [セキュリティ] をクリックします。

    タブを示すリポジトリ ヘッダーのスクリーンショット。 [セキュリティ] タブが濃いオレンジ色の枠線で強調表示されています。

  3. 左側のサイドバーの [レポート] で、 [ アドバイザリ] をクリックします。

  4. [セキュリティアドバイザリ] の一覧で、マージする変更が含まれるセキュリティ アドバイザリの名前をクリックします。

  5. アドバイザリ フォームの一番下までスクロールします。 次に、[このアドバイザリはマージする準備ができている] の下にある [pull request のマージ] をクリックして、一時的なプライベート フォーク内のすべての開いている pull request をマージします。

    ドラフト セキュリティ アドバイザリの [パッチで共同作業する] 領域のスクリーンショット。 [pull request のマージ] ボタンが濃いオレンジ色で囲まれています。

注: 一時的なプライベート フォークの main ブランチにマージできる pull request は 1 つだけです。 main ブランチを対象とする pull request が複数ある場合、マージはブロックされます。

セキュリティアドバイザリの変更をマージした後は、プロジェクトの以前のバージョンにある脆弱性についてコミュニティにアラートするため、セキュリティアドバイザリを公開できます。 詳しくは、「リポジトリ セキュリティ アドバイザリの公開」を参照してください。

参考資料