MariaDB Connector/Node.js: NO_BACKSLASH_ESCAPES セッション設定を使用している場合、テキストプロトコルにおけるSQLインジェクションの脆弱性

### 概要
テキストプロトコルの文字列およびバイナリパラメータのエスケープ処理において、このコネクタは常に引用符をバックスラッシュでエスケープしていましたが、セッションのNO_BACKSLASH_ESCAPES SQLモード設定を考慮していませんでした。サーバーの状態フラグ(STATUS_NO_BACKSLASH_ESCAPES)は宣言されていましたが、読み込まれていませんでした。

NO_BACKSLASH_ESCAPESが有効なサーバーまたはセッションでは、バックスラッシュは通常の文字であり、引用符は2つ重ねてエスケープする必要があります。コネクタによって生成されるエスケープされた値は、文字列リテラルを閉じ、プレースホルダーを通じて渡された値がSQLとして解釈されていました。

Connection.escape()を含む、すべてのテキストプロトコルのエスケープ処理箇所が影響を受けました。

### 影響
アプリケーションがクエリパラメータとして渡す値を制御できる攻撃者は、アプリケーションのデータベースユーザーの権限で任意のSQLを実行できます。これにより、接続可能なすべてのデータが読み取られたり、変更されたり、削除されたりする可能性があります。

この脆弱性の影響を受けるためには、NO_BACKSLASH_ESCAPESが有効になっている環境が必要です。有効にする方法は、コネクタのsessionVariables/initSqlオプション、またはアプリケーションが発行するSET sql_modeです。MariaDB 11.4のANSI、ORACLE、またはTRADITIONALの複合モードではデフォルトで有効になっていないため、意図的に設定する必要があります。有効になっている場合、特別なアプリケーションコードは必要ありません。標準のプレースホルダーAPIがインジェクションの起点となります。

execute()およびbatch()は影響を受けません。バイナリのプリペアドステートメントおよびバルクプロトコルは、パラメータ値を別のチャネルで送信します。

### 対策
エスケープ処理ルーチンは、セッションの状態フラグに基づいて分岐し、NO_BACKSLASH_ESCAPESが設定されている場合は引用符を2つ重ねてエスケープし、バックスラッシュは変更しません。

### 応急処置
アップグレードするまでは、execute()またはbatch()を使用するか、NO_BACKSLASH_ESCAPESを無効にしてください。

### 報告者
fg0x0氏が報告。

影響を受けるパッケージ:
- npm (JavaScript) mariadb: 3.2.5未満のバージョンが影響を受けます。3.2.5で修正されました。
- npm (JavaScript) mariadb: 3.3.0以上、3.3.4未満のバージョンが影響を受けます。3.3.4で修正されました。
- npm (JavaScript) mariadb: 3.4.0以上、3.4.7未満のバージョンが影響を受けます。3.4.7で修正されました。
- npm (JavaScript) mariadb: 3.5.0-rc.0以上、3.5.4未満のバージョンが影響を受けます。3.5.4で修正されました。