Shikata Ga Nai

Private? There is no such things.

Leveraging Template injection to takeover an accountを訳してみた

Hello there, ('ω')ノ

 

テンプレートインジェクションを活用してアカウントを乗っ取りを。

 

脆弱性:

 CSTI

 XSS

 

記事:

 https://infosecwriteups.com/leveraging-template-injection-to-takeover-an-account-1dba7c4ae315

 

これは、テンプレートインジェクションのバグに関するもので。

私はアプリケーションを閲覧して、何をするのかを理解しようとしていて。

アカウント設定ページにアクセスして。

設定ページをテストする際に確認する必要のある通常の事項を探したものの。

何も見つからなかったので次の機能に進むことに。

 

次にアプリケーションの他の機能を調べていると興味深い機能を見つけて。

これにより、ユーザはページにアクセスする視聴者向けに。

カスタマイズされたメッセージを書くことができて。

これは、カスタマイズされたメッセージのあるブログ投稿のようなもので。

これの興味深い部分は。

ユーザがユーザオブジェクトの特定のプロパティにアクセスして。

カスタマイズされたメッセージを作成できることで。

さらにはユーザが一部のプロパティのデフォルト値を設定できたりと。

たとえば、ユーザが視聴者ごとに。

カスタマイズされたメッセージで始まる投稿を書きたい場合だと。

下記のようにできて。

  Hi user.name,

 XXXX

 XXXX

 

Akashというユーザがこのページにアクセスすると、下記のように表示されて。

 Hi Akash, ⇦ user.name

 XXXX

 XXXX

 

アプリケーションでさまざまな権限を持つユーザに。

さまざまなメッセージを表示するために使用できるプロパティはたくさんあって。

下記のような挨拶で始まるブログ投稿を作成して。

 Hi user.name,

 XXXX

 XXXX

 

すると私のアカウントで上記のページにアクセスすると下記のように表示されて。

 Hi 9


設定ページでバグをテストしているときに、自分の名前を{{3 * 3}}と入力したところ。

結果、9を表示して。

これは、クライアント側のテンプレートインジェクション(CSTI)攻撃に対して。

脆弱であることを意味して。

 

アプリケーションはAngularJSを使用していて。

アカウント設定ページの名前フィールドに。

ユーザが送信した入力(式)がこのブログページで評価されていて。

 

この振る舞いを悪用する方法を考えていて、IDORを探し始めて。

これにより、攻撃者がユーザの名前を変更して。

それをペイロードに置き換えて、攻撃者が制御するサーバに。

ユーザのセッションCookieを送信したり。

アカウントの電子メールをプログラムで変更して。

アカウントを乗っ取ったりする可能性があるものの。

残念ながら、IDORを見つけることができず。

 

しかし、はじめにアプリケーションがユーザに。

いくつかのプロパティのデフォルト値の設定を許可することを覚えていて。

攻撃者は、変数のデフォルト値をCSTIペイロードに設定して。

この動作を悪用する可能性があるので。

下記のAngularJS CSTIペイロードをredacted_propertyのデフォルト値として設定して。

 {{a=toString().constructor.prototype;a.charAt=a.trim;$eval(‘a,alert(1),a’)}}

 

ブログでこのredacted_propertyを使用して。

 Hi user.name,

 user.redacted_property

 XXXX

 XXXX

 

このページにアクセスすると、XSS PoCと同じようにポップアップが表示されて。

 

f:id:ThisIsOne:20210730171905p:plain

 

攻撃者は、アラートをポップする代わりに、これを悪用して。

ユーザのセッションCookieを盗んだり。

メールアドレスを変更してアカウントを乗っ取ったりする可能性があって。

 

Best regards, (^^ゞ