Redis のブロッキングリスト走査がヒープの解放後使用を発火させ、リモートコード実行に至る
本脆弱性はブロックされたクライアントを起こす下層の処理に存在します。複数のクライアントが同一のキーを待ってブロック状態に入ったとき、サーバーはブロックリストを走査してクライアントの命令実行を順に再開します。この過程でメモリ退避の機構が発火すると、後続クライアントの接続資源が強制的に解放される一方、走査子は解放済みのリストノードへの参照を保持したままとなり、ヒープの解放後使用の欠陥が生じます。攻撃者は特製のブロッキング操作命令とメモリ閾値の設定を組み合わせてネットワーク経由で競合状態を作り出し、認証なしにこのメモリ破壊を利用してプログラムの制御フローを乗っ取れます。影響を受けたシステムは任意コードの実行とプロセスの終了という危険に晒され、業務の継続性が著しく損なわれます。
- スマートポインタや参照計数の機構によって動的メモリの生存期間を自動的に管理することを推奨します。コンテナ構造を走査する際にはスナップショットの複製または遅延させた安全な削除の方策を用いて走査子の無効化を避け、あわせてオブジェクトの状態標識を厳格に検証し、アクセス前に空ポインタと有効性の表明を行い、静的解析ツールでポインタの参照解決の経路を定期的に見直して、宙に浮いた参照の芽を摘んでください。
