
Node.js および Java アプリケーションにおける各種脆弱性を悪用するためのステップバイステップのワークショップ
このステップバイステップのワークショップでは、Node.js および Java アプリケーション内の脆弱性のあるパッケージに存在する、さまざまな実際の脆弱性を悪用する方法を学びます。
このワークショップは、次の 2 つの方法で行うことができます。
または
このワークショップでは、意図的に脆弱性のあるアプリケーションをいくつかインストールして悪用する手順を説明します。これらのアプリケーションは、既知の脆弱性を持つ実際のパッケージを使用します。脆弱性には次のものがあります。
これらの脆弱性は多くのアプリケーションに存在しますが、そのほとんどはローカルまたはクラウドインスタンスにインストールする必要があります。以下の手順ではローカルインストールについて説明しますが、リモートのクラウドインスタンスでも試していただいて構いません。
このワークショップの脆弱性の各セクションでは、脆弱性とそれが存在するパッケージに関する情報が提供されます。最初はヒントを読まずに、試行錯誤でアプリケーションをハッキングしてみることをお勧めします。どのようにアプリケーションのサニタイズをごまかせるか考え、ハッカーの思考を取り入れてみてください。行き詰まったときのためにヒントが用意されているので、助けが必要なときに順番に読んでください。ヒントなしでハッキングを完了できれば素晴らしいです。ただし、後でヒントを読んで、私たちと同じ方法で侵入したか確認するのも良いでしょう。さらに、そこから学ぶべき小さなヒントもあるかもしれません。
選択に応じて、適切なインストールマニュアルを選んでください。
お好みのブラウザで http://localhost:3001 にアクセスすると、次のページが表示されます。

少し時間を取ってサイトを触ってみてください。特に、通常のテキスト「Buy Milk」やマークダウン「Buy **lots** of milk」を使用していくつかの todo 項目を作成してみてください。また、ホームページ下部にある簡素な about ページにも移動してください。この about ページを作成するために使われた CSS-foo に感動してください。注意: このページを見栄え良くする PR はマージされません ;o)

まずは、ブルー(防御)側から見てみましょう。 goof アプリケーションを自分の GitHub アカウントにフォークしてください。アプリケーションは GitHub の https://github.com/snyk/goof にあります。 アプリケーション内に存在する直接的および間接的な依存関係、および各ライブラリの脆弱性を把握するために、アプリケーションをスキャンする必要があります。これを行うには、https://snyk.io にアクセスし、サイト右上の「Sign up」または「Log in」(すでにユーザーの場合)をクリックします。

「Log in with your GitHub」ボタンをクリックします。

次に、先ほどクローンした goof プロジェクトをインポートします。GitHub リポジトリリストから goof を選択し、ウィンドウ右上の「Import Projects」ボタンをクリックします。

プロジェクトがスキャンされると、ダッシュボードに表示されます。

package.json リンクをクリックしてプロジェクトページを表示します。これにはセキュリティ脆弱性の完全なリストが含まれています。

「Issues」および「Dependencies」タブをクリックすると、脆弱性とその修復に関する詳細情報、およびそれらがアプリケーションによってどこで導入されているかを確認できます。脆弱性リストの下部に、st パッケージのディレクトリトラバーサル脆弱性があることに気づくでしょう。これについて詳しく見ていきましょう。

ディレクトリトラバーサル攻撃(パストラバーサルとも呼ばれます)は、意図されたフォルダの外部にあるファイルやディレクトリにアクセスすることを目的としています。「ドットドットスラッシュ」(../)シーケンスやそのバリエーション、または絶対ファイルパスを使用してファイルを操作することにより、ファイルシステム上の任意のファイルやディレクトリ(アプリケーションのソースコード、設定、その他の重要なシステムファイルを含む)にアクセスできる可能性があります。
ディレクトリトラバーサル 脆弱性は、一般的に2つのタイプに分類できます。
goof アプリケーション内で悪用するディレクトリトラバーサル脆弱性を含むパッケージは、st パッケージです。st のドキュメントを参照して、ライブラリについてよく理解してください。
これでディレクトリトラバーサルとは何か、st パッケージが何をするのかがわかりました。アプリケーションをハッキングしてみてください — これでレッドチームに戻りました!アプリケーション内で st パッケージが使用されている場所を探し、アクセスを許可されるべきでないディレクトリにトラバースしてみてください。
行き詰まった場合のヒントを以下に示します。自分で試した後にのみ参照するように最善を尽くしてください。
クリックして ヒント 1 を表示。
クリックして ヒント 2 を表示。
クリックして ヒント 3 を表示。
クリックして ヒント 4 を表示。
クリックして ヒント 5 を表示。
クリックして ヒント 6 を表示。
クリックして ヒント 7 を表示。
クリックして ヒント 8 を表示。
クリックして ヒント 9 を表示。
攻撃者のようにファイルシステムを探索し、機械上で攻撃者に見られたくないと思われる機密情報を3つ見つけてください。
クリックして ヒント 10 を表示。
脆弱性の説明(CVSS スコアを含む)を確認してください: https://snyk.io/vuln/npm:st:20140206。なぜこの脆弱性が高重要度ではなく中重要度だと思いますか?
snyk のプロジェクトページに戻り、st パッケージのディレクトリトラバーサル脆弱性を見つけ、修復のアドバイスを確認してください。この脆弱性へのアプリケーション内のパスは1つだけで、st パッケージは直接依存関係であるため、修復はそれほど難しくないことがわかります。st パッケージのバージョンを 0.2.5 に更新する必要があります。これは、「Fix this vulnerability」ボタンをクリックすることで自動的に行えます。

脆弱性のリストが表示され、st の脆弱性のみが選択されているはずです。ページ下部までスクロールし、「Open a fix PR」をクリックします。

「Files Changed」タブでプルリクエストのコード変更を確認してください。

新しい PR テストで新たなセキュリティやライセンスの問題が導入されていないこと、およびテストが合格していることを確認してください。これらは PR の「Conversation」タブにあります。

PR に満足したら、変更をマージしてください。
アプリケーションをローカルで実行している場合は、npm start を実行したウィンドウで Ctrl+C を押して停止します。git fetch を実行して GitHub から最新のコードを取得します。npm install を実行して新しいバージョンの st をダウンロードし、その後 npm start を使用してアプリケーションを再起動します。
再度ハッキングを試してください。おめでとうございます! 脆弱性を修復しました。公開フォルダから脱出しようとするたびに、ホームページにリダイレクトされるようになります。
Snyk スキャンで ReDoS 脆弱性の説明を確認してください。

ms パッケージのこの脆弱性が、goof アプリケーションで悪用するものです。以下のコマンドを使用して、時間の文字列表現を含む todo 項目を追加します。``` $ echo 'content=Call mom in 20 minutes' | http --form http://localhost:3001/create -v
msライブラリが、入力されたコンテンツ文字列内の時間パターンにマッチしました。これは、goofのウェブページ上では少し異なる形で表現されます。

ReDoSの仕組みに関する知識を活用して、顕著な遅延や他のユーザーに対するサービス拒否を引き起こすコンテンツ文字列を渡してみてください。リクエストが処理されている間、ウェブページは最初のリクエストが処理されるまで、それ以降のリクエストをバッファリングすることに注意してください。
Click to see [Hint 1](https://github.com/snyk-labs/exploit-workshop/blob/main/ms/hint1.md).
Click to see [Hint 2](https://github.com/snyk-labs/exploit-workshop/blob/main/ms/hint2.md).
Click to see [Hint 3](https://github.com/snyk-labs/exploit-workshop/blob/main/ms/hint3.md).
Click to see [Hint 4](https://github.com/snyk-labs/exploit-workshop/blob/main/ms/hint4.md).