
Count(er) Strikeと名付けられたServiceNowの新たな脆弱性により、低特権ユーザーがアクセスすべきでないテーブルから機密データを抜き取ることが可能になる。
ServiceNowはクラウドベースのプラットフォームで、企業が企業運営のためのデジタル・ワークフローを管理することを可能にします。公共機関、医療機関、金融機関、大企業など、さまざまな業界で広く採用されている。
この欠陥は2025年2月にVaronis Threat Labsによって発見され、CVE-2025-3648という識別子が割り当てられました。
ServiceNowは、先月リリースされたXanaduとYokohamaのバージョンで、この問題に対処するために追加のアクセス制御フレームワークをリリースした。しかし、すべての管理者は既存のテーブルを見直し、データが適切にロックされていることを確認する必要がある。
カウントストライクの欠陥
ServiceNowは、テーブル内のデータへのアクセスを制限するためにアクセス制御リスト(ACL)を利用している。各 ACL は、ユーザが特定のリソースにアクセスできるかどうかを判断する際に、4 つの条件を評価します:
- 必要な役割
- セキュリティ属性
- データ条件
- スクリプト条件
ユーザーがリソースにアクセスするには、これらの条件をすべて満たす必要があります。
ただし、リソースが複数のACLで保護されている場合、ServiceNowは以前は “Allow if “条件を使用していました。つまり、ユーザーが1つのACLを満たすだけで、他のACLでブロックされていてもアクセスできる可能性がありました。
場合によっては、これは完全なアクセスを許可した。しかし、記事の後半で説明するように、悪用される可能性のあるレコード数など、部分的なアクセスを許可する場合もあった。
「ServiceNowの各リソースやテーブルは多数のACLを持つことができ、それぞれが異なるアクセス条件を定義します。
「しかし、ユーザがたった一つのACLをパスすれば、他のACLがアクセスを許可しなくても、リソースにアクセスできる。リソースにACLが存在しない場合、アクセスはデフォルトのアクセス・プロパティになり、ほとんどの場合拒否に設定される。
この寛容なモデルによってVaronisは、ユーザーがより制限の厳しいACLに失敗していたとしても、保護されたデータを列挙するために使用できる部分的なアクセスを得ることが可能であることを発見した。
Varonisは、ユーザーがデータ条件またはスクリプト条件に失敗した場合でも、ServiceNowがUIとソースHTMLでレコード数を返すことを発見しました。このページには、セキュリティ制約のために一部の結果が削除されたことも記載されています。

ソースはこちら:Varonis
この部分的なデータを使って、VaronisはSTARTSWITH、CONTAINS、=、および!=などのURLベースのフィルタを操作して、レコードの内容を1文字または条件ごとに列挙し始めた。
たとえば
https://[my_company].service-now.com/task_list.do?sysparm_query=short_descriptionSTARTSWITHp。
異なる値やクエリーでこのプロセスを繰り返すことで、一度に1文字または1桁のデータを取り出すことができる。
この手順を自動化するために、Varonisは、アクセスが制限されているテーブルからデータレコードをうまく列挙するスクリプトを作成した。

Source:バロニス
レコードデータが表示されていない場合でも、レコード数から資格情報、PII、内部構成データなどのフィールドを特定するのに十分な情報が漏れる。
Varonisは、自己登録したユーザーもこの攻撃を使用する可能性があると警告している。自己登録とは、ユーザーがアカウントを作成し、最小限の権限でインスタンスにアクセスできるようにする機能で、それでも攻撃を仕掛けるために利用することができる。
「インスタンスが匿名の登録とアクセスを許可することはまれですが、この構成はフォーチュン500社に選ばれているいくつかの企業のServiceNowシステムで見つかりました」とVaronisは警告している。
攻撃の緩和
Varonis社は、この攻撃をServiceNowのITSM製品に対してテストしたと述べているが、同じACLロジックを利用するすべてのServiceNow製品にも適用されるはずだと述べている。
ServiceNowは現在、以下の方法でこの攻撃に対処している:
- Deny unless’ ACLを導入し、ユーザーがデータセットにアクセスするにはすべてのACLをパスする必要がある。
- クエリ ACL の追加。範囲演算子を使用して、この種の列挙クエリを制限する。
- 行数を非表示にし、推論の手がかりを抑制するSecurity Data Filtersの使用を推奨する。
しかし、顧客はテーブルを手作業で確認し、ACLを修正することで、過度に寛容で、この攻撃に対して脆弱でないことを確認する必要がある。
Varonis社によれば、この脆弱性が悪用された形跡はないという。
.ia_ad { background-color:#width: 95%; max-width: 800px; margin: 15px auto; border-radius: 8px; border:1px solid #d6ddee; display: flex; align-items: stretch; padding: 0; overflow: hidden; }:0; overflow: hidden; } .ia_lef { flex: 1; max-width: 200px; height: auto; display: flex; align-items: stretch; } .ia_lef a { display: flex; width: 100%; height: 100%; } .ia_lef a img { width: 100%; height: 100%; object-fit: cover; border-radius: 8px 0 0 8px; margin: 0; display: block; } .ia_rig { flex: 2; padding:display: flex; flex-direction: column; justify-content: center; } .ia_rig h2 { font-size: 17px !important; font-weight: 700; color:#line-height: 1.4; font-family:margin: 0 0 14px 0; } .ia_rig p { font-weight: bold; font-size: 14px; margin: 0 0 clamp(6px, 2vw, 14px) 0; } .ia_button { background-color:#border:1px solid #3b59aa; color: black; text-align: center; text-decoration: none; border-radius: 8px; display: inline-block; font-size: 16px; font-weight: bold; cursor: pointer; padding:10px 20px; width: fit-content; } .ia_button a { text-decoration: none; color: inherit; display: block; } @media (max-width: 600px) { .ia_ad { flex-direction: column; align-items: center; text-align: center; } .ia_lef { max-width: 100%; } .ia_lef a img { border-radius: 8px 8px 0 0; } .ia_rig { padding:15px;
width: 100%;
}
.ia_button {
width: 100%;
margin: 0px auto;
}
}




Comments