概要
Synopsys Cybersecurity Research Center(CyRC)のリサーチャーは、広く使用されているオープンソースのウェブサーバーおよびサーブレットコンテナであるEclipseJettyのサービス拒否(DoS)脆弱性CVE-2020-27223を発見しました。 Eclipse FoundationのWebサイトによると、「Jettyは、開発と本番の両方で、さまざまなプロジェクトや製品で使用されています。 Jettyは、デバイス、ツール、フレームワーク、アプリケーションサーバー、最新のクラウドサービスに簡単に組み込まれてきた長い歴史があることで開発者に長い間愛されてきました。」とのこと。
Jettyが多数の品質係数パラメータ(Acceptヘッダーのq値)を含むAcceptヘッダーを含むリクエストを処理すると、CPU使用率が高くなり、サーバーがサービス拒否状態になる可能性があります。 これはorg.eclipse.jetty.http.QuotedQualityCSVクラスのsortメソッドに見られる脆弱性よるものであると考えています。
for (int i = _values.size(); i– > 0; )
{
String v = _values.get(i);
Double q = _quality.get(i);
int compare = last.compareTo(q);
if (compare > 0 || (compare == 0 && _secondaryOrdering.applyAsInt(v) < lastSecondaryOrder))
{
_values.set(i, _values.get(i + 1));
_values.set(i + 1, v);
_quality.set(i, _quality.get(i + 1));
_quality.set(i + 1, q);
last = 0.0D;
lastSecondaryOrder = 0;
i = _values.size();
continue;
}
last = q;
lastSecondaryOrder = _secondaryOrdering.applyAsInt(v);
}
この動作をトリガーできるJetty内の機能は次のとおりです:
- デフォルトのエラー処理– QuotedQualityCSVを含む `Accept`リクエストヘッダーは、クライアントに返すコンテンツの種類(html、text、json、xmlなど)を決定するために使用されます。
- StatisticsServlet – QuotedQualityCSVで `Accept`リクエストヘッダーを使用して、クライアントに返すコンテンツの種類(xml、json、text、htmlなど)を決定します。
- HttpServletRequest.getLocale()– QuotedQualityCSVとともに `Accept-Language`リクエストヘッダーを使用して、この呼び出しで返す「優先」言語を決定します。
- HttpservletRequest.getLocales()–上記と似ていますが、 `Accept-Language`リクエストヘッダーの品質値に基づいてロケールの順序付きリストを返します。
- DefaultServlet –QuotedQualityCSVで `Accept-Encoding`リクエストヘッダーを使用して、静的コンテンツ(WebアプリのURLパターンと一致しないコンテンツ)に対してどの種類の事前圧縮コンテンツを返すかを決定します。
並べ替えられたアイテムの数が非常に多く、qパラメータの値の値が十分に多様であるというリクエストがサーバーで検出されると、並べ替え配列によってCPU使用率が急上昇します。 シノプシスのリサーチャーは、この動作によるメモリリークやクラッシュを観察していません。ただし、サイズが数十キロバイトの範囲にある単一の要求をサーバーが処理するのに数分かかる場合があります。また、リクエストのサイズとCPU使用時間の間に指数関数的な関連性があることを観測しました。
影響のあるソフトウェア
- Eclipse Jetty version 9.4.6.v20170531 から 9.4.36.v20210114
- Eclipse Jetty version 10.0.0
- Eclipse Jetty version 11.0.0
影響
CVSS 3.1 スコア
ベクター: AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
スコア: 5.3 (Medium)
攻撃される可能性の指標:
Attack vector (AV): N = Network
Attack complexity (AC): L = Low
Privileges required (PR): N = None
User interaction (UI): N = None
Scope (S): U = Unchanged
影響の指標:
Confidentiality impact (C): N = None
Integrity impact (I): N = None
Availability impact (A): L = Low
修正措置
Jettyのソフトウェアベンダーとユーザーは9.4.38.v20210224、10.0.1あるいは11.0.1にアップグレードすることを強くお勧めします。
発見者
フィンランド、オウルの Synopsys Cybersecurity Research Center の研究員が Defensics® ファジング・テスト・ツールを使用して発見しました。
- Matti Varanka
- Tero Rontti
JettyのメンテナであるWebtideチームがこの問題にタイムリーに対処してくれたことに感謝します。
タイムライン
- 2021年1月5日:Jettyに脆弱性が発見される
- 2021年1月10日:JettyのメンテナであるWebtideに脆弱性が開示
- 2021年1月11日:WebtideはJettyの脆弱性を確認し、CVE-2020-27223が割り当てられる
- 2021年1月22日:Webtideは修正を発行
- 2021年1月26日:脆弱性勧告CVE-2020-27223が発行される