1. 概要
SQL インジェクションは、ウェブサイトの主要な攻撃ベクトルであり、ウェブ・アプリケーションの一般的なセキュリ ティ脅威です。ほとんどのウェブ・アプリケーション・ファイアウォール(WAF)は、SQL インジェクション攻撃をネイティブに検出してブロックすることができます。しかし、多くのWAFベンダーは、JSON演算子や関数を悪用するSQLインジェクション攻撃を検知できないことが判明しており、その対策方法を分析した。
2. 攻撃の種類
JSONの演算子や関数を利用したSQLインジェクション攻撃は、JSON内の構文がDBMSによって適切に検証されないため、WAFをバイパスすることが許されています。PostgreSQL、MySQL、SQLite、Microsoft SQL Server などの主要なデータベースは JSON をサポートしているため、攻撃者はこの機能を悪用して、JSON 演算子や関数に基づく SQL インジェクション攻撃を試みることができます。
以下に、各 DBMS の JSON 演算子や関数を悪用した SQL インジェクション攻撃の構文例を示します。
PostgreSQL
' or "[1,2,3]"::json ->> 2='3'
' or json_array_length({}) <= 3
...
MySQL
' or json_contains('{"a":1, "b":2}', '1', '$.a');
' or JSON_MERGE('[1, 2]', '[true, false]');
...
SQLite
' or '{"a":1,"b":2}'::jsonb ->> 'b'='2
' or json_extract('{"a":2,"c":[4,5,{"f":7}]}', '$.c[2].f');
...
MSSQL
' or ISJSON('{"a":"1"}') = '1
' or JSON_VALUE('{"info":{"address":[{"town":"Paris"},{"town":"London"}]}}', '$.info.address[0].town')='Paris
...
3. 対策
SQLインジェクションの攻撃タイプに、JSONの演算子や関数型にSQLインジェクションの攻撃構文が含まれている場合に検知できるようにする。
弊社AIWAF製品では、<SQL Injection (JSON Operators of Functions)パターンにより、本脆弱性を悪用した攻撃構文を検知します。
4. 結論
SQLインジェクションベースのJSONには多くの脆弱性が存在し、常にアップデートがリリースされているため、定期的なチェックとアップデートが必要です。
当社の AIWAF 製品は、SQL インジェクションベースの JSON の脆弱性に対応するための多くのパターンを開発しており、今後も SQL インジェクションベースの JSON 関連の脆弱性が発見された場合には、迅速に対応していく。
5.参考文献
https://www.picussecurity.com/resource/blog/waf-bypass-using-json-based-sql-injection-attacks
https://www.securityweek.com/wafs-several-major-vendors-bypassed-generic-attack-method/
https://docs.monitorapp.com/books/juseok/page/7646-json-syntax-sqli-202301