[GitHub] プライベートリポジトリの Issue などにアップロードされた画像ファイルの閲覧が認証必須となりました

2023.05.09

こんにちは、CX事業本部 Delivery部の若槻です。

本日の GitHub のアップデートにより、プライベートリポジトリの Issue などにアップロードされたファイルの閲覧に認証が必須となりました。

対象は?

プライベートリポジトリの以下の場所に添付ファイルとしてアップロードされた画像および動画ファイルが対象です。

  • Issue
  • Pull Request
  • Discussions
  • Wiki

いつから認証が必須になる?

すでに本日より認証が必要となっています。

プライベートリポジトリの Issue に画像をアップロードしてみます。

アップロードされた画像のURLは次のようになりました。

![image](https://github.com/cm-rwakatsuki/devio/assets/57384023/2860cc47-c94f-4143-97e5-8f2ec46d8c83)

URL形式が以前とは変わり、アップデート後はリポジトリに結びついたURLになっていますね。

URL形式
アップデート前 https://user-images.githubusercontent.com/<OWNER_ID>/<FILE_ID>.png
アップデート後 https://github.com/<OWNER>/<REPO>/assets/<OWNER_ID>/<FILE_ID>

URLを認証セッションのないブラウザ(シークレットウィンドウ)で開いてみると、画像が開けませんでした。認証が必須となっていることが確認できます。

画像の表示は署名付き URL が使われる

URLを GitHub の認証セッションがあるブラウザで開いた場合は画像が表示されます。

その開いた画像の URL は次のような Amazon S3 の署名付きURLにリダイレクトされます。X-Amz-Expires=300とある通り画像を表示してから300秒(5分)のみ有効なURLとなっているようです。

https://github-production-user-asset-6210df.s3.amazonaws.com/57384023/237124823-2860cc47-c94f-4143-97e5-8f2ec46d8c83.png?
  X-Amz-Algorithm=AWS4-HMAC-SHA256&
  X-Amz-Credential=AKIXXXXXXXXXXXXX%2F20230509%2Fus-east-1%2Fs3%2Faws4_request&
  X-Amz-Date=20230509T145031Z&
  X-Amz-Expires=300&
  X-Amz-Signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&
  X-Amz-SignedHeaders=host&
  actor_id=57384023&
  key_id=0&
  repo_id=297281978

つまり、この署名付き URL(もしくは JWT)を公開してしまうと、次のように発行から5分以内であれば認証なしで閲覧できてしまいます。この点に関しては注意が必要ですね。

追記

またプレビュー時・コメント投稿後に使用される次の形式の画像表示用 URL に関しても、URL を知っていれば 5 分間は誰でもアクセスできます。

https://private-user-images.githubusercontent.com/xxxxxxxx/xxxxxxxxx.png?jwt=eyJhbGciOiJIUzI1NiI...

ドメインは S3 ではなく GitHub のものになっており、こちらは https://github.com/<OWNER>/<REPO>/assets/<OWNER_ID>/<FILE_ID> にアクセスした時のようにリダイレクトされず 200 で画像が返ってくるが、クエリパラメータについている JWT のペイロードを覗くと、以下のように path フィールドに S3 の署名付き URL(有効期限 5 分)のパスが入っているので、同じように S3 の署名付き URL から画像取得して返していると推測できます。

※こちらご指摘いただきありがとうございました。

過去にアップロードされたファイルはどうなる?

今回の認証必須化のアップデートは既存の添付ファイルには遡って適用されません。

下記は過去にプライベートリポジトリにアップロードした画像ファイルです。

URLをブラウザのプライベートウィンドウで開いてみると、認証なしで閲覧することができました。

過去の添付ファイルに遡って認証必須化されると、インターネット上の多くのコンテンツに影響が出ることが予想されたので、そうはならなくて良かったです。

おわりに

GitHub のアップデートにより、プライベートリポジトリの Issue などにアップロードされたファイル(画像および動画)の閲覧に認証が必須となったというご紹介でした。

今までもURLが分からなければプライベートリポジトリにアップロードされた画像を閲覧することはできませんでしたが、今回のアップデートで認証も必須となりセキュリティが向上しました。ただし今までプライベートリポジトリを公開コンテンツの画像置き場のように利用していた方は今後は使い方を変える必要がありそうです。

以上