問題
Description
Most web application developers use third party components without testing their security. Some of the past affected companies are:
Equifax (a US credit bureau organization) - breach due to unpatched Apache Struts web framework CVE-2017-5638
Mossack Fonesca (Panama Papers law firm) breach - unpatched version of Drupal CMS used
VerticalScope (internet media company) - outdated version of vBulletin forum software used
Can you identify the components and exploit the vulnerable one?
Additional details will be available after launching your challenge instance.
サードパーティ制のコンポーネントには脆弱性がある場合があるから気をつけようね的なことが書いてあります。何かしらライブラリ等の脆弱性をつくのでしょうか
解答
早速書いてあるtestとTest123!でログインしてみます
ログアウトボタンがあるのみで、特になにもないです。
いつものごとくプロキシツール等で通信をみると、/authでのPOSTでレスポンスとしてSet-Cookie:token=にトークンが帰ってきています。/privateのリクエストをみてもこれが使われていることがわかります。
以下のサイトでデコードしてみます
"role": "user"をadminに書き換えることができたら良さそうですが、署名されているためこのままでは書き換えることができません。
サーバー側のスクリプトもなければ鍵もなく、署名アルゴリズムも比較的安全なので正面突破は難しそうです
しかし他に怪しいところもないので、脆弱性やテクニックを探します。
するとjwtにアルゴリズムをnoneにする攻撃があることを発見
まさしくこれですね。algをnoneに書き換えます。
これでHSAの署名を掻い潜り、好き勝手にjwtトークンを書き換えることができます。
先程のサイトでデコードからエンコードに切り替えて、algとroleを書き換えてエンコードします。
そして得られたトークンを使ってcurlやプロキシツールをつかってリクエストを送るとflagを入手できました