あなたを残すセキュリティ

ニューヨークのブルックリンで開催されたメッセージング、マルウェア、およびモバイルの不正使用防止ワーキンググループ(m3aawg.org)の会議に出席しました。 天気が良くて、街中をさまよい、会議を楽しんで、その地域の幅広い食べ物を期待した。 空が澄んでいることを確信していたので、雨からも何も奪いませんでした。 そして一週間雨が降りました。 このため、ホテルの部屋に無料のWiFiと仕事用のラップトップが必要になりました。 Node.jsと関連パッケージ( https://www.npmjs.comで入手可能)の調査にこの時間を費やすことにしました。







プロジェクトには、ダウンロードおよびインストールに利用できるユーザーからの何千ものパッケージがあります。 NPMでファイル、バックアップ、ダウンロード、アップロードなどの一般的なパッケージ名を検索しました。 最後の検索では、BlueimpからjQuery file uploadというプロジェクトが表示されました。 彼の説明は、ダウンロードして探索するのに十分興味深いように見えました。







jQueryのファイルアップロードウィジェット。複数のファイル選択、ドラッグアンドドロップ、進行状況インジケーター、画像、オーディオ、ビデオの検証とプレビューをサポートしています。 これは、クロスドメインリクエストをサポートします。これは、クライアント側で画像のサイズを変更してファイルをダウンロードするための部分的で回転するメカニズムです。 これは、HTMLフォームを介した標準のファイルアップロードをサポートする任意のサーバープラットフォーム(PHP、Python、Ruby on Rails、Java、Node.js、Goなど)で動作します。

パッケージのソースコードを調べ始め、server / phpディレクトリ内のいくつかのPHPファイルに注目しました。 ファイルはupload.phpおよびUploadHandler.phpと呼ばれていました。 uploadHandler.phpという名前のupload.phpには、メインファイルのアップロードコードがあります。 また、ファイルがWebサーバーのルートのfiles /ディレクトリにアップロードされたことにも気付きました。 curlとプリミティブPHPスクリプトを使用して簡単なコマンドを作成し、ファイルをサーバーにアップロードし、それを使用してサーバーでコマンドを実行できることを確認しました。







$ curl -F "files=@shell.php" http://example.com/jQuery-File-Upload-9.22.0/server/php/index.php
      
      





shell.phpファイルには次が含まれます。







 <?php $cmd=$_GET['cmd']; system($cmd);?>
      
      





テストサーバーのパラメーターcmd = idを使用してブラウザーでページを開くと、サーバープロセスの起動元のユーザーのidが返されました。 この脆弱性が気付かれることはないと想定し、このコードまたはその派生物を使用した他のプロジェクトが脆弱であることが判明したことを簡単なGoogle検索で確認しました。 同様のソフトウェアパッケージを攻撃する方法を示すビデオもいくつかありました。







jQuery File Uploadの作成者に通知し、CVE番号を割り当てるために見つけたものの文書化を開始しました。 翌日、テスト環境で脆弱性を再現できなかったので、少し恥ずかしい著者が私に答えて、さらなる情報を求めました。







電子メールでテスト構成を比較した結果、バージョン2.3.9以降、Apache開発者は.htaccessファイルのサポートをオフにしていることがわかりました。 これはパフォーマンスを改善するために行われたことが判明しているため、サーバーは対応するディレクトリにアクセスするたびにこのファイルをチェックする必要がありません。 さらに、この変更は、ユーザーがサーバーで構成されたセキュリティ設定上書きできないようにするためにも行われました。







したがって、Apacheは.htaccessを無効にする際に善意を持っていましたが、特に.htaccessで行われたセキュリティ設定を当てにしている場合、一部の開発者とプロジェクトも危険にさらされます。







このライブラリの場合、この状況を適切に処理し、CVE-2018-9206ファイルアップロードの脆弱性を修正するために、開発者はコードを変更して、画像ファイルのみをダウンロードできるようにしました。







この問題は複数のプロジェクトです。



また、Apacheの変更により、残り7,800個のプロジェクトの一部がファイルアップロードの問題に対して脆弱である可能性があることにも注意してください。













これらのフォークのほとんどは、コード内に元の脆弱性を保持しています。 場合によっては、開発者がBlueimpの元のコードを編集して自分のプロジェクトに組み込んだ後でも脆弱性が残っているため、プロジェクトは私の攻撃例に対してわずかなバリエーションがあります。







これは、これらのプロジェクトのいずれかが実稼働で使用されている場合、その後の実行でファイルをダウンロードする脆弱性にさらされることを意味します。 アプリケーションからデータを盗み出し、マルウェアを注入し、損害を与え、損害を与えるその他の機会を切り開きます。







残念ながら、元のjQuery File Uploadからフォークされたプロジェクトの数が正確にまだサポートされており、メインプロジェクトで行われた変更を適用する方法を正確に決定する方法はありません。 フォークされたプロジェクトが本番環境で使用されている場合、それを正確に特定することもできません。 さらに、プロジェクトの古いバージョンも、2010年までのファイルのダウンロードに関する問題に対して脆弱でした。







おわりに



インターネットは、システム、データ、およびトランザクションを安全に保つために多くのセキュリティメカニズムに依存しています。 これらのメカニズムの1つが突然消えると、それに依存しているユーザーと開発者の安全性が損なわれる可能性があります。







開発者がプロ​​ジェクトのベースとなるシステムとライブラリの変更を確認することをお勧めします。 この記事では、Apacheが削除したセキュリティメカニズムは、BlueimpのJqueryファイルのアップロードだけでなく、そのフォークとブランチのすべてに影響を与えました。 この脆弱性は、スタンドアロンWebアプリケーションからWordPressや他のCMSのプラグインに至るまで、それに依存する多くのプロジェクトに影響を及ぼしました。










All Articles