MTディレクトリ配下のCGIは、どれを削除しても問題ないか
公開日 : 2021-12-10 20:30:00
過去に(といっても、もう7年くらい経過してる)こんなのを何度か書いていますが、まぁ、当時は立場もあったけど、何かあったから書いてたわけで、MTの脆弱性が止まりません。
- 大事なことなのでもう一度。MTを最新版にできない場合、とりあえずmt-upgrade.cgiを削除する。 アイコン別ウィンドウで開きます
- MTを最新版にできない場合、とりあえずmt-upgrade.cgiを削除しよう。 アイコン別ウィンドウで開きます
セキュアに運用するためには、最新版の利用が必須とかアナウンスしてるから、とか、まぁ言い分は色々あるものの、製品サイトに燦然と輝く「高いセキュリティで安心」アイコン別ウィンドウで開きますを真に受けてる人はどれだけいるのか。
MTディレクトリ配下のCGIスクリプトの脆弱性はこれまでにも度々指摘されてきました。mt-xmlrpc.cgiのOSコマンドインジェクションの件では、PowerCMS をご利用のお客様にご迷惑をおかけしております。この場を借りてお詫び申し上げます。Twitterなどで、JPCERTでの PowerCMS の本脆弱性についてのアナウンスがなぜ1ヶ月遅れてアナウンスされているのかという疑問の声を見かけましたので、経緯をご報告します。
- 10月19日 (夜) : シックスアパートのサイトに掲載
- 10月20日 : JPCERT に Movable Type の脆弱性が掲載
- 10月21日 : PowerCMS に脆弱性がリスクがあることを告知 (暫定対処を告知)
- 10月22日 : PowerCMS の脆弱性対策をリリース、告知
- 11月16日 : JPCERT からの連絡
- 11月24日 : JPCERT に PowerCMS の脆弱性が掲載
MTの脆弱性リリースから中2日、JPCERTの公表から中1日です。
JPCERTから連絡が来たのは 11月16日ですが、その時点では私どもの対応は完了しています。ですので、その段階で「JPCERT経由ではアナウンスしない」という選択肢もありました。ただ、影響が相当大きいであろうこと、攻撃の報告が上がっていたことなどもあり、広くアナウンスするという意味で、JPCERT経由でも公表することとした、ということとなります。
ちなみに、弊社はシックス・アパートの Pronet登録企業(パートナー)ですが、先んじて連絡が来たり、公表されている以上の連絡が別途来たりはしません。
また、「その段階で「JPCERT経由ではアナウンスしない」という選択肢もありました。」と書きましたが、メーカーが独自に見つけた脆弱性、対応済みのものについては、公表する必要は原則ありません。ただ、影響の大きさを鑑みて我々は今回JPCERT経由で公表しました。
ただ、公表しないメーカーが存在するのも事実ですので、深刻で影響度の高そうな脆弱性については多少面倒でもJPCERT コーディネーションセンター経由で報告するのが良いように思います。なぜなら、公表せずに、機能を廃止したことでなかったことに、みたいなケースがあるからです。
では、本題です。今回のmt-xmlrpc.cgiの件ですが、パッチを当てるか、削除するか(実行権限をなくす)の判断についてです。セキュリティ対策ガイドのドキュメントには
XMLRPC を利用して記事やウェブページの投稿をしていない
mt-xmlrpc.cgi の実行権限を無くす
とありますが、わかんないですよね。XMLRPCが何か、がわからないわけです。「実行権限」だってわからないお客様もいると思われます。
と、いうことで、各CGIの説明と、削除できるかどうかについてです。
mt-config.cgi
環境変数の設定を記述するファイルです。削除できません。
mt.cgi
CMS管理画面本体です。CMSへログインして利用する場合、削除できません。
(Data APIだけ使う、みたいな特殊なケースを除き)
mt-tb.cgi
トラックバックを受け付けるCGIです。トラックバックって何? という方は削除できます。削除しましょう。
mt-search.cgi
ブログ内記事検索を使っていない、Google検索や外部サービス、PowerCMSの エンタープライズ検索を利用しているのであれば削除して構いません。
mt-ftsearch.cgi
MySQLのFULLTEXTインデックスを利用した記事の検索機能を提供します。
使っている人を私は見たことがありません。削除して構いません。
mt-cdsearch.cgi
MT7のコンテンツデータの検索に利用するCGIです。PowerCMSにはありません。
mt-atom.cgi / mt-xmlrpc.cgi
今は JSONベースでデータのやり取りを行うのが一般的ですが、10数年前は XMLでデータのやり取りを行うのが主流でした。
Atom Publishing ProtocolやXML-RPCという仕様に沿って記事の投稿などを行うための CGIです。
外部エディタを使わずに管理画面から記事を投稿している場合、削除して構いません。
外部エディタとは、以下のようなものです。
- MarsEdit
- Open Live Writer
稀に質問があるのが、「定期実行タスクを使っているので mt-xmlrpc.cgi を削除できません」、というお問い合わせです。mt-xmlrpc.cgi で定期実行タスクを実行できるって知っていましたか?
拡張された XML-RPC API 経由を利用することで、任意のタイミングでスケジュールタスクを実行できます。
知らない? ですよね。削除しましょう。
独自に外部システムとの連携などを実装している場合は必要であるケースが稀にあるかもしれませんが、そこは管理者に確認してください。
管理者がいない、放置されていて、更新も管理画面から時々行うのみ? 削除で問題ないです。
mt-data-api.cgi
DataAPIを利用する時に必要な CGIです。
MT5以前のシステムから構築内容を変更せずにアップグレードしたためだけにこのファイルが存在している場合は、削除して構いません。
mt-testbg.cgi
プロセスをフォークして体感速度を高速化する「LaunchBackgroundTasks」という環境変数があって、これが使えるかどうかをチェックするものです。
PSGIやFastCGIでは使えません。
無条件に削除して構いません。
mt-comments.cgi
コメント機能を利用している場合、ログイン、確認画面、投稿を処理するCGIです。
コメント機能を利用していない場合、削除して構いません。
mt-wizard.cgi
インストール時に、インストールウィザードを利用する場合にのみ使われます。
インストール後は無条件に削除して構いません。
mt-upgrade.cgi
インストール時、スキーマアップグレード時に利用します。
プラグインの追加や本体のアップグレードの時に必要になります。
プラグインをアップグレードしたり追加しないのであれば、本体のアップグレード時に都度アップすればよく、その場合は削除しても構いません。
mt-feed.cgi
ログフィードという機能がありましたが、これは、cronなどの定期実行タスクをサーバーで設定できないとき、その昔流行っていたRSSリーダーにURLを登録しておくと定期的にRSSを取得していく性質を利用して定期実行タスクを実行させる、という目的のためにあるCGIです。言い切ってしまえば、cron設定ができない人に、指定日時公開を使わせるための機能です。
削除して問題ありません(たぶん)。
mt-check.cgi
必要なPerlモジュールなど、インストールに必要な環境が揃っているかをチェックするCGIです。
インストール後は無条件に削除して構いません。
PowerCMSに同梱されているもの
mt-contactform.cgi
PowerCMSのフォームの確認画面、投稿に必要なCGIです。フォーム機能を利用していない場合、削除して構いません。
mt-members.cgi
PowerCMSのフォームの会員サイトを利用しているとき、ログイン、ログアウト、サインアップ、パスワードリセットなどに利用するCGIです。会員サイトの機能を利用していない場合、削除して構いません。
mt-banner.cgi
PowerCMSのバナーのクリックをカウントするCGIです。バナーのクリックカウントを利用していない場合、Google Analyticsなどで効果測定を行っている場合、削除して構いません。
mt-estraier.cgi
PowerCMSのエンタープライズ検索を行うCGIです。利用していない場合、削除して構いません。
※ サーバーで、which estcmd; を実行して、コマンドが見つからなければ、無条件に削除で問題ありません。
廃止されたもの (削除してください)
mt-add-notify.cgi
以前、記事の共有機能で共有するメールアドレスを外部から登録できるようになっていました。
その時に利用するCGIです。
このスクリプトにはXSS(クロスサイト・スクリプティング)脆弱性がありました。脆弱性は公表されませんでした。
脆弱性の報告後のリリースで、シックス・アパートは脆弱性の公表ではなく、このスクリプトを廃止しました。
削除して構いません。削除しましょう。
※XSS脆弱性を見つけたのは俺で、報告したのは俺です。発表はされませんでした。この脆弱性は発表されずに機能が廃止されました。
mt-cp.cgi
コミュニティ機能でのログイン、記事投稿などに利用します。コミュニティ掲示板機能を利用していなければ、削除して構いません。
※ ほぼ、削除で問題ないです。
mt-view.cgi
PHPのダイナミック・パブリッシングではなく、Perl CGIによるダイナミック・パブリッシングを行うCGIです。
元々アンドキュメントなものでありましたが、これも廃止されています。ただちに削除してください。
ちょっと昔のことで記憶が曖昧ですが、MTOSか何かのメーリングリストで話題になっていたのは、
テンプレートに PHPコードを書く人が結構いて、こんなコードを書いていると、
そのテンプレートが Perlによってビルドされた時に見えてしまうので、よろしくない、と。
<?php
define("user_id", 'your user id');
define("user_password", 'your user password');
同様の問題は、mt-search.cgiなどの動的ビルドする CGIにもあって、こちらは廃止されずに対策を行い、互換性のために以下の環境変数などが追加されています。
SearchAlwaysAllowTemplateID
Movable Type 4.31 以降、mt-search.cgi の検索結果テンプレートとして、templateid クエリパラメータで指定されたテンプレートに、セキュリティ上の配慮から以下のような制限が掛けられています。この環境変数を 1 にすると、常に template_id で指定されたテンプレートを、検索結果テンプレートとして利用することができます。
MT7では、ContentDataSearchAlwaysAllowTemplateID とのことですが、上記のページのリンクが切れているので、確認できませんでした。