Rubyの標準ライブラリの一部として広く利用されている zlib ジェムにおいて、重大な脆弱性が報告されました。
2026年3月5日に公開されたこの脆弱性 CVE-2026-27820 は、 Zlib::GzipReader クラスにおけるバッファオーバーフローに起因するものです。
この不具合を放置するとメモリの破壊を招く恐れがあるため、Rubyを利用している開発者は速やかに内容を確認し、適切な対策を講じる必要があります。
脆弱性の詳細
今回の脆弱性は、 zlib ジェムの内部関数である zstream_buffer_ungets において発見されました。
この関数は、以前に生成された出力の前に、呼び出し元から提供されたバイト列を挿入(prepend)する処理を担っています。
問題の原因は、既存のデータを移動させる memmove 処理を実行する際に、背後にある Ruby文字列の容量が十分に確保されていることを保証できていない 点にあります。
バッファの長さが予約された容量を超えてデータが書き込まれた場合、 メモリ破損(Memory Corruption) を引き起こすリスクがあります。
これにより、アプリケーションの異常終了や、予期せぬ動作につながる可能性があります。
影響を受けるバージョン
本脆弱性の影響を受けるバージョンは以下の通りです。
| 対象ソフトウェア | 影響を受けるバージョン |
|---|---|
| zlib ジェム | 3.2.2 以下のすべてのバージョン |
推奨される対策
脆弱性を修正するためには、 zlib ジェムを最新バージョン、またはお使いのRubyシリーズに対応した修正済みバージョンへアップデートすることが推奨されます。
ジェムのアップデート方法
もっとも確実な方法は、 zlib ジェムを バージョン 3.2.3 以降 に更新することです。
以下のコマンドを実行することで、環境内のジェムをアップデートできます。
# zlibジェムを最新バージョンに更新します
gem update zlib
プロジェクトで Bundler を使用している場合は、 Gemfile の記述を確認し、以下の通りバージョンを指定した上で bundle update zlib を実行してください。
# Gemfile
# zlibを3.2.3以降に固定します
gem "zlib", ">= 3.2.3"
Rubyのバージョンに応じた個別対応
古いRubyシリーズに同梱されているバージョンとの互換性を維持する必要がある環境では、以下のバージョンへのアップデートを検討してください。
- Ruby 3.2 を利用している場合: zlib 3.0.1 へのアップデート
- Ruby 3.3 を利用している場合: zlib 3.1.2 へのアップデート
まとめ
今回の脆弱性 CVE-2026-27820 は、データの展開処理という基本的な機能に関わるものです。
特に外部から提供されたGzip形式のファイルを解凍・読み込みするようなアプリケーションにおいては、攻撃の影響を受ける可能性を否定できません。
システムの安全性を確保するために、まずは現在の環境で使用されている zlib ジェムのバージョンを確認し、速やかに修正済みバージョンへの移行作業を進めてください。
ライブラリの更新は、セキュリティリスクを最小限に抑えるための最も基本的かつ重要な対策となります。
