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内の機能は次のとおりです:
並べ替えられたアイテムの数が非常に多く、qパラメータの値の値が十分に多様であるというリクエストがサーバーで検出されると、並べ替え配列によってCPU使用率が急上昇します。 シノプシスのリサーチャーは、この動作によるメモリリークやクラッシュを観察していません。ただし、サイズが数十キロバイトの範囲にある単一の要求をサーバーが処理するのに数分かかる場合があります。また、リクエストのサイズとCPU使用時間の間に指数関数的な関連性があることを観測しました。
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® ファジング・テスト・ツールを使用して発見しました。
JettyのメンテナであるWebtideチームがこの問題にタイムリーに対処してくれたことに感謝します。