4 月 14 日、 Microsoft は、攻撃者が特別に細工した HTTP リクエストを影響を受ける Windows システムに送信した場合にリモート コード実行が可能になる可能性がある問題について、現在CVE-2015-1635として追跡されている脆弱性アラートを発行しました。 運用中の Windows サーバーにすぐにパッチを適用できない場合は、NGINX と NGINX Plus が攻撃からの保護に役立ちます。
この脆弱性の具体的な詳細は本稿執筆時点では公開されていないが、攻撃者は、バッファオーバーフローを引き起こし、Windows システムにクラッシュを引き起こす可能性のある非常に大きな Range 要求を含む HTTP 要求を送信することで、脆弱なシステムを見つけようとしていると報告されている。
この脆弱性を解決するために、ユーザーはMicrosoft のパッチを適用することを強くお勧めします。 ただし、すべての本番システムにパッチを適用できず、NGINX または NGINX Plus を使用してトラフィックの負荷分散やプロキシを行っている場合は、構成を少し変更するだけで、脆弱なシステムに送信される特別なリクエストを傍受して修正できます。
Mattias Geniar 氏は攻撃トラフィックを分析し、 Range
ヘッダーに大きなバイト範囲を持つ HTTP リクエストがクラッシュを引き起こすと報告しています。
GET / HTTP/1.1rnホスト: stuffrn
範囲: バイト数=0-18446744073709551615rn
rn
最も簡単な修正方法は、 proxy_set_header
ディレクティブを使用してRange
ヘッダーを""
(空の文字列) に設定することです。これにより、HTTP 要求がproxy_pass
ディレクティブで指定された Windows サーバーに転送される前に、ヘッダーが効果的に削除されます。
サーバー { listen 80;
location / {
proxy_set_header Range "";
proxy_pass http://windowsserver:80;
}
}
アプリケーションでバイト範囲のサポートが必要な場合は、 proxy_set_header
ディレクティブを使用してRange
ヘッダーを設定する前に、 map
ディレクティブを使用して大きな整数に似た文字列を空の文字列に置き換えることができます。
map $http_range $saferange { "~d{10,}" ""; # 10 個以上の整数の文字列に一致する場合は削除します
default $http_range;
}
server {
listen 80;
location / {
proxy_set_header Range $saferange;
proxy_pass http://windowsserver:80;
}
}
あるいは、HTTPコードを返すこともできる。444
Range
ヘッダーの値が大きな整数に似ている場合。 コード444
NGINX と NGINX Plus に何も返さずにクライアント接続を直ちに閉じるように指示します。
server { listen 80;
if ($http_range ~ "d{9,}") {
return 444;
}
location / {
proxy_pass http://windowsserver:80;
}
}
安全を確保してパッチを適用してください。ただし、すぐに実行できない場合は、NGINX と NGINX Plus が潜在的なセキュリティホールを塞ぐのに役立ちます。
NGINX Plus をお試しいただくには、今すぐ30 日間の無料トライアルを開始するか、デモについてお問い合わせください。
「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"