Verb Tampering (動詞の改ざん)¶
概要¶
多くの Web 環境では、動詞ベースの認証およびアクセス制御 (VBAAC) が可能です。セキュリティ制御のルールには、決定の一部として HTTP 動詞 (POST、GET など) が含まれます。
残念なことに、一部の実装は予期しない安全ではない方法で動作します。そういった実装は、VBAAC ルールで指定されていないメソッドを拒否しますが、リストされていない任意のメソッドを許可します。
API は仕様で指定された動詞だけを受け入れるいっぽう、他のすべての動詞を 405 Method Not Allowed で拒否するべきです。
推奨事項¶
必要なメソッドだけが許可されていること、また許可されたメソッドが適切に構成され、仕様で指定されていることを確認します。
ユーザー エージェント、フレームワーク、Web サーバーによって実装されたセキュリティ対策を迂回するような回避策が実装されていないことを確認します。
サンプル¶
This is a common mistake in JAVA EE web XML files. For example:
```xml
<security-constraint>
<web-resource-collection>
<url-pattern>/secret/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>administrator</role-name>
</auth-constraint>
</security-constraint>
```
These rules will block `GET` and `POST` requests to the `/secret/*` endpoints
for non-`administrator` users. Any other verbs (from any other role) will still
be allowed!
In this case, you should remove all `<http-method>` elements altogether from
`web.xml` so that constraints apply to all requests. If access to a single method
is still required, you should combine a 'deny all' constraint with a method-specific
constraint.
```xml
<security-constraint>
<web-resource-collection>
<web-resource-name>site</web-resource-name>
<http-method>GET</http-method>
</web-resource-collection>
...
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>site</web-resource-name>
<url-pattern>/secret/*</url-pattern>
</web-resource-collection>
...
</security-constraint>
```
参考資料¶
- OWASP: Security Misconfiguration.
- Common Weakness Enumeration: CWE-16.
- Bypassing VBAAC with HTTP Verb Tampering