Mutt および NeoMutt におけるコマンドインジェクションの脆弱性が明らかになりました

2018年10月5日にMutt および NeoMutt におけるコマンドインジェクションの脆弱性が明らかになりました。

【参考】Mutt および NeoMutt におけるコマンドインジェクションの脆弱性

https://jvndb.jvn.jp/ja/contents/2018/JVNDB-2018-008047.html

CVSS v3による深刻度が9.8と高い数値であり深刻度の高い脆弱性であることを示しています。リンク先に影響のあるシステム等の情報が公開されています。該当者の方は速やかに修正パッチを適応するなどの処置を行いましょう。

 

テキストベースの電子メールクライアントMutt

Muttという単語をご存じでしょうか。Muttとは「マット」と読み、テキストベースの電子メールクライアントです。主にUNIX系のOSで使われているソフトウェアです。

UNIXというOSの文化は、昔からテキストベースやコマンドラインによる操作を重視している傾向が強く、何でもキーボード+コマンドで操作できるようになっています。キーボード操作を要求するソフトウェアは非常に多いのですが、ちょっとした操作でもコマンドでやる必要があり、コマンドを覚えないと終了の仕方すらわからない、というソフトウェアもいくつもあります。一度覚えてしまったら、GUIのメールソフトより素早く快適に使えるようになるのでしょうけどね。なかなかその領域に達するのは難しいという方が多いと思います。

Muttのスローガンに「All mail clients suck. This one just sucks less (あらゆるメールクライアントはクソだが、こいつのクソ度はちょっとだけマシ)」というものがあります。いわゆるコンピュータに強いハッカーはこういった文字遊びが好きな傾向がありますね。

 

コマンドインジェクションの脆弱性とは

今回のMuttで明らかになった脆弱性はコマンドインジェクションと呼ばれるものでした。コマンドインジェクションはOSコマンドインジェクションとも呼ばれます。Webアプリケーションの分野でも発生する脆弱性の一つです。

脆弱性のあるプログラムに対して、ユーザーが外部から文字列や数値などのデータを入力するときに、正常なデータではなく、OSに対する命令文を不正に実行させる脆弱性がOSコマンドインジェクションの脆弱性です。この脆弱性を悪用することで、プログラムが本来想定していない、OSそのものに対するコマンドが実行されてしまいます。

想定される被害は脆弱性の発生原因によりますが、

・データが改ざんされる

・サーバーがリモートでコントロールされてしまう

・パスワードファイルや個人情報などが外部に漏洩する

など様々な悪影響が考えられます。コマンドインジェクションの脆弱性は、発生してしまったら甚大な被害をもたらす可能性がありますが、脆弱性というよりもプログラムのバグに近い性質があり、しっかり対策することで防ぐことができる脆弱性です。

 

OSコマンドインジェクションを防ぐための対策方法を2つ紹介します。

1.OSコマンドを実行する処理を利用しない

プログラムを開発する際に、シェルコマンドを直接利用するようなコードを記述しないことが重要です。PHPでいうところのexec()やsystem()といった関数を利用しないことです。

2.OSコマンドを呼び出す時は、予め決められたコマンドのみを許可し引数もチェックする

どうしてもプログラムからOSコマンドを使う必要がある場合には、許可する処理を予め想定しておく必要があります。コマンドの種類だけでなく、コマンドに渡す引数を厳密にチェックして、適切な処理である場合に限り実行を許可するように実装することが重要です。

 

まとめ

OSコマンドインジェクションの対策として2つの方法を紹介しました。特にWebアプリケーションで発生するケースではWAF(ウェブアプリケーションファイアーウォール)を導入して対策する方法も普及しています。他のサイバー攻撃と比べて、OSコマンドインジェクションはあまり知られていない攻撃の一つです。しかし、もし対策をしないままでいると、想定外の被害が発生する可能性があります。外部からコマンドを受け付ける必要のあるアプリケーションを開発する際には、コマンドの種類や引数のチェックを重点的に行う必要があるでしょう。

 

(Photo by Sara Kurfeß on Unsplash

レオンテクノロジーは現在、一緒に働く仲間を募集しております!
興味がある方はこちらから!

セキュリティに関するご相談はこちらから!

こんな記事も読まれています