0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TeamCity の CVE-2026-100255 は NVD が 9.8、JetBrains が 8.1。差は AC の1文字だった

0
Posted at

背景

私は CVE(脆弱性ごとに振られる通し番号)の対処をまとめるサイトを運用しています。
昨日 JetBrains の CI/CD サーバ TeamCity の1件を載せたとき、深刻度の点数が2つあってどちらを書くか迷いました。
同じように迷う人がいそうなので、どう読んだかを残しておきます。

用語を先に

CVSS は脆弱性の深刻度を 0〜10 で表す指標だ。
7.0 以上が High、9.0 以上が Critical になる。
点数だけでなく「ベクタ」という文字列が付いていて、どういう前提でその点数になったかが書いてある。
NVD は NIST(アメリカ国立標準技術研究所)が運営する CVE のデータベースです。
CNA は CVE 番号を振る権限を持つ組織のことで、今回は JetBrains 自身が CNA です。
KEV は CISA(アメリカの政府機関)が「実際に悪用された」脆弱性だけを集めたカタログです。

どんな脆弱性か

NVD の説明は1文だけです。
TeamCity の 2026.2 / 2026.1.4 / 2025.11.8 より前では、パスワードリセットを使って管理者アカウントを乗っ取れた、という内容。
どの入力をどう細工するか、といった技術的な詳細は公開されていません。
NVD の対象範囲(CPE)は 2025.11.8 未満の全版と、2026.1 以上 2026.1.4 未満です。

修正版は 2025.11.8 と 2026.1.4(どちらも 2026年9月2日リリース)、それと 2026.2 です。
JetBrains の修正一覧はここにあります。
https://www.jetbrains.com/privacy-security/issues-fixed/

2026年10月6日時点で KEV には載っておらず、悪用の一次情報も見つけられていません。

点数を source 別に並べる

NVD の画面でも見られますが、私は API で取っています。
下記は NVD API 2.0 から1件取り、CVSS 3.1 の評価を「誰が付けたか(source)」ごとに1行ずつ出す Node.js スクリプトです。
引数に CVE 番号を渡します。
API キー無しでも動きますが、短時間に連打すると制限がかかるので、何十件も回すときは間を空けてください。

// nvd-cvss.mjs
const id = process.argv[2];
const url = `https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=${id}`;
const j = await (await fetch(url)).json();
const cve = j.vulnerabilities[0].cve;
console.log(cve.id, cve.vulnStatus);
for (const m of cve.metrics.cvssMetricV31 ?? []) {
  console.log(m.type.padEnd(9), m.source.padEnd(18), m.cvssData.baseScore, m.cvssData.vectorString);
}

今朝そのまま実行した出力です。

$ node nvd-cvss.mjs CVE-2026-100255
CVE-2026-100255 Analyzed
Secondary cve@jetbrains.com  8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
Primary   nvd@nist.gov       9.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Primary が NVD の評価、Secondary が CNA(JetBrains)の評価です。
2本のベクタを並べると、違うのは AC:H と AC:L の1か所だけだと分かると思います。

AC の1文字が何を意味するか

AC は Attack Complexity(攻撃の複雑さ)で、攻撃者の手の届かない条件がそろわないと成功しない場合に H(High)になる。
JetBrains は「条件がそろわないと難しい」と見て H、NVD は詳細が公開されていない以上「難しいと言える根拠が無い」として L にした、という読み方になると思います(どちらも理由は書いていないので、ここは私の推測です)。
他の項目(ネットワーク越し・認証不要・利用者の操作不要・機密性/完全性/可用性すべて High)は一致しています。
つまり「未認証で管理者を取れる」という骨格には、両者とも異論が無い。

どちらを採るか

私のサイトでは NVD の Primary(9.8)を採って、JetBrains の 8.1 も併記しています。
理由は2つあります。
1つは、サイト全体で「NVD の Primary を採る」と決めておかないと、CVE ごとに基準がぶれて並べたときに比べられなくなるから。
もう1つは、攻撃の難しさの根拠(どんな条件が要るのか)が公開されていないので、低いほうを採る理由が私の側に無いからです。
逆に、ベンダーが条件を公開していて、自分の環境がその条件を満たさないと確かめられるなら、低いほうで優先度を付けるのも合理的だと思います。

私のサイトの該当ページはここです。
https://cve.autoarticles.net/cve/CVE-2026-100255.html

結び

点数が割れていたら、点数を比べるのではなく、ベクタを1項目ずつ比べてください。
今回の差は AC の1文字だけで、「未認証で管理者を取れる」という評価はどちらも同じでした。
TeamCity を使っている人は、2025.11 系なら 2025.11.8 以上、2026.1 系なら 2026.1.4 以上(または 2026.2 以上)へ上げ、それまでは管理画面をインターネットから直接触れない場所に置いてください。


本記事はAI補助で執筆した、個人開発の紹介記事です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?