説明
DNSの正引きや逆引きの結果を、信頼の判断、アクセス許可、認証に直接使うと、DNS偽装、キャッシュポイズニング、リバインディングによって回避される可能性があります。
想定される影響
- 攻撃者がDNS応答を操作し、信頼されたホストに見せかける可能性があります。
- 逆引きのDNS名だけでアクセスが許可される可能性があります。
対処方法
- 認証とアクセス許可の判断には、TLSクライアント認証、署名付きトークン、サーバー側の認可など、DNSに依存しない根拠を使用してください。
- ネットワーク上の位置を確認する必要がある場合は、解決したIPアドレスを承認済みのCIDR範囲と比較し、リダイレクト後も再検証してください。
例
DNSだけに基づくアクセス許可
python
addr = socket.gethostbyname(host)
if addr == TRUSTED_IP:
grant_access()
追加のネットワーク確認
python
addr = ipaddress.ip_address(socket.gethostbyname(host))
return addr in TRUSTED_NET
説明:
- 脆弱なコード: DNS検索結果をアクセス許可に直接使うため、DNS応答の操作によって判断が回避される可能性があります。
- ネットワーク確認の例: 追加の確認として、解決したIPアドレスを承認済みのCIDR範囲と比較します。このコードだけで呼び出し元の身元を確認したり、アクセスを許可したりしてはいけません。認証と認可はDNSから独立して行ってください。