misskey-dev / misskey

🌎 A completely free and open interplanetary microblogging platform 🚀
https://misskey-hub.net/
GNU Affero General Public License v3.0
10.14k stars 1.38k forks source link

APIの認証付きGETリクエストに対して認証なしリクエストのキャッシュで応答してしまうことがある #11414

Open mei23 opened 1 year ago

mei23 commented 1 year ago

💡 Summary

以下の条件を満たす場合に、認証付きAPI GETリクエストに対して、過去にされた認証なしのAPI GETリクエストのキャッシュで応答されてしまうことがあります。

※以下の改修の複合によって上記条件が出現するようになった https://github.com/misskey-dev/misskey/pull/11052 GETで認証を可能にした (13.14.x) https://github.com/misskey-dev/misskey/pull/9960 認証optionalなエンドポイントでキャッシュを可能にした (13.7.x)

🥰 Expected Behavior

$ curl -IXGET https://example.com/api/notes/featured
200
cache-control: public, max-age=3600
x-cache-status: (depends on cache status)

$ curl -IXGET https://example.com/api/notes/featured
200
cache-control: public, max-age=3600
x-cache-status: HIT

$ curl -IXGET https://example.com/api/notes/featured -H 'Authorization: Bearer invalid'
401
cache-control: private, max-age=0, must-revalidate

🤬 Actual Behavior

$ curl -IXGET https://example.com/api/notes/featured
200
cache-control: public, max-age=3600
x-cache-status: (depends on cache status)

$ curl -IXGET https://example.com/api/notes/featured
200
cache-control: public, max-age=3600
x-cache-status: HIT

$ curl -IXGET https://example.com/api/notes/featured -H 'Authorization: Bearer invalid'
200 ❗ 
cache-control: public, max-age=3600 ❗ 
x-cache-status: HIT ❗ 

📝 Steps to Reproduce

  1. ドキュメント通りにnginxで構築
  2. Actual Behaviorの手順を実施

📌 Environment

💻 Frontend

🛰 Backend (for server admin)

tamaina commented 1 year ago

Vary: Authorization で解決させるのでいいかしら?

mei23 commented 1 year ago

Vary: Authorization で解決させるのでいいかしら?

それで、nginxでは解決することは確認しているのだわ。

Vary未対応のCDNではダメかもだわ CloudFront: キャッシュする場合はキャッシュキーあたりを定義する必要がある Cloudflare: エンタープライズプランでないとカスタムキャッシュキーを使えなそうだけど、そもそも該当項目はデフォルトでキャッシュしない Fastly: Vary対応しているらしいが未確認

tamaina commented 1 year ago

てかGETかつAuthorizationがある場合というのは考えていないしそんな使い方は多分しないので、それを禁止(?)すれば良さそう

tamaina commented 1 year ago

メモ: cache-control: publicなので脆弱性とかではない(注意深くなる必要はあるが)

tamaina commented 1 year ago

キャッシュされてんだから応答で禁止なんてできないわね