Frappe ERPNext(バージョン15.89.0まで)のget_address_displayメソッドには、SSTI(サーバーサイドテンプレートインジェクション)の脆弱性があります。この関数はaddress_dictパラメータから取得したコンテキストを使用し、frappe.render_template()で住所テンプレートをレンダリングします。address_dictには辞書型またはAddressドキュメントを参照する文字列を指定できます。ERPNextではカスタムのJinja2 SandboxedEnvironmentが利用されていますが、get_safe_globals()を通じてfrappe.db.sqlなどの危険な関数にアクセスできてしまいます。Address Templateの作成や編集権限を持つ認証済みの攻撃者は、テンプレートフィールドに任意のJinja式を埋め込むことが可能です。攻撃者が対応する国のAddressドキュメントを作成し、address_dictに"address_name"を指定してget_address_display APIを呼び出すと、悪意のあるテンプレートが攻撃者のデータでレンダリングされます。その結果、サーバーサイドでのコード実行やデータベース情報の漏洩が発生する可能性があります。
|