GitHub で他人の PAT を無効化できる Credential Revocation API が一般提供開始されました

GitHub で他人の PAT を無効化できる Credential Revocation API が一般提供開始されました

2025.04.30

こんにちは、製造ビジネステクノロジー部の若槻です。

GitHub は 2025年4月29日に、漏洩した個人アクセストークン(PAT)を無効化するための「Credential Revocation API」を一般提供開始しました。この API を使用すると、GitHub 上やその他の場所で見つけた PAT が自分のものでなくても、それを無効化できるようになります。これにより、トークン漏洩のリスクを素早く軽減し、ソフトウェアエコシステム全体のセキュリティ向上に貢献できます。
https://github.blog/changelog/2025-04-29-credential-revocation-api-to-revoke-exposed-pats-is-now-generally-available/

ドキュメントにも記述が追加されています。
https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/token-expiration-and-revocation#token-revoked-by-a-third-party

Credential Revocation API の概要

この API の主な特徴は以下の通りです:

  • クラシック PAT と Fine-grained PAT の両方を無効化できる
  • 自分が所有していないトークンでも無効化リクエストを送信できる
  • 一度に最大 1000 個のトークンを無効化できる
  • 認証不要の API として提供(GitHub.com のすべてのユーザーが利用可能)
  • 悪用防止のため、1時間あたり 60 リクエストまでの制限あり

試してみた

実際に API を使って、漏洩したトークンを無効化してみます。

ある GitHub ユーザーで動作確認用の Fine-grained personal access tokens(権限なし)を発行します。

念の為 GitHub CLI を最新にアップデートしておきます。

$ brew upgrade gh
$ gh --version
gh version 2.71.2 (2025-04-24)
https://github.com/cli/cli/releases/tag/v2.71.2

Credential Revocation API のドキュメントは以下の URL です:
https://docs.github.com/en/rest/credentials/revoke?apiVersion=2022-11-28#revoke-a-list-of-credentials

GitHub CLI を使った例は以下の通りです:

gh api \
  --method POST \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /credentials/revoke \
   -f "credentials[]=github_pat_11AF53YOY03CQGfdjrK1R3_h2o5VaUC4ly4xmWclSE1SxIPzEDJVTNRVG0QFmK4AhEYNULBXXXXXXXXXX"

上記コマンドを、PAT の発行元と別の GitHub ユーザーで実行します。

しかしコマンドを実行したところ、以下のエラーが発生しました。

{
  "message": "This API endpoint can only be accessed anonymously.",
  "documentation_url": "https://docs.github.com/credentials/revoke#revoke-a-list-of-credentials",
  "status": "403"
}
gh: This API endpoint can only be accessed anonymously. (HTTP 403)

はい。冒頭でも示したようにこの API は認証をしてはいけません。API ドキュメントにも「Any authenticated requests will return a 403.」という記述がしっかりあります。

そこで GitHub CLI からログアウトし未認証の状態で再度同コマンドを実行すると、次は逆にログインするように促されます。なんか上手くいきませんね。

$ gh auth logout
$ gh api \
  --method POST \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /credentials/revoke \
   -f "credentials[]=github_pat_11AF53YOY03CQGfdjrK1R3_h2o5VaUC4ly4xmWclSE1SxIPzEDJVTNRVG0QFmK4AhEYNULBXXXXXXXXXX"
To get started with GitHub CLI, please run:  gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.

今回はうまくいきませんでしたが、無効化が成功すると、以下の処理が自動的に行われるとのことです。

  1. トークンが即時に無効化される
  2. トークン所有者の監査ログに無効化イベント「oauth_access.revoke」が記録される
  3. トークン所有者のプライマリメールアドレスに「Action needed: Personal access token was revoked」という通知メールが送信される
  4. もし無効化されたトークンが GitHub 組織へのアクセス権を持っていた場合、そのアクセス権も自動的に削除される

これにより、漏洩したトークンによる被害を最小限に抑えることができます。

おわりに

GitHub で他人の PAT を無効化できる Credential Revocation API が一般提供開始されたのでご紹介しました。

思ったよりもセキュリティに振り切ったなという印象です。まあただ他人の PAT を知り得たら今までは悪用されるのみだったのでこれで良いのかも知れません。皆さんもインターネットの巷で PAT を見かけたら本 API を思い出し無効化してあげてください。

以上

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.