最新の Redis 脆弱性が浮き彫りにする、さらに大きな問題

この記事を読む前に Redis と Valkey のクラスターにパスワードを設定してください。そして、次に eval() を呼ぶ前に、その必要性を見直しましょう。

Khawaja Shams headshot Khawaja Shams Allen Helton Allen Helton
雲の中の南京錠を大きな鍵で開けるリス

深刻な Redis の脆弱性 CVE-2025-49844 が話題になっています。解放済みメモリの使用(use-after-free)により、認証済みの攻撃者が Lua サンドボックスを脱出し、リモートコード実行を行える問題です。公表以来、私たちにも問い合わせが届いています。Redis から Valkey に移行していても影響を受けます。

この脆弱性により、攻撃者は Lua スクリプトの実行範囲を抜け出し、ホストの制御を維持できます。プロセスが root で動いている場合には、マシンの root 権限を得て、さらに大きな被害を与える可能性もあります。データの削除、破損や上書き、身代金を要求するための暗号化などが考えられます。非常に恐ろしく、深刻な問題です。

良い知らせと悪い知らせがあります。良い知らせは、ソースコードに 13 年前から存在するこのバグが、通常はインターネットへ直接露出していないことです。キャッシュの前段には一般に Web サーバーがあり、多くの環境は VPC 内に置かれています。インターネット上の不特定の人が Lua スクリプトを注入して悪用することはできません。通常、キャッシュノードにアクセスして Lua スクリプトを実行できる人は、すでにネットワーク内にいます。それでも、内部脅威による権限昇格のリスクはあります。

悪い知らせは、私たちの経験では、VPC 内の環境に認証を設定していない顧客をしばしば見かけることです。VPC の保護が、誤った安心感を生んでいます。さらに大きなセキュリティリスクは、VPC 内の人やマイクロサービスが、この脆弱性を使わずとも大半の被害を与えられることです。その構成で運用しているなら、このバグはより大きな問題への警告にすぎません。

パッチを適用した後でも(ぜひ早急に適用してください)、ネットワーク内の人やシステムは Redis / Valkey に接続し、Lua スクリプトを実行して深刻な被害を与えられます。データを継続的に操作し、消去し、盗み見ることもできます。この CVE は重要です。しかし本質的な弱点は、認証のないキャッシュノードが以前から内部脅威にさらされていたことです。

一つだけ実行するなら、Redis と Valkey のノードにパスワードを設定してください。 今すぐです。

まず、それを行ってください。他はその後です。

Lua について

私は、インフラソフトウェアにスクリプトエンジンを組み込むことに、以前から賛成ではありませんでした。データを管理するのと同じプロセスでユーザーのロジックを実行すると、アプリケーションとシステムの境界が曖昧になるからです。

キャッシュプロセス内に Lua を置いた理由は、もともとは妥当なものでした。原子性、複数コマンド操作の低レイテンシ化、クライアント側の調整なしでの独自ワークフロー構築などです。そして実際に機能しましたが、開発者が使いすぎると問題が起きました。

大規模なキャッシュクラスターを運用したことがあれば、思い当たるでしょう。Lua スクリプトはメインスレッドで停止したり、CPU を占有したり、メモリ上限を超えたりします。監視、安全なデプロイや更新が難しく、デバッグはさらに難しい一方、乱用されやすいものです。結局、重要なデータのすぐ隣で十分に検証されていないコードを動かし、正しく振る舞うことを期待することになります。これは大胆な賭けで、外れればサーバーが停止しかねません。

Redis の Lua がセキュリティ問題を起こしたのは、今回が初めてではありません。CVE-2022-0543 や CVE-2015-4335 でもサンドボックスからの脱出が起きており、新しいパターンではありません。

Lua は Redis に優れた柔軟性を与える一方、攻撃者にもキャッシュ内のスクリプト実行環境を与えました。その境界を越えると、新機能が増えるたびに悪用の可能性も増えます。ただし、無数のキャッシュ障害を見てきた私の経験では、多くの「攻撃者」は、善意で Lua スクリプトを書き、バグを入れてしまった開発者です。

より大きな論点

この脆弱性は、セキュリティが CVE の修正だけではなく、初期設定にも関わることを思い出させます。「問題が起きたらどうなるか」を問い、その現実に備えて設計することが必要です。

Wiz は、インターネットに公開された約 330,000 の Redis インスタンスを発見しました。そのうち少なくとも 60,000 は認証を要求していませんでした。これが本当の問題です。

インスタンスにパッチを適用してください。同時に、脅威モデルも厳しく見直してください。内部ネットワークにアクセスできるのは誰か。入った後に何ができるのかを確認しましょう。

認証、Lua サンドボックス、ゼロデイへの対応といった問題に悩まされ続けることに疲れているなら、それこそが私たちが Momento を現在の形で作った理由です。障害の種類そのものを取り除くことで、信頼性を設計しました。

詳しく話したい方は、ぜひご相談ください。

追伸: キャッシュ環境の保護に支援が必要なら、Khawaja または Allen にご連絡ください。喜んでお手伝いします。

あわせて読みたい