以下の内容はhttps://cysec148.hatenablog.com/entry/2025/08/10/175956より取得しました。


アクセス制御の破綻:プラットフォーム設定ミスとその悪用手法

Hello there, ('ω')ノ

1. プラットフォーム層でのアクセス制御とは?

一部のアプリケーションでは、サーバーやアプリケーションフレームワークの設定によってアクセス制御を行います。 例えば:

DENY: POST, /admin/deleteUser, managers

これは「managers グループのユーザーが /admin/deleteUser に POST リクエストを送るのを拒否」という意味です。

しかし、この設定方法には複数の抜け道があります。


2. URLベースのアクセス制御を回避する手口

a. 特殊なHTTPヘッダーでURLを上書き

一部のフレームワークは X-Original-URLX-Rewrite-URL などのHTTPヘッダーをサポートしています。

例:

POST / HTTP/1.1
X-Original-URL: /admin/deleteUser

こうすると、フロント側のURLチェックをすり抜けて本来禁止されている処理を実行できる場合があります。


b. HTTPメソッドを変える

アクセス制御が「URL+HTTPメソッド」に依存している場合、許可されていない POST の代わりに GET や他のメソッドで実行できるケースがあります。

例:

GET /admin/deleteUser

これが成功すれば、メソッドベースの制御は無効化されます。


c. URL表記の違いによる回避

プラットフォームやアプリケーションは、URLの大文字小文字や末尾のスラッシュに対して寛容な場合があります。

例:

  • /ADMIN/DELETEUSER → 実際は /admin/deleteUser と同じエンドポイントに到達
  • /admin/deleteUser//admin/deleteUser と同じ扱い

もしアクセス制御側がこれらを別エンドポイントとみなすと、制御がすり抜けます。


d. 拡張子付きURLの利用(Springの例)

Springフレームワークの useSuffixPatternMatch が有効だと、 /admin/deleteUser.anything/admin/deleteUser にマッピングされます。

Spring 5.3以前ではデフォルトで有効だったため、これを悪用できることがあります。


3. 水平権限昇格(Horizontal Privilege Escalation)

これは、他人のデータや機能にアクセスできてしまう脆弱性です。 多くの場合、URLやパラメータの値を変えるだけで発生します。

例:

https://insecure-website.com/myaccount?id=123

id=124 に変更すると、他ユーザーのアカウントにアクセスできてしまうことがあります。

このように、ユーザーが直接オブジェクト(データIDなど)を指定できる実装は、IDOR(Insecure Direct Object Reference) と呼ばれる脆弱性を生みます。


4. 脆弱性発見のコツ

  • HTTPヘッダーを確認 X-Original-URLX-Rewrite-URL の挙動を試す。
  • HTTPメソッドを切り替えて送信 POST → GET / DELETE → PUT など。
  • URLの大文字小文字、末尾のスラッシュ、拡張子追加を試す
  • パラメータを他人の値に変更(IDORの確認)。

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/08/10/175956より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14