界: Environment

このセクションには、ソース コード以外のものでも、作成中の製品のセキュリティにとって重要なものがすべて含まれています。この分野が対象とする問題は、ソース コードに直接関係しないため、この分野の他の部分と分けました。

DNS Spoofing

Abstract
DNS 設定の外部制御を許可すると、サービスの中断やアプリケーションの予期しない動作が発生する可能性があります。
Explanation
DNS 偽装は、DNS キャッシュ ポイズニングとも呼ばれ、攻撃者が DNS リゾルバーのキャッシュを破壊し、誤った IP アドレスを返すようにする攻撃タイプです。DNS 偽装を使用すると、攻撃者はユーザーに気付かれずに悪意のある Web サイトにリダイレクトできます。Node.js を使用したサーバーサイド JavaScript では、DNS サーバー設定の不適切な処理によりセキュリティ上の脆弱性が生じる可能性があります。

例 1: Node.js アプリケーションでユーザーがカスタム DNS サーバーを指定できるシナリオについて考えてみましょう。この入力が適切に検証およびサニタイズされていない場合、攻撃者は悪意のある DNS サーバーを提供し、DNS 偽装攻撃を実行することができます。


const dns = require('dns');

// User-controlled input for DNS servers
const customDnsServers = from_user_controlled_input;

// Set custom DNS servers
dns.setServers(customDnsServers);


この例では、customDnsServers 変数には、ユーザー制御入力から得られた値が割り当てられます。その後、この入力は dns.setServers(customDnsServers) で DNS サーバーを設定する際に使用されます。攻撃者が悪意のある DNS サーバー アドレスを指定すると、アプリケーションに攻撃者のサーバーを使用してドメイン名を解決するように指示できるため、偽の IP アドレスが返される可能性があります。
desc.dataflow.javascript.dns_spoofing