web-dev-qa-db-ja.com

この無効なHTTP_Host値が悪用しようとする脆弱性は何ですか?

ホームWebサーバーからエラーメールを受信しました(これはトラフィックの少ないサイトであり、Djangoアプリケーションを実行しているので、エラーについてメールを受信するように書いたので、バグを見つけるのに役立ちます) 。

Subject: [Django] ERROR (EXTERNAL IP): Invalid HTTP_Host header: '203.7.2.230 deimos-legion.net'. The domain name provided is not valid according to RFC 1034/1035.

Invalid HTTP_Host header: '203.7.2.230 deimos-legion.net'. The domain name provided is not valid according to RFC 1034/1035.

リクエストされたURLは/?author=1でした(/ページは単純なニュースページであり、クエリパラメータを使用していないため、ページ上のリンクから発信された可能性はありません)。

残りのリクエストの詳細は以下に提供されています。誰もがこのリクエストが何をしようとしていたのか、それが悪用しようとしていた可能性のある脆弱性を知っていますか?

GET:<QueryDict: {u'author': [u'1']}>,
POST:<QueryDict: {}>,
COOKIES:{},
META:{'CONTENT_LENGTH': '',
'CONTENT_TYPE': '',
'DOCUMENT_ROOT': '/var/www',
'HTTP_ACCEPT_ENCODING': 'identity',
'HTTP_CONNECTION': 'close',
'HTTP_Host': '203.7.2.230 deimos-legion.net',
'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0',
'PATH_INFO': u'/',
'QUERY_STRING': 'author=1',
'REMOTE_ADDR': '89.248.174.49',
'REMOTE_PORT': '21642',
'REQUEST_METHOD': 'GET',
'REQUEST_URI': '/?author=1',
u'SCRIPT_NAME': u'',
'SERVER_NAME': 'solaris.deimos-legion.net',
'SERVER_PORT': '80',
'SERVER_PROTOCOL': 'HTTP/1.1',

SCRIPT_NAMEの存在は、これが試行されたものであることを示唆していると思いますPHPエクスプロイト-Djangoがその値を使用するとは思わない。)

3

HTTP Response Splitting を利用する共有 cache poisoning attack に少し似ています。

この攻撃は、evil.comyourhost.comの2つのHTTPホストヘッダーを送信し、異なるサブシステムが複数のヘッダーを処理する方法の不一致を悪用することで機能します。

たとえば、Varnishキャッシュは最初のHostヘッダーをtrueとして扱いますが、nginx Webサーバーは最後のHostヘッダーを使用します。

Hostヘッダーを連結するApacheを使用していると思います。

これらの攻撃から保護することを目的とした標準化が RFC72 で確立されました。

サーバーは、ホストヘッダーフィールドがないHTTP/1.1リクエストメッセージと、複数のホストヘッダーフィールドまたは無効なフィールド値を持つホストヘッダーフィールドを含むリクエストメッセージに対して、400(不良リクエスト)ステータスコードで応答する必要があります。 。

SCRIPT_NAMEはPHP=エクスプロイトを示していません。おそらく、WSGI内のアプリケーションのパスの最初の部分にすぎません。

4
Jedi