GitHubの削除されたリポジトリや非公開のリポジトリに誰でもアクセスできてしまうのは仕様通り

GitHubでは削除されていたりプライベートに設定されていたりするフォークやリポジトリに誰でもアクセスでき、さらにその動作が欠陥ではなく仕様通りであるとオープンソースセキュリティ企業のTruffle Securityがブログに投稿しました。
Anyone can Access Deleted and Private Repository Data on GitHub ◆ Truffle Security Co.

GitHubでの一般的なワークフローとして、「新しいフォークを作成する」「コミットする」「フォークを削除する」というものを考えてみます。

この時、削除したはずのフォークの中身を誰でも確認できてしまうとのこと。Truffle Securityが大手AI企業のリポジトリを調査した結果では、削除済みのフォークから40個の有効なAPIキーを発見しています。フォーク後、確認のために一時的にAPIキーをハードコードしてしまうパターンが多い模様。

もう一つのケースとして、「リポジトリをフォークする」「元のリポジトリに新たなコミットを行う」「元のリポジトリを削除する」という場合を考えます。

一見するとフォークの後に行われたコミットへのアクセスは不可能に見えますが、リポジトリネットワークの仕組みを通して永続的にアクセス可能な状態になっているとのこと。

さらに、新たなツールをオープンソース化する場合、「新たなツール用のリポジトリをプライベート設定で作成」「プライベートなフォークを作成」「フォークをプライベートにしたままリポジトリを公開設定に変更」という手順を踏むことは多いもの。

この場合も、フォークがプライベートであるかどうかに関わらず全てのコミットが誰からでもアクセス可能な状態になっています。

上記のような「隠れたコミット」にアクセスするには、当該コミットのコミットハッシュを取得すれば良いとのこと。

リポジトリのURLに直接コミットハッシュを入力することで当該コミットを表示することが可能です。

Truffle SecurityがGitHubにバグとして報告したところ、GitHubからは「仕様通り」と返答があったとのこと。実際、GitHubのドキュメントを確認すると「フォークネットワーク内のどのリポジトリへのコミットも、アップストリームリポジトリを含むフォークネットワーク内全てのリポジトリからアクセスできる」と書かれています。

Truffle Securityは「プライベートリポジトリであってもコミット内容が外部に公開されている場合がある」「リポジトリやフォークの削除はコミットデータを実際に削除するわけではない」とまとめ、GitHubの仕様について「設計上の欠陥」と指摘。多くのGitHubユーザーがリポジトリネットワークの仕組みを理解しておらず、安全性が低下していると述べました。
