🐙

GitHubのプライベートリポジトリ内にアップロードされた画像に認証がかかるようになったので検証

2023/05/10に公開約2,100字

はじめに

https://github.blog/changelog/2023-05-09-more-secure-private-attachments/

2023/05/09より、プライベートリポジトリ内のIssues, Pull Requests, Discussions, Wiki等にアップロードした画像及び動画ファイルの閲覧に認証がかかるようになりました。

以前はプライベートリポジトリであっても発行されたURLを知っていれば誰でも閲覧できました。

検証

プライベートリポジトリ

プライベートリポジトリを新規作成し、Issuesのエディタ上で画像をアップロードすると以下のURLが発行されます。

https://github.com/<ユーザー名>/<リポジトリ名>/assets/<ユーザーID>/<uuid>

これを別のブラウザやシークレットウィンドウ等で閲覧しようとすると、404 Not Foundが返ってくることが確認できます。

また認証済のクライアントで閲覧すると、以下のリンクに302リダイレクトされます。(Amazon S3の署名付きURL?)uuidの部分はリダイレクト元とは異なります。

https://github-production-user-asset-6210df.s3.amazonaws.com/<ユーザーID>/<uuid>.png
  ?X-Amz-Algorithm=AWS4-HMAC-SHA256
  &X-Amz-Credential=XXXXXXXXXXXXXXXXXXXX%2F20230510%2Fus-east-1%2Fs3%2Faws4_request
  &X-Amz-Date=20230510T114026Z
  &X-Amz-Expires=300
  &X-Amz-Signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  &X-Amz-SignedHeaders=host
  &actor_id=<ユーザーID>
  &key_id=0
  &repo_id=<リポジトリID>

https://dev.classmethod.jp/articles/amazon-s3-console-pre-signed-url-generate/

このURLは失効するまでの間(5分間)は知ってさえいれば誰でも閲覧できる一方、URLパラメーターの認証情報を削ると403 Forbiddenが返ってきて閲覧できません。

パブリック

パブリップリポジトリを新規作成し、Issuesのエディタ上で画像をアップロードすると以下のURLが発行されます。

https://github.com/<ユーザー名>/<リポジトリ名>/assets/<ユーザーID>/<uuid>

閲覧すると以下のリンクに302リダイレクトされます。

https://github-production-user-asset-6210df.s3.amazonaws.com/<ユーザーID>/<uuid>.png

このURLは知ってさえいれば誰でも閲覧できます。プライベートの時と違いURLパラメーターに認証情報はありません。

パブリック -> プライベートに変更した場合

リポジトリの状態がパブリックの時にアップロードしたファイルについて、

  • https://github.com/<ユーザー名>/<リポジトリ名>/assets/…の画像は認証がないと閲覧できなくなる。
  • リダイレクト先のhttps://github-production-user-asset-6210df.s3.amazonaws.com/…の画像は継続してURLパラメーターの認証情報なしで閲覧できる。

プライベート -> パブリックに変更した場合

リポジトリの状態がプライベートの時にアップロードしたファイルについて、

  • https://github.com/<ユーザー名>/<リポジトリ名>/assets/…の画像は認証があっても閲覧できなくなる。
  • リダイレクト先のhttps://github-production-user-asset-6210df.s3.amazonaws.com/…の画像はURLパラメーターの認証情報があれば失効するまでの間は閲覧できる。

旧ドメイン

以前は一律にhttps://user-images.githubusercontent.com/<ユーザーID>/<uuid>.pngにアップロードされていました。

現在も、リダイレクト先のURLのgithub-production-user-asset-6210df.s3.amazonaws.comuser-images.githubusercontent.comに置き換えても閲覧できます。

Discussion

ログインするとコメントできます