Skip to content

5.33.0

Latest

Choose a tag to compare

@pooza pooza released this 12 Aug 03:10
fbcdaa2

概要

SSRF ハードニング(DNS リバインディング)と番組表の書き込みロックを主軸に、テスト・リリースゲートの信頼性をまとめて立て直した回。
5.33.0 マイルストーン

変更内容

セキュリティ

  • #4524 SSRF allowlist が DNS リバインディングを防げない(検証した IP アドレスで接続していない) — 名前解決の結果を検証したあと、素の URL で接続し直していたため、検証と接続の間に応答が変わると内部アドレスへ到達できた。検証したアドレスへ接続を固定(pinning)する方式に変更し、短縮 URL 展開の各ホップにも同じ検証を通す
  • #4574 内部アドレス判定がゼロアドレス(0.0.0.0 / ::)を素通りするIPAddrprivate? / loopback? / link_local? はいずれも 0.0.0.0 に false を返すが、connect(2) はローカルホスト宛として扱う。予約・特殊用途レンジ(CGNAT・NAT64・マルチキャスト等)を明示的に拒否するようにした。リリース前レビュー由来

バグ修正

  • #4549 カスタムフィードの相対 enclosure URL が解決されず、サムネイルが全滅する — あわせて syslog へ日 2 万行の出力。5.32.1 で 1 台のみ先行適用していたものが、本リリースで全台へ行き渡ります
  • #4534 番組表の書き込みが無ロックの read-modify-write になっている — 話数の増分中に別の編集が入ると巻き戻る。Redis の SET NX EX による排他(TTL 30 秒)を編集経路と save に導入。競合時は 409 を返す
  • #4575 読み経路のキャッシュ温めがロックの外にあり、書き込みを恒久的に巻き戻す#4534 の残り穴。読み経路のキャッシュ書き込みだけ SET NX に分離した。リリース前レビュー由来
  • #4537 の残り 2 件next_on の日付整形が明示オフセット付きの値にも UTC 変換を掛けていた件ほか

観測性

  • #4560 logger.warn がマスキング層を通らない / カスタムフィードの unresolved_enclosures が伸び続けるwarn だけ JSON 化とシークレットのマスキングが効いておらず、素の文字列がログへ出ていた

テスト

  • #4503 CI・手元でアカウント依存のテストが 1 件も走っていない — テスト用トークンが解決せず、822 件中 304 件が omission のまま 100% passed と表示されていた。あわせて fedi-test-harness の実走をリリースゲートとして明文化
  • #4492 / #4516 / #4552 harness 実走で常態化していた失敗 8 件を解消 — うち 1 件は harness 側の実バグ
  • #4559 リリースゲートの穴 2 件 — 両系同時実行時のコントローラ取り違えと、omission 集計の fail-open
  • #4567 webhook の endpoint_missing? が route-not-found 以外の 404 も omit する

メンテナンス

  • #4508 sinatra 4.2.1 / rack-protection 4.2.1 / tilt 2.8.0 へ更新
  • bundle update — ginseng-core 1.16.2、ginseng-web 1.3.46

既知の問題

次リリース(5.34.0)で対応予定です。

  • #4573 リモート辞書が 200-with-HTML を掴むと黙って空になる — Google Apps Script のデプロイ URL が失効すると HTTP 200 のまま text/html を返し、辞書が空のまま復旧しない。ログにしか出ないため気付けない
  • #4576 is_cat の webfinger と webhook の image_url に SSRF 検証が掛かっていない#4524 / #4574 で塞いだのは短縮 URL 展開の経路。この 2 経路は修正範囲が広いため独立サイクルに分けています
  • #4558 番組表の next_onTime を手書きすると、Redis キャッシュ往復で無効値になるvar/program.yaml を手で編集した場合のみ発生します

アップグレード手順

更新手順を参照してください。
4.x系からのアップグレードは4.x → 5.0 アップグレードガイドも参照してください。

必要 Ruby: 4.0.6.ruby-version。5.32.x から据え置き)。未導入のサーバーは rbenv install 4.0.6 が前提です。

Gemfile.lock に更新があるため bundle install が必要です。BUNDLED WITH が 4.0.18 に上がっているので、bundler が古いサーバーでは bundle install の前に gem install bundler -v 4.0.18 を明示してください(FreeBSD では bundler の自己インストール → 再 exec が失敗することがあります)。

本リリースに起動スクリプトの変更はありません。