タグ改変によるクライアントサイド検証の回避【CTF】

Webサイトやアプリによってはクライアントサイドで権限コントロールを行っている場合があります。
このようなサイトでは悪意のあるユーザーが意図的に操作する事で検証を回避し不正アクセスが可能になります。
今回はWebページのタグ操作を行う事で実際に攻撃を行ってみます。

注: CELTF の "ToDo管理サービス" に関する解析方法を含みます。

クライアントサイド検証に頼るリスク

高負荷のアプリケーションなどでは権限制御がクライアントに委ねられているケースがあります。
毎回のリクエストで権限チェックを行わなくて良いためパフォーマンス的には優れていますが、重要なシステムで行うと大きな脆弱性を組み込む事に繋がります。
もし状態管理などをクライアント側で判断する場合、JWTのような改ざんの検知が可能な仕組みを採用し、必ず権限を行使する際にサーバーサイドの検証を行う必要があります。

タグ改変の実践

ログイン後のページを表示

まずは攻撃を行うためにCELTFのCS学習サイトにログインします。
ログインに関してわからない場合、 ワードリストの生成とパスワード推測攻撃 を参考にしてみてください。

デバッグ画面からタグの改変

ログイン後の画面が開けたら、デバッグ画面を開きます。
デバッグ画面を開いたら、左上のページのインスペクトを行うためのツールを選択します。

選択後、無効化されているボタンをクリックし、ボタンのタグを表示します。

タグを表示すると、属性に「disabled="disabled"」が指定されているのがわかります。

disabled="disabled"」がボタンを無効化している原因のため、この属性を削除します。
該当の属性をダブルクリックすると編集モードに切り替わるため、その後削除します。

活性化されたボタンの実行

ボタンが活性化されるため、活性化されたボタンを実行します。
サーバーにリクエストが送られますが、ユーザーがログインされているかどうかしかチェックしていないため、フラグが表示されます。

おわりに

Webサイトを直接操作し、タグを改変する事で強制的にボタンを有効化しました。
今回はWebサイトでしたが、Webアプリケーションでも同じ事が発生します。
スマホアプリなどでは逆コンパイルの後解析され、改変される可能性があります。
UnityなどでWebアプリケーションを動的に公開している場合でも、中間者攻撃などでアプリケーションを差し替え、意図的に動作を変更する事ができます。
どのような形でもクライアント側で処理をする場合悪意のある操作を行われる可能性があるため、サーバサイドで秘密鍵などで署名し、実際に権限を行使する際に改めてサーバサイドの検証を行うなど工夫が必要になります。

コメント