Skip to content

v0.4.17

Choose a tag to compare

@github-actions github-actions released this 24 Oct 12:03
· 45 commits to main since this release
f57925c

修正(セキュリティ)

  • rproxy を rproxy-api v0.4.17 にしました(イメージ ghcr.io/max3584/rproxy-gateway/rproxy:0.4.17)。Gateway の rproxy で次のことが直ります。
    • HTTPRoute のパスと Host を正規化してから照合します。/%61dmin・//admin・/x/../admin や末尾にドットの付いた Host で、パスごとに付けた認証(ExternalAuth・RproxyMiddleware の basic_auth・oidc など)を素通りできなくなります。転送先へも正規化したパスを送ります。
    • 認証のミドルウェアが付ける身元のヘッダを、どのルートでもリクエストの最初に消します。
    • HTTP の接続に待ち時間の上限が付きます(何も送らない接続でファイル記述子を使い切られません)。
    • URL のポート・ホストが不正なら断ります。
  • ListenerSet のリスナーに付いたルートでも、原因のルートだけを外すようにしました(#95)。描く段階で見つけられない誤り(壊れた Secret など)のとき、これまではそのポートの全テナントのルートを外していました。
  • 古い rproxy(v0.4.0〜0.4.2)の Pod で、新しい項目を使う RproxyMiddleware があっても、ルールセット全体を断られないようにしました(#95)。そのルートだけを Accepted: False にします。

変更

  • 正規化していないパスは、正規化してから転送先へ送ります。
  • HTTP の接続の待ち時間の上限が既定で効きます(最初のバイトまで 10 秒・ヘッダまで 30 秒・処理のない HTTP/2 180 秒・本文が止まったとき 60 秒。gRPC と応答の後は除く)。
  • 外したルートとルールセット全体の拒否は、5 分ごとに rproxy に聞き直します。

rproxy: rproxy-api v0.4.17 · UI: TCP-UDP-rproxy-ui v0.4.9


Fixed (security)

  • rproxy is now rproxy-api v0.4.17 (image ghcr.io/max3584/rproxy-gateway/rproxy:0.4.17). For Gateways this fixes:
    • HTTPRoute paths and Hosts are normalised before matching, so /%61dmin, //admin, /x/../admin or a Host with a trailing dot can no longer bypass per-path authentication (ExternalAuth, RproxyMiddleware basic_auth / oidc, …). Backends receive the normalised path.
    • Identity headers that auth middlewares set are removed at the start of every request on every route.
    • HTTP connections have time limits (silent connections can no longer exhaust file descriptors).
    • URLs with an invalid port or host are refused.
  • Routes attached to ListenerSet listeners are isolated too (#95): when rproxy refuses something the render step can't detect (such as a broken Secret), only the offending route is left out instead of every tenant's routes on that port.
  • On old rproxy pods (v0.4.0–0.4.2), a RproxyMiddleware using newer fields no longer makes the whole rule set fail (#95); only that route becomes Accepted: False.

Changed

  • Paths are normalised before being sent to backends.
  • HTTP connection time limits apply by default (10 s to the first byte, 30 s for headers, 180 s for idle HTTP/2, 60 s for a stalled body; not for gRPC or after the response started).
  • Left-out routes and rejected rule sets are asked again every 5 minutes.

rproxy: rproxy-api v0.4.17 · UI: TCP-UDP-rproxy-ui v0.4.9