2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubAppの安全性ってどうなの?

2
Last updated at Posted at 2026-05-27

概要

最近なにかとセキュリティ攻撃が多く、GitHubActions関連で色々な投稿を耳にします
その中でセキュリティ意識高めな要素としてGitHubAppがいいのでは?と思ったので記事を書き書き:pencil:してみます

TL;DR

OIDCトークンは奪われると全リポジトリにアクセスされる可能性がありますが、GitHubAppはインストールしたリポジトリのみに制限できます。TanStack攻撃のような事態でも被害を最小限に抑えられます。

そもそもTANSTACKで発生したセキュリティ攻撃って何?

概要

2026年5月11日19時20分から19時26分(UTC)の6分間の間に42個の @tanstack/* パッケージに、84個の悪意あるバージョンが公開されました。
pull_request_targetという仕組みを悪用してGitHubActionsを汚染して、ランナーのメモリからOIDCトークンで取得したnpmmのアクセストークンを盗み出して公開に悪用したというものです

OIDCトークンとは?

OpenID Connect(OIDC) という認証の仕組みで発行される、「自分が誰であるかを証明する短命なトークン」です
このトークンは有効期限が短命で設定によりますが5分~15分程度の寿命になります。
AWSなどのクラウドプロバイダーに事前に資格情報を提供することで発行できます

ただし、リポジトリの選択権限はなく取られてしまうと全リポジトリへのアクセスが可能になります
今回はこのOIDCトークンに着目してGitHubAppの良さと使い道を考えていきます

GitHubAppとは?

一言で言うと、GitHubの機能を拡張するツールです。身近なもので言うと、Chromeの拡張機能とかがそうですね。
どのリポジトリに対してどのような操作ができるのかの権限設定を細かく制御することができます。

同じようなものでOAuthアプリがありますが、セキュリティ的には権限設定を細かく制御できるのでGitHubAppの方が高いです

GitHubAppの良さとは?

トークンの有効期限が短い!

GitHubAppの有効期限は1時間になります(OIDCトークンより長い:cry:
ドキュメントを見てみましたが、固定で変更は不可能そうです(もし可能だよ!ってあったらこっそり教えてください)
OIDCトークンよりは長いですが、PATとかと比べるとあっちは有効期限が30日だったりするのでそこと比べたらだいぶ短くできているなと思いますね。

大事なのが次

使用するリポジトリを選べる!

今回一番大事だと思ったのがここです。OIDCトークンでは有効期限内であれば全てのリポジトリでトークンが使えてしまうという欠点がありますが、GitHubAppでは使用できるリポジトリを選択ができるため、奪われたとしても使用されるリポジトリは選択されたリポジトリのみになります!
Tanstackでは6分間の間で42個のモノレポパッケージが感染しており、GitHubAppを使用してリポジトリを制限すれば10個などに被害を抑えられた可能性もあります

最後に

最近GitHubActionsを業務でも使用することになって、セキュリティ周りの攻撃が多いのでちらちらっと調べてみました。今後AIが加速していくにつれてセキュリティ攻撃も激化していくと思います。他人事と思わず明日は我が身と思い、学んでいきたいです:pencil:

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?