こんにちは。小國です。
あるPHPプロジェクトでCIをGitHub Actionsで回している際、昨日まで動いていたワークフローが突然以下のようなエラーで落ちました。
1In BaseIO.php line 140:
2
3 Your github oauth token for github.com contains invalid characters: "ghs_15
4 *** *** ***"TL;DR
結論から言うと、このエラーはリポジトリ内で「古いComposer」をそのまま利用し続けていたことが原因です。Composerのバージョンを最新版(または修正が施された 2.9.8 / 2.10.x もしくはLTS版の 2.2.28 以上)にアップデートすることで解決します。
また、古いComposerのバグにより過去のログに生のトークンが露出してしまっている可能性があります。エラーの解消と同時に、必ず過去のログチェックやセキュリティの確認(露出したトークンの失効・ログ削除)もセットで実施してください。
詳しい背景や経緯については、公式の発表である Composer 2.9.8 and 2.2.28 fix GitHub Actions token disclosure in error messages - Packagist Blog をご参照ください。
どのような環境で起きていたか?
GitHub Actionsのワークフロー内で以下のように、プロジェクト内に残っている古い composer.phar を直接指定して実行している環境で発生しました。
1- name: Install Dependencies
2 run: php composer.phar install -q --no-ansi --no-interaction ...何が起こっていたのか?
Composer 2.9.8 and 2.2.28 fix GitHub Actions token disclosure in error messages - Packagist Blog の発表内容の要約になるのですが、
- GitHub側の変更: GitHubはトークンの新しいフォーマット(ハイフン を含む形式)への移行を順次進めていた。
- Composer側のバリデーション不足: 従来のComposerは、GitHubのトークンにハイフンが含まれないことを前提とした正規表現でチェックを行っていた。そのため、新しいフォーマットのトークンが渡されるとバリデーションエラーを引き起こした。
なぜ昨日まで動き、今日突然動かなくなったのか?(推測)
推測にはなるのですが、この「ハイフン入りの新しいトークン形式」は一斉適用ではなく、段階的(ロールアウト)に適用しており、昨日まで古いComposerで動いていたのがたまたま「古い形式(ハイフンなし)」だったためかと思います。
そしてついに新しいトークン形式のロールアウト順が回ってきたため、プロジェクト内の古いComposerが対応できず突然エラーになったと推測されます。
推奨される対応
公式ブログの Recommended immediate action セクションで推奨されている、ユーザーが今すぐ取るべきアクションを実施してください。
まとめと詳細リファレンス
今回のトラブルは、開発者側のコードの不備ではなく、「GitHubの仕様変更(トークン形式変更)」に「プロジェクト内に残っていた古いComposer」がついていけなくなったことが原因でした。
単にエラーを解消してビルドを通すだけでなく、公式ブログの警告通り「過去のログに機密情報が残っていないか」のセキュリティチェックまでしっかりと行うことが、安全なCI/CD環境を維持するための重要なポイントです。
本件に関する詳しい情報は、以下の公式ブログをご参照ください。
