
Vimは、主にLinuxやUNIX系環境の端末(CUI)上で動作する、高速・高機能なテキストエディタです。
Emacsは、高い拡張性とカスタマイズ性を誇る老舗のテキストエディタです。
どちらも圧倒的な利用者数を誇る高機能テキストエディタです。
これらのテキストエディタにおいて、脆弱性が確認されています。
- VimのRCE
Vimで確認されたのは、リモートコード実行の脆弱性です。
Vimにはmodelineという便利な機能があります。
Vimのmodeline(モードライン)は、ファイルごとの特定のVim設定(インデント、タブ幅など)をファイル内に記述し、開いた時に自動適用する機能です。
ファイル先頭/末尾に# vim: set ts=4 sw=4:のような形式でコメントを埋め込み、プロジェクトやファイル単位でエディタ設定を統一できます。
この機能はVimを使い始めてから期間の短い人でも使っていることの多い機能なのではないでしょうか。
このmodeline機能はとても便利なのですが、この機能において問題があることがわかりました。
この機能のなかのチェック機構が十分ではないことが原因で、ファイルを開くとファイルに埋め込まれたコードが実行されてしまうことになっていたのです。
この問題にはまだCVE番号がアサインされていません。
しかし、Vim 9.2.0271以前のすべてのバージョンに影響する脆弱性です。
細工されたファイルを被害者に送り込むことができる攻撃者は、Vimを実行しているユーザの権限で任意のコマンドを実行できるようになってしまいます。 - EmacsのRCE
Emacsで確認されたのも、リモートコード実行の脆弱性です。
Emacsは、開発者が生活環境として使えるほどにさまざまな機能と連携できるように環境を整えることができます。
そういった連携可能なもののひとつに、gitを使ったバージョン管理統合があります。
この機能はvc-gitという名称です。
vc-gitは、Emacsに標準搭載されたバージョン管理フレームワーク「VC (Version Control)」が、Gitリポジトリを扱うためのバックエンド機能です。
これを利用することで、Emacs内で直接git diffやlog、annotate(注釈)などの主要な操作をキーバインド(C-x v =等)で実行でき、シームレスなバージョン管理が可能になります。
この機能を悪用することができることがわかりました。
ストーリーはこんな感じです。
攻撃者は実行可能スクリプトを指す設定ファイルを含む隠しディレクトリ「.git/」を格納したアーカイブ(例えば、電子メールや共有ドライブ)を作成します。
被害者がそのアーカイブを解凍してテキストファイルを開くと、GNU Emacsのデフォルト設定では、目に見える兆候もなくペイロードが実行されることとなります。
この問題の嫌なところは、この問題がEmacsの問題であるとEmacsのメンテナーが考えていない点にあります。
技術的に考えると、確かにそうも思えます。
git側で対処することがよいものかもしれません。
しかし、実際に問題の発現の道の中にEmacsが存在します。
この問題は、Emacs側ではEmacs側の問題だとは認識されていないため、Emacsとしての対応はなにも提供されていません。
すべてのバージョンのEmacsが脆弱な状態なままなのです。
Emacsは動作のカスタマイズ性が非常に高いものですので、設定でこの危険な状態が発生しないようにすることもできそうではありますが、すべての利用者がそのような設定を速やかに実施できるかは疑問が残ります。
Emacsでもgitでもよいので、早急に対応したものがリリースされることを願います。
これらのお話は、便利機能はいろんな立場の人にとって便利だということの例です。
中身のよくわからないファイルを取り扱う際には十分な注意が必要ということですね。
ちなみに、Vimの脆弱性は、Claudeに脆弱性があるか聞いてみたら出てきたものだそうです。
じゃぁEmacsは大丈夫だよね、と追加で聞いてみると、そっちにもあるよ、と出てきてしまったものだそうです。
びっくりですね。
MAD Bugs: vim vs emacs vs Claude
https://blog.calif.io/p/mad-bugs-vim-vs-emacs-vs-claude
| この記事をシェア |
|---|