CVE-2015-1635から保護するためのNGINXおよびNGINX Plusの活用

NGINX | 2015年4月16日

4月14日、Microsoftは脆弱性に関する警告を発表しました。この脆弱性は現在、CVE-2015-1635として追跡されています。攻撃者が影響を受けるWindowsシステムに細工したHTTPリクエストを送信すると、リモートコード実行が可能になるおそれがあります。本番環境のWindowsサーバーにすぐにパッチを適用できない場合、NGINXとNGINX Plusは攻撃からの保護に役立ちます。

本稿執筆時点では、この脆弱性の具体的な詳細は公開されていません。しかし、攻撃者は非常に大きなRangeリクエストを含むHTTPリクエストを送信し、脆弱なシステムを探していると報告されています。これによりバッファオーバーフローが発生し、Windowsシステムがクラッシュする可能性があります。

この脆弱性に対処するため、Microsoftのパッチを適用することを強く推奨します。ただし、すべての本番システムにパッチを適用できず、NGINXまたはNGINX Plusを使用してそれらのシステムへのトラフィックを負荷分散またはプロキシしている場合は、簡単な設定変更だけで、脆弱なシステムに送信される特殊なリクエストをインターセプトして修正できます。

偵察トラフィックの特定と処理

Mattias Geniar氏は攻撃トラフィックを分析し、Rangeヘッダーに大きなバイト範囲を指定したHTTPリクエストがクラッシュを引き起こすと報告しています。

GET / HTTP/1.1rnHost: stuffrn
Range: bytes=0-18446744073709551615rn
rn

最も簡単な解決方法は、proxy_set_headerディレクティブを使用してRangeヘッダーを""(空文字列)に設定することです。これにより、HTTPリクエストがproxy_passディレクティブで指定されたWindowsサーバーに転送される前に、ヘッダーが実質的に削除されます。

server {    listen 80;
 
    location / {
        proxy_set_header Range "";
        proxy_pass http://windowsserver:80;
    }
}

アプリケーションでバイト範囲のサポートが必要な場合は、mapディレクティブを使用して、大きな整数に見える文字列を空文字列に置き換えてから、proxy_set_headerディレクティブでRangeヘッダーを設定できます。

map $http_range $saferange {    "~d{10,}" "";  # if it matches a string of 10 or more integers, remove it
    default $http_range;
}
 
server {
    listen 80;
 
    location / {
        proxy_set_header Range $saferange;
        proxy_pass http://windowsserver:80;
    }
}

または、444 ヘッダーの値が大きな整数のように見える場合は、HTTPコード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日間の無料トライアルを今すぐ開始するか、デモについてお問い合わせください。


共有

著者について

Owen Garrett
Owen Garrettプロダクトマネジメント担当シニアディレクター

Owen Garrettのその他のブログ記事

関連するブログ記事

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
NGINX | 2024/01/18

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する

OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
NGINX | 2023/05/31

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正

Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
NGINX | 2023/02/09

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法

Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINX | 2022/05/24

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング

NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
NGINX | 2018/08/17

SELinuxでNGINXおよびNGINX Plusを使用する

Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。

NGINX PlusによるAWS Auto Scalingグループの負荷分散
NGINX | 2017/03/06

NGINX PlusによるAWS Auto Scalingグループの負荷分散

新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります