昨今GitHub上で提供されている有名なOSSに対して攻撃がなされることが多い(例: Nxの2025/08の事例)。自分もそこから学び、最低限GitHub上でセキュリティ周りの設定を入れた方が良いと考えた。
設定を考えるにあたって、とくに次の3つの記事が参考になった。
- リポジトリを保護するためのクイック スタート - GitHub ドキュメント
- Nx の攻撃から学べること #s1ngularity | blog.jxck.io
- GitHub の Immutable Releases を有効にしてセキュリティインシデントを防ごう
これらを参考にAIと協力して最低限のセットアップドキュメントを作ったので共有する。もっとこういう設定を入れるべきなどあれば、教えてもらえると嬉しい。
GitHub OSS セキュリティ最低限セット
チェックリスト
- [ ] Dependabot Alertsを有効化
- [ ] GitHubの「Private vulnerability reporting / Security Advisories」を有効化
- [ ] CodeQLの有効化
- [ ] Secret scanning & プッシュ保護を有効化
- [ ] main/masterを保護(PR必須 + CI必須など)
- [ ] バージョンtagの保護
- [ ] SECURITY.mdを追加
- [ ] Enable release immutability
Dependabot Alerts を有効化(脆弱性通知)
やること:依存関係に脆弱性が見つかったらSecurityタブにアラートが出るようにする。 参考
手順
- リポジトリ > Settings > Advanced Security
- Dependabot alertsをEnable
Private vulnerability reporting / Security Advisories を有効化
やること:外部からの脆弱性報告を非公開で受け付けられるようにして、「Report a vulnerability」導線を出す。 参考
手順
- リポジトリ > Settings > Advanced Security
- Private vulnerability reportingをEnable
CodeQL(Code scanning)を有効化
やること:静的解析で脆弱性の芽を拾う。最短はDefault setup。 参考
手順
- リポジトリ > Settings > Advanced Security
- CodeQL analysisのところでSet up > Default
- 提案されたトリガ(push / PR / schedule)で有効化
Secret scanning & Push protection を有効化
やること:トークン/APIキー等が混入したら検知してアラートを出す。
手順
- リポジトリ > Settings > Advanced Security
- Secret scanning(またはSecret Protection)をEnable
- Push protectionをEnable
main/master を保護(PR必須 + CI必須)
やること:直pushを禁止して、CIが通らないとマージできないようにする。 GitHubは従来の「Branch protection」か、より柔軟な「Rulesets」で設定できる。Rulesetsはブランチ/タグも対象にできる。 参考
手順
- リポジトリ > Settings > Rules > Rulesets
- New branch ruleset
- 対象を
main(またはmaster)にする(例:Default branch / パターン指定) - ルールをON
- Enforcement status: Active
- Repository adminをbypass
- リリースをmainブランチでやっているからで、本当はこれも無くしたい
- Target branchesでInclude default branch
- Restrict deletions
- Require a pull request before merging(PR必須)
- Require status checks to pass(ステータスチェック必須)
- Add checksでCIのジョブ(例:
ci/test)を選ぶ
- Add checksでCIのジョブ(例:
- 必須にしたいチェックは、まずCIを1回以上動かして「チェック名」がGitHubに認識されてから設定する 参考
- Block force pushes
- Require code scanning results
バージョンtagの保護
やること:バージョン用のtagを作れる人を制限する。
- リポジトリ > Settings > Rules > Rulesets
- New tag ruleset
- ルールをON
- Enforcement status: Active
- Repository adminをbypass
- Target tagsで
v* - Restrict creations
- Restrict updates
- Restrict deletions
- Require signed commits
- Block force pushes
SECURITY.md を追加
やること:報告方法を明文化して、公開Issueに書かれないように誘導する。 GitHubのUIからテンプレを作ってコミットできる。 参考
手順
- リポジトリ > Security > Set up a security policy
SECURITY.mdを編集してコミット
最小テンプレ(コピー&ペースト用)
# Security Policy ## Supported Versions Only the latest version is supported with security updates. Please always use the latest release. ## Reporting a Vulnerability **Please do not report security vulnerabilities through public GitHub issues.** Instead, report a vulnerability through GitHub's security advisory feature at https://github.com/<owner>/<repository_name>/security/advisories/new. You can expect an initial response within a few days. If for some reason you do not, please follow up with a comment on the advisory to ensure we received your original report.
Enable release immutability
やること:GitHub TagやRelease、Release assetsを後から変更できないようにする。参考
手順
- リポジトリ > Settings > GeneralからEnable release immutabilityを有効化