ブログ | NGINX

NGINX と NGINX Plus を使用して CVE-2015-1635 から保護する

NGINX-F5 水平黒タイプ RGB の一部
オーウェン・ギャレット サムネイル
オーウェン・ギャレット
2015 年 4 月 16 日公開

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ヘッダーの値が大きな整数に似ている場合。 コード444NGINX と 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 コンテンツにリダイレクトされます。"