@security-alertというGitHub Security Alertを扱うコマンドラインツール群を作りました。

GitHub Security Alertは、リポジトリに含まれるnpmやgemなどのパッケージの脆弱性情報を通知した一覧管理できる仕組みです。 詳しくは次のドキュメントで紹介されています。

このGitHub Security AlertからDependabotを使った修正PatchのPull Requestを作成できるようになっています。 一方で、Pull Requestしか作れないため、そのAlertに対してメモや議論するためのIssueを作るのが面倒でした。

そのため、GitHubにGitHub Security Alertの内容を含んだIssueを作る機能のフィードバックも送ったりしていましたが、 面倒だったので自作することにしました。

@security-alert

@security-alertはmonorepoになっていていくつかのGitHub Security Alert周りのツールが入っています。

@security-alert/list-alerts

@security-alert/list-alertsは、GitHub Security Alertの内容を取得しパッケージの情報と合成したデータのリストを取得できます。 (npmならDependenciesTypeなどもpacakge-lock.jsonなどから取得しています。)

--format jsonでJSON形式でも取得できるようになっています。

$ GITHUB_TOKEN="GITHUB_TOKEN" npx @security-alert/list-alerts --repo azu/security-alert

# lodash.template

- PackageName: lodash.template
- PackageUrl: https://www.npmjs.com/package/lodash.template
- PackageVersion: 4.4.0
- DependenciesType: devDependencies
- PackageManifestUrl: https://github.com/azu/security-alert/blob/master/yarn.lock
- VulnerableVersionRange: < 4.5.0
- GitHubAlertUrl: https://github.com/azu/security-alert/network/alert/yarn.lock/lodash.template/open

# lodash

- PackageName: lodash
- PackageUrl: https://www.npmjs.com/package/lodash
- PackageVersion: 4.17.11
- DependenciesType: devDependencies
- PackageManifestUrl: https://github.com/azu/security-alert/blob/master/yarn.lock
- VulnerableVersionRange: < 4.17.13
- GitHubAlertUrl: https://github.com/azu/security-alert/network/alert/yarn.lock/lodash/open

@security-alert/create-issue

@security-alert/create-issueはGitHub Security AlertのURLからそのリポジトリにIssueを作成できます。

$ GITHUB_TOKEN="$GITHUB_TOKEN" npx @security-alert/create-issue "https://github.com/azu/security-alert/network/alert/yarn.lock/lodash/open"
...
https://github.com/azu/security-alert/issues/1

実際に作成されたIssueは次のページから見れます。 大体GitHub Security Alertの画面で見られるものと同じです。

作成時に、ラベルやassignの指定もできます。

GITHUB_TOKEN=xxx npx @security-alert/create-issue "https://github.com/azu/github-webhook-SecurityVulnerability-test/network/alert/package-lock.json/axios/open" --labels "security,package"

後は、このIssueに対応するかを決めて、GitHub Security Alertの方をCloseしたり、Pull Requestで修正すれば完了です。

GitHubにこの機能はフィードバックを送ってありますが、まだ(2019-07-19)Issueを作る機能はないようです。

おわりに

GitHub Security Alertをコマンドラインから扱うための@security-alert/list-alerts@security-alert/create-issueを作りました。

GitHubにSecurity AlertがIntegrationされていることはすごい便利なのですが、このSecurity Alertを取得するためのAPIがGraphQLにしか無かったりします。

また、 GitHub AppsGitHub Actionsはまだ(2019-07-19)このSecurity Alertのhookに対応していません。(WebHookでのみ対応している) さらに、Pull Requestを送るDependabotlernaに完全に対応してるわけではなかったり(2019-07-19現在lerna + npmには対応してない)、あまり設定が柔軟では無かったりします。 この辺はrenovatebotの方が柔軟で対応できる範囲は広いです。

ただし、先ほども書いたようにGitHubに組み込まれていることがかなりメリットなので、この辺の機能やサポートが充実してくるといいなと思いました。

この辺のGitHub Alertを含めたGitHub周りのセキュリティの仕組みをいい感じにするいい方法をもっと知りたい。