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, (^^ゞ