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,

 XXXX

 XXXX

 

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

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

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

 Hi user.name,

 XXXX

 XXXX

 

式{{3*3}}を入力すると、Hi 9と表示されて。

これは、アプリケーションがクライアント側の。

テンプレートインジェクション(CSTI)攻撃に対して脆弱であることを意味して。

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

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

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

 

アプリケーションでは、ユーザが一部のプロパティにデフォルト値を設定できるので。

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

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

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

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

 

https://github.com/tijme/angularjs-csti-scanner/blob/master/acstis/Payloads.py

 

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

 Hi user.name,

 user.redacted_property

 XXXX

 XXXX

 

このページにアクセスすると、従来のXSS PoCと同じように。

アラートポップアップが表示されて。

 

 

攻撃者は、アラートをポップする代わりに。

これを悪用してユーザのセッションCookieを盗んだり。

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

 

Best regards, (^^ゞ