非表示の Unicode 文字を使用して JavaScript コード内のアクションを非表示にする

双方向テキストの表示順序を変更する Unicode 文字の使用に基づいた Trojan Source 攻撃手法に続き、JavaScript コードに適用可能な、隠しアクションを導入する別の手法が公開されました。 新しい方法は、Unicode 文字「ㅤ」 (コード 0x3164、「HANGUL FILLER」) の使用に基づいています。これは文字ですが、目に見える内容はありません。 この文字が属する Unicode カテゴリは、ECMAScript 2015 仕様以降、JavaScript 変数名での使用が許可されており、これにより、Notepad++ や VS Code などの一般的なコード エディターで、非表示の変数や他の変数と区別できない新しい変数を作成できるようになります。

例として、Node.js プラットフォームのコードが示されています。このコードでは、単一文字「ㅤ」で構成される変数を使用して、攻撃者が指定したコードを実行できるようにするバックドアが隠されています。 '/network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // 実際には「const { timeout,ㅤ \u3164}」となります const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // カンマの後に \u3164 ];

一見すると、タイムアウト値だけが外部パラメータを介して渡され、実行されるコマンドを含む配列には無害な固定リストが含まれています。 しかし実際には、タイムアウト変数の後に、シンボル コード \u3164 を持つ別の非表示変数の値が割り当てられ、これも実行可能コマンドの配列に代入されます。 したがって、このような構造が存在すると、攻撃者は「https://host:8080/network_health?%E3%85%A4=command」のようなリクエストを送信してバックドアをアクティブ化し、コードを実行する可能性があります。

別の例として、感嘆符を示すように見せるために使用できる文字「à」 (ALVEOLAR CLICK) が示されています。 たとえば、Node.js 14 で実行される式「if(environmentí=ENV_PROD){」は、相違点をチェックせず、変数「environmentí」を ENV_PROD に設定するため、常に true になります。 誤解を招きやすい Unicode 文字には、「/」、「−」、「+」、「⩵」、「❨」、「⫽」、「꓿」、「∗」などがあります。

出所: オープンネット.ru

コメントを追加します