問題
-
スキャナ ツール (Tenable など) を使用して脆弱性スキャンを実行した後、次の脆弱性が見つかりました ブラインド SQL インジェクション.
-
この脆弱性は、攻撃ベクトル
http://URL_LIFERAY/o/js_resolve_modules?modules=10001%3D%28select%201%2C2%29%3D1
を使用し、スキャナー ツールは次のような情報を表示します。Vulnerability has been detected on URL '/o/js_resolve_modules' by exploiting 'link' element named 'modules' and injecting following payload:
| 10001=(select 1,2)=1
To confirm the presence of the vulnerability, this proof has been identified in the target response:
| 10001=(select 1,2)=1 for TRUE statement and 10001=(select 1)=1 for FALSE statement
Environment
- Liferay DXP 7.3.
解決策
- この脆弱性は誤検出の可能性があります。
- SQL インジェクション テストの後、一部のツールは 200 以外の HTTP 結果コードを予期し、その他の応答はエラー テストとしてマークされます。
- Liferay は結果コード 200 に応答できますが、結果を返さず、SQL インジェクションの試行を禁止します。
- それを確認するには、いくつかのテストを実行して攻撃ベクトル
/o/js_resolve_modules?modules=
を確認します。 これらのテストの目的は、SQL インジェクション攻撃がある場合と、リクエストに間違ったパラメーター値がある場合のこのエンドポイントの動作が同じであることを確認することです。 テストは次のとおりです。 - CURL などのツールを使用して、攻撃ベクトルに SQL を挿入しようとする HTTP 呼び出しを送信します。 呼び出しは次のようになります。
curl http://URL_LIFERAY/o/js_resolve_modules?modules=10001%3D%28select%201%2C2%29%3D1
攻撃が正しく回避された場合、答えは次のようになります。{"pathMap":{},"configMap":{},"resolvedModules":[],"moduleMap":{},"errors":["Missing required module '10001'=(select 1'","Missing required module '2)='1'"],"moduleFlags":{}}
HTTP 結果コードは 200 であり、スキャナー ツールによって誤って解釈される可能性があります。 しかし、攻撃は正しく回避されました。 - 間違ったパラメータ値を持つリクエストをこのエンドポイントに送信するには、次のような CURL を使用できます。
curl http://URL_LIFERAY/o/js_resolve_modules?modules=badModuleName123321
応答は、前のテストと同じである必要があります。{"pathMap":{},"configMap":{},"resolvedModules":[],"moduleMap":{},"errors":["Missing required module 'fdjksalfjdskfjdsklafjdsak'"],"moduleFlags":{}}
これらの応答は、悪意のあるコードがエンドポイントによって間違った入力値として解釈され、インジェクションを実行できないことを証明しています。
追加情報