界: API Abuse
API は、呼び出し元と呼び出し先の間のコントラクトです。最も一般的な API の不正使用の形態は、呼び出し元がこのコントラクトの終わりを守らないことによって発生します。たとえば、プログラムが chroot() を呼び出した後に chdir() を呼び出すのに失敗すると、アクティブなルート ディレクトリを安全に変更する方法を指定したコントラクトに違反することになります。ライブラリの悪用のもう 1 つの良い例は、呼び出し先が信頼できる DNS 情報を呼び出し元に返すことを期待することです。この場合、呼び出し元は、呼び出し先の API の動作 (戻り値が認証目的に使用できること) についてある種の仮定をすることで、呼び出し先の API を悪用します。また、相手側から、呼び出し元と呼び出し先のコントラクトを違反することもできます。例えば、コーダーが SecureRandom をサブクラス化し、ランダムではない値を返した場合、コントラクトに違反することになります。
Often Misused: Mixing Template Languages
Abstract
Cross-Site Scripting 攻撃に対する保護に細工できないようにするため、複数のテンプレート言語を混在させないでください。
Explanation
テンプレート言語を混在させると、特定の言語に対して以前に実装された保護機能が機能しなくなったり、無効になったりすることがあります。最も悪意がないケースでは、機能が予測どおりに機能しなくなる可能性がありますが、この場合も、悪意のあるユーザーはエンジンの保護機能を回避することができて、Cross-site Scriptingの脆弱性にさらされる可能性があります。
例 1: 次のコードでは、AngularJS モジュールは、式の区切り文字としてデフォルト設定でなく、「[[」および「]]」を使用するよう設定されています。
この設定の場合、検証を行う他のテンプレート エンジンが AngularJS 式と互換性がない可能性のある式をエスケープするようになります。そのため、ユーザーが標準検証をバイパスして、ブラウザ内で独自のコードを実行できるようになる可能性があります。
例 1: 次のコードでは、AngularJS モジュールは、式の区切り文字としてデフォルト設定でなく、「[[」および「]]」を使用するよう設定されています。
myModule.config(function($interpolateProvider){
$interpolateProvider.startSymbol("[[");
$interpolateProvider.endSymbol("]]");
});
この設定の場合、検証を行う他のテンプレート エンジンが AngularJS 式と互換性がない可能性のある式をエスケープするようになります。そのため、ユーザーが標準検証をバイパスして、ブラウザ内で独自のコードを実行できるようになる可能性があります。
References
[1] AngularJS $interpolateProvider documentation Google
[2] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[3] Standards Mapping - OWASP Top 10 2021 A05 Security Misconfiguration
desc.structural.javascript.often_misused_mixing_template_languages