パッチ適用に聖域なし

きつい脆弱性が確認されています。
CVE-2021-31440です。
脆弱性のあるバージョンのkernelの動作しているKubernetes環境でeBPFの問題をつくと、コンテナから抜け出して特権で任意のコマンドを実行できる問題です。

eBPFは、カーネルのソースコードを変更したり、カーネルモジュールをロードすることなく、Linuxカーネル内でサンドボックス化されたプログラムを実行できる画期的な技術です。
この機能、意図された使い方ができる分にはとても有効な機能と言えます。
eBPFを使えば、こんな機能が実現できそうです。

  • システムコールを監視することによりセキュリティを高める機能
  • ソケットレベルでのネットワーク監視
  • ネットワークパケットのフィルタリング機能
  • カーネル内のさまざまなメトリクスを収集分析することによるパフォーマンスの監視
  • さまざまなトラブルシュート

諸刃の剣な感じがします。
これらが正しい意図をもって使われる分にはよいのですが、誤った意図で使われると非常に強力なrootkitが実現できます。
ってことで、このCVE-2021-31440は相当まずいものだということが感じられるのではないでしょうか。

通常のアプリケーション開発の現場ではあまりkernelのバージョンを意識することがない、ということもあるでしょう。
そういう開発現場は多いと思います。
しかしその一方で、込み入った実装がされたsystem
callを活用するアプリケーションなどの開発では、kernelバージョンがその動作に大きな影響を及ぼす場合があります。
そのような現場では、ともするとkernelのupdateが実施しにくいということもあるかもしれません。

悪魔がささやきます。
「多くのパッケージはちゃんとupdateしているんだからkernelくらいはそんなに頻繁に更新しなくてもいいんじゃないの。」
こんなふうにして脆弱な環境が生まれてしまうのかもしれません。

今回はCVE-2021-31440の話でしたが、kernelのchangelogを確認すると、びっくりするくらいたくさんのCVE番号が出てきます。
「XXXだからXXXしなくてよい」、ということは、場合によってはあると思います。
でも、「kernelだから時々しかupdateしなくてよい」とはならないようです。

参考記事(外部リンク):CVE-2021-31440: Kubernetes container escape using eBPF
www.tigera.io/blog/cve-2021-31440-kubernetes-container-escape-using-ebpf/