The Big Fix「脆弱性を修正すると、限定Tシャツが全員に当たります」(2023 年バージョン)

こんにちは。デベロッパーファーストのセキュリティプラットフォーム Snyk (スニーク) でソリューションエンジニアをしている @ToshiAizawa です！

#The Big Fix

Snyk では3月14日まで、The Big Fix (ザ・ビッグフィックス) というイベントをやっています。The Big Fix とは「みんなでアプリケーションの脆弱性を修正して、インターネットをもっと安全にしよう」という主旨のイベント。

オープンソースプロジェクトや、個人・会社のコードの中に隠れている脆弱性を見つけて、修正する。それを世界中の開発者、運用担当者、セキュリティ担当者と、いっしょにやりませんか？



# 参加方法

イベント特製の限定版 T シャツをゲットするためには、以下の4条件をクリアしてください！

1. [Snyk にサインアップ](#snyk-にサインアップ)
1. [The Big Fix イベントに登録](#the-big-fix-イベントに登録)
1. [Snyk を使って脆弱性スキャンを行い、脆弱性を見つける](#snyk-を使って脆弱性スキャンを行い脆弱性を見つける)
1. [見つかった脆弱性を Snyk を使って修正](#見つかった脆弱性を-snyk-を使って修正)

それぞれの具体的な方法を以下で説明しています！

## Snyk にサインアップ

**所要時間 1〜2分**
(Snyk のアカウントをすでにお持ちの方は、もちろんスキップしてください)

Google や GitHub のアカウント等でサインアップ可能です。個人的には GitHub がオススメ！あらかじめ、そのアカウントにログインしておくとスムーズに進みます。以下では GitHub を選んだ場合の流れを説明します。(それ以外のアカウントを選んだ場合、その後の流れが多少、異なります)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/5ef327b4-4393-be53-8845-5ce8bf0cad76.png)

1. [snyk.io](https://snyk.io) に行って、画面右上の **Sign up** ボタンをクリック
1. Google、GitHub など、サインアップに利用するサービスを選んでクリック
1. **Keep me informed on product updates** というページでは **Continue** ボタンをクリック (Snyk からの情報提供に関する opt-in/out するページです)
1. **Where is the code you want to test?** というページでは、連携するソースコード管理システムを選んでクリック (ここでも GitHub を選ぶとその後が簡単です)
1. 連携対象のリポジトリの種類 (Public and private repos がデフォルトとして選択済み) を選び、**Continue** ボタンをクリック
1. 初期スキャン対象のリポジトリにチェックを入れて、**Import and scan** ボタンをクリック
1. これでサインアップは完了して、そのまま続いて指定したリポジトリのインポートとスキャンが実行されます


## The Big Fix イベントに登録

**所要時間 1分**

[The Big Fix](https://snyk.io/events/the-big-fix/) のページから、名前とメールアドレスを送信すれば登録は完了します。
**【重要】**メールアドレスは、Snyk のサインアップ時に使ったものを入力してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/676379dc-3ca0-62e9-9ca8-c72ab9c805af.png)

1. [The Big Fix](https://snyk.io/events/the-big-fix/) のページへアクセス
1. 画面左の **Join the Big Fix** ボタンをクリックする、または、ページをスクロールして登録フォーム (**Sign up and start fixing**) に進む
1. (1) **First Name** (下の名前をアルファベットで入力)、(2) **Last Name** (名字をアルファベットで入力)、(3) **Email** (メールアドレスを入力) の計3項目 (すべて必須) を記入
1. **Submit** ボタンをクリック

以上で登録は完了です。

なお、登録をもって、以下の規約に同意したとみなされます。

* [Snyk Privacy Policy](https://snyk.io/policies/privacy/)


## Snyk を使って脆弱性スキャンを行い、脆弱性を見つける

**所要時間 2分未満**

Snyk にサインアップする際に、リポジトリの取り込みを済ませていれば、脆弱性はすでに見つかっている可能性が高いです。[Snyk UI](https://app.snyk.io) の画面上部にある **Projects** タブをクリックしてみてください。ここでの Project とは、脆弱性スキャンの対象それぞれを指します。また、並んで表示されている数字は、見つかった脆弱性の個数を示しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/96622f03-81d8-a289-78e6-c6932a2b0405.png)
**【画面キャプチャ】脆弱性が見つかったプロジェクト例 (pom.xml)**

もし、リポジトリの取り込みがまだ、または、取り込んだリポジトリに脆弱性が存在しない場合。**Projects** タブをクリックすると画面右上に表示される **Add project** ボタンをクリックしましょう。対象のリポジトリ等を指定して取り込みが行えます。取り込むと同時に、脆弱性スキャンが実行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/ac957708-25db-4649-2fbc-75a532bf0ec7.png)
**【画面キャプチャ】Add project ボタンをクリックした画面**


**レポジトリ取り込み操作の例:**

1. 画面右上の **Add project** ボタンをクリック
1. GitHub をクリック
1. リポジトリ一覧から取り込みたいリポジトリにチェックを入れる
1. 画面右上の **Add selected repositories** ボタンをクリック


## 見つかった脆弱性を Snyk を使って修正

**所要時間 2分前後**

Snyk を使えば、脆弱性の修正も簡単です。以下では、Java のプロジェクトに存在するオープンソースパッケージの脆弱性を例に、修正の流れを説明します。なお、ここでは **Snyk Open Source** (アプリケーションが参照しているオープンソースパッケージの脆弱性に対応するための製品) を用います。

1. [脆弱性の確認](#修正-step-1-脆弱性の確認)
1. [Fix PR (修正用プルリクエスト) の作成](#修正-step-2-fix-pr-修正用プルリクエスト-の作成)
1. [Fix PR のマージ](#修正-step-3-fix-pr-のマージ)

以上の3ステップで修正できます。それぞれのステップについては、この後に続く説明をご確認ください。


### 修正 Step 1: 脆弱性の確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/96622f03-81d8-a289-78e6-c6932a2b0405.png)
**【画面キャプチャ】脆弱性が見つかったプロジェクト例 (pom.xml)**

1. [Snyk UI](https://app.snyk.io) で **Dashboard** タブをクリックして Vulnerable projects から、または、**Projects** タブをクリックして表示されるプロジェクトの中から、脆弱性が見つかっているものをクリックします。(上の例では Maven のマニフェストファイルである **pom.xml** をクリックしてください)
1. プロジェクトの詳細ページが表示されます。脆弱性がそれぞれ表示されます。このページでは脆弱性の確認、修正を行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/195a9b89-24bf-67f9-8b17-959c969f1b28.png)
**【画面キャプチャ】プロジェクト (pom.xml) の詳細ページ**


### 修正 Step 2: Fix PR (修正用プルリクエスト) の作成

修正の第一歩として、Snyk UI から Fix PR (修正用プルリクエスト) を作成します。オープンソースパッケージの脆弱性は、脆弱性を含むパッケージを、脆弱性を修正したバージョンへアップグレードすることで修正できます。Fix PR を通じてマニフェストファイルを書き換えることで、このバージョンアップを実装します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/8e74cf52-f8d9-a117-03e3-c4e91bb0a0fb.png)
**【画面キャプチャ】Fix PR の作成前の確認ページ**

1. プロジェクト詳細ページにて、**Fix these vulnerabilities** ボタンをクリック (複数の脆弱性をまとめて修正する場合)、または、個々の脆弱性に対して表示されている **Fix this vulnerability** ボタンをクリック (特定の脆弱性のみ修正する場合) します。
1. Fix PR の作成前の確認ページが表示されます。
1. 修正可能な脆弱性を確認した上で、**Open a Fix PR** ボタンをクリックします。
1. GitHub (または連携先のソースコード管理システム) 上でプルリクエストが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/2d808a2d-9a5f-4185-ed71-f9c477a39dad.png)
**【画面キャプチャ】GitHub 上に作成されたプルリクエスト (Fix PR)**

Snyk を使えば、ボタンを2回クリックするだけで、オープンソースパッケージに由来する脆弱性を修正することができます。(修正をリポジトリに反映させるためには、この後、プルリクエストのマージが必要です)


### 修正 Step 3: Fix PR のマージ

あともう一歩！プルリクエストをマージすれば、脆弱性が修正されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/82acc31f-a00e-06ea-695f-ecec7eba9a3b.png)
**【画面キャプチャ】GitHub: プルリクエスト (Fix PR) の Merge pull request ボタン**

1. Step 2 で作成したプルリクエスト (Fix PR) の **Merge Pull Request** をクリック、続いて **Confirm merge** をクリックします。これにより修正が反映されます。
1. Snyk UI へ戻り、プロジェクトの詳細ページの上部より、**Retest now** をクリックします。(**Retest now** をクリックしなくても、GitHub → Snyk への Webhook により通常、自動実行されます)
1. 再スキャンが実施され、脆弱性が修正されたことが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/afc9eb01-2308-39d6-beb7-94f8d7c046fe.png)
**【画面キャプチャ】GitHub: プルリクエスト (Fix PR) にてマージが完了**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/ffbcf6d5-7af0-5c0f-308a-f80965445d6f.png)
**【画面キャプチャ】Snyk UI: プロジェクトの詳細ページ (Retest now のリンク)**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/7a0f1b59-68bc-c161-5725-049306363532.png)
**【画面キャプチャ】Snyk UI: Retest 後のプロジェクト詳細ページ**

プルリクエストをマージした後、再度テストを行えば安心！修正の適用が確認されました。つまり T シャツゲット！Congratulations 🎉🎉🎉

なお、発送はイベント終了後となります。その前に発送先の確認のため、Snyk より連絡を差し上げます。


# Discord と #TheBigFix

The Big Fix の参加者が交流するためのチャンネルを Discord に開設しています。

**[Discord のコミュニティに参加する](https://discord.gg/NXuz63GmUt)**

脆弱性を修正したら、ぜひ Twitter でハッシュタグ #TheBigFix をつけてツイートしてください！

**[Tweets with #TheBigFix](https://twitter.com/search?q=%23TheBigFix)**