| Summary |
Frappe ERPNext(バージョン15.89.0まで)には、プリントフォーマットのレンダリング機構にサーバーサイドテンプレートインジェクション(SSTI)の脆弱性が存在します。具体的には、API frappe.www.printview.get_html_and_style() がプリントフォーマット文書内の html フィールドを get_rendered_template() の呼び出しチェーンを通じて frappe.render_template(template, doc) でレンダリングします。ERPNext では Jinja2 を SandboxedEnvironment でラップしていますが、get_safe_globals() を通じて frappe.db.sql などの機微な関数が公開されています。プリントフォーマットを作成・編集できる認証済み攻撃者は、html フィールドに任意の Jinja 式をインジェクションできます。悪意のあるプリントフォーマットが保存された後、攻撃者はターゲット文書(例:仕入先や販売請求書)を指定して get_html_and_style() を呼び出し、レンダリング処理をトリガーすることが可能です。これにより、インジェクトされたペイロードの内容によっては、データベースのバージョンやスキーマ情報、機密データなどの情報が漏えいする恐れがあります。悪用の流れとしては、「html フィールドにSSTIペイロードを含むプリントフォーマットを作成→get_html_and_style() APIを呼び出し→get_rendered_template() 内で frappe.render_template(template, doc) が実行される→frappe.db.sql や他の公開 globals 経由でデータベース情報が漏えいする」という流れになります。
|