Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
snowpick — ServiceNowインスタンスから漏えいする機密データを検出します。 | Kitploit
ツール/GitHubGitHub/bishopfox/snowpick
偵察脆弱性スキャナーAPIセキュリティテスト情報収集ウェブセキュリティペネトレーションテストクラウドセキュリティ設定ミス
GitHubbishopfox/snowpick

snowpick

ServiceNowインスタンスから漏えいする機密データを検出します。

リポジトリを見る
152272ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

snowpick

snowpick は、設定ミスのあるウィジェット ACL、REST API のアクセス制御、認証なしのデータ露出を検出する ServiceNow 露出スキャナです。

ServiceNow は、Service Portal ウィジェットと Table REST API という 2 つの一般的な公開面を通じてデータを公開します。どちらかの面のアクセス制御が誤って設定されている場合、認証されていないユーザーがインシデント チケット、ユーザー ディレクトリ、ナレッジ ベース記事、サービス カタログ項目などの内部レコードを照会できる可能性があります。snowpick は両方の面をテストし、行の露出と件数のみのエビデンスを区別し、許可された検証用の再現手順を生成します。

仕組み

snowpick は、資格情報なしで ServiceNow のログイン ページからセッション トークンを取得し、それを使用してプラットフォームの内部 API を照会します。2 つの攻撃面をチェックします。

ウィジェット は、ServiceNow Service Portal を動かす小さなアプリケーションです。それぞれに独自のアクセス制御設定があります。それらの設定が寛容すぎる場合、認証されていないセッションがウィジェットからデータを取得できる可能性があります。snowpick はまず、可能な場合にインスタンスにインストールされているウィジェットの一覧を要求し、次にそれぞれをプローブして、レコードまたは件数のみのエビデンスを返すかどうかを確認します。

Table API は、ServiceNow のテーブルを直接照会するための /api/now/table/ の REST インターフェースです。ウィジェットとは別のアクセス制御があるため、対象は一方の面ではロックダウンされ、もう一方の面では開放されている可能性があります。snowpick は sys_user、incident、oauth_entity などの価値の高いテーブルをプローブします。

件数オラクル。 ウィジェットまたはテーブルが、行を返さずに一致するレコードが存在することを確認する場合があります。snowpick はこれを count_oracle としてフラグ付けします。完全な露出ではありませんが、クリーンでもありません。件数はフィルターでプローブしてデータを盲目的に推測できるためです。

インストール

❯ go install github.com/BishopFox/snowpick@latest

またはソースからビルド:

❯ git clone https://github.com/BishopFox/snowpick.git
❯ cd snowpick
❯ go build -o snowpick .

Go 1.21 以降が必要です。

使い方

基本スキャン

snowpick を ServiceNow インスタンスに向けます。資格情報は不要です。

❯ snowpick -target prod.service-now.com
snowpick v1.0.0 | 1 targets | 6 widgets | proxy direct
[!] prod.service-now.com
  | ticket-attachments 272 records [internal_operations:inferred]
[*] 1/1 targets complete, 1 with findings

RESULTS
1 targets scanned in 8.2s | 1 reachable | 1 with findings

  EXPOSED prod.service-now.com  272 records [internal_operations:inferred]
    | ticket-attachments       272 records [internal_operations:inferred]
    |   ServiceNow Overview and Open House 'How To.... Videos'
    |   How to - JIRA and Confluence Access Process
    |   Updating Your Personal Time Zone in ServiceNow

ATTACK SURFACE
  ticket-attachments           #################### 272 across 1 target

DATA CLASSIFICATION
  OPERATIONS          1 finding across 1 target

snowpick はインスタンスにインストールされているウィジェットを自動的に検出し、組み込みのデフォルトとともにそれぞれをプローブします。検出結果は深刻度でランク付けされます。

出力の解釈

Progress markers (left of each host):
  [!] findings   [+] clean   [-] unreachable or no session   [*] progress

Summary buckets:
  EXPOSED  data or a confirmed count came back      CLEAN  nothing reachable
  SKIP     no public session (e.g. SSO-only login)  DOWN   host unreachable

Counts:
  272 records              total the instance reports as matching
  272 records, 10 sampled  total, plus the rows snowpick pulled as evidence

Tags:
  [pii:observed]   a hint, written as category:basis
                   basis  observed = value seen in returned data
                          inferred = from a table/field/widget name
                   category  pii, credentials, infrastructure,
                             internal_operations, review_required
  [blind oracle]   count confirmed but no rows returned (a count_oracle)
  [API]            finding came from the Table REST API, not a widget
  [stats.do]       the /stats.do diagnostic endpoint is publicly reachable

複数ターゲットのスキャン

1 行に 1 つのホスト名を記述したファイルを渡します。snowpick はそれらを並列にスキャンします。

❯ snowpick -targets hosts.txt -concurrency 5
snowpick v1.0.0 | 6 targets | 6 widgets | proxy direct
[!] prod.service-now.com
  | ticket-attachments 272 records [internal_operations:inferred]
[*] 1/6 targets complete, 1 with findings
[+] staging.service-now.com clean
[*] 2/6 targets complete, 1 with findings
[!] dev.service-now.com [stats.do]
  | ticket-attachments 61 records [internal_operations:inferred]
[*] 3/6 targets complete, 2 with findings
[+] sandbox.service-now.com clean
[*] 4/6 targets complete, 2 with findings
[-] internal.service-now.com bootstrap failed: /login.do returned 302
[+] test.service-now.com clean
[*] 6/6 targets complete, 2 with findings

REST API プローブ

ServiceNow は、バックエンド テーブルを直接照会するための Table REST API も /api/now/table/ で公開しています。これはウィジェットとは別のアクセス制御面です。-table-api を使用して両方をチェックします。

❯ snowpick -target prod.service-now.com -table-api
snowpick v1.0.0 | 1 targets | 6 widgets | proxy direct
[!] prod.service-now.com
  | [API] cmn_department 1,234 records, 10 sampled [infrastructure:inferred]
[*] 1/1 targets complete, 1 with findings

Table API の検出結果では、ServiceNow が合計件数を返す場合、record_count は公開されたレコードの総数を表します。sample_count は、snowpick が境界付きエビデンスとして収集したレコード数を示します。

テーブル探索

デフォルトでは、snowpick は厳選された価値の高いテーブル(インシデント チケット、ユーザー レコード、添付ファイルなど)をチェックします。-discover を使用すると、インスタンスからテーブル名の列挙を試み、それらもチェックします。

❯ snowpick -target prod.service-now.com -discover -discover-limit 200

バージョン検出

-fingerprint を使用して、ターゲットが実行している ServiceNow リリースを特定します。これは、どのセキュリティ パッチが適用されているかを判断するのに役立ちます。

❯ snowpick -target prod.service-now.com -fingerprint
snowpick v1.0.0 | 1 targets | 6 widgets | proxy direct
[!] prod.service-now.com [Zurich (glide-zurich-07-01-2025__patch7-02-19-2026)] [stats.do]
  | ticket-attachments 61 records [internal_operations:inferred]
[*] 1/1 targets complete, 1 with findings

プロキシとレート制限

Burp、ZAP、SOCKS プロキシ経由でトラフィックをルーティングします。本番インスタンスでは -rate を使用してリクエストを調整します。

❯ snowpick -target prod.service-now.com -proxy socks5://127.0.0.1:1080 -insecure -rate 200ms

パイプラインモード

-quiet で進行状況出力を抑制します。JSON はデフォルトで stdout に出力され、-output でファイルに出力されます。終了コード 2 は検出結果があること、1 は 1 つ以上のターゲットをテストできなかったこと、0 はスキャンが検出結果なしで完了したことを意味します。

❯ snowpick -target prod.service-now.com -quiet -output results.json
❯ echo $?
2

結果の活用

JSON 出力には、影響のヒント、リクエストの詳細、行が返された場合の境界付きサンプル レコード、該当する場合は再現資料など、検出結果の詳細が含まれます。

JSON 構造

{
  "target": "acme.service-now.com",
  "reachable": true,
  "token_obtained": true,
  "stats_do": false,
  "widgets": [
    {
      "id": "ff26f2b1db12220099f93691f0b8f5ce",
      "name": "ticket-attachments",
      "status": "exposed",
      "record_count": 847,
      "sample_count": 10,
      "hints": [
        {
          "category": "pii",
          "basis": "observed",
          "reason": "email pattern in sample content",
          "signals": ["content:[email protected]"]
        },
        {
          "category": "internal_operations",
          "basis": "inferred",
          "reason": "widget name associated with internal operations",
          "signals": ["widget:ticket-attachments"]
        }
      ],
      "reproduction": {
        "method": "POST",
        "url": "https://acme.service-now.com/api/now/sp/widget/ff26f2b1db12220099f93691f0b8f5ce",
        "headers": {"X-UserToken": "...", "Cookie": "JSESSIONID=..."},
        "body": "{\"payload\":{\"start\":0,\"end\":1}}",
        "status_code": 200,
        "curl": "curl -i -sS -X 'POST' ..."
      }
    }
  ]
}

テーブル列挙の検出結果は table_findings に、Table REST API の検出結果は table_api_findings に表示されます。これらは同じ hints 構造を使用します。Table API の検出結果には、合計件数が利用可能な場合、record_count と sample_count の両方も含まれます。

一般的な jq クエリ

検出結果のあるすべてのターゲットを一覧表示:

❯ jq -r '.findings[] | select(any(.widgets[]?; .status == "exposed" or .status == "count_oracle") or ((.table_findings // []) | length > 0) or ((.table_api_findings // []) | length > 0)) | .target' results.json
prod.service-now.com
dev.service-now.com

公開された検出結果の再現用 curl コマンドを取得(コピー&ペーストで再現):

❯ jq -r '.findings[] | (.widgets[]?, .table_findings[]?, .table_api_findings[]?) | select(.status == "exposed") | .reproduction.curl' results.json
curl -i -sS -X 'POST' 'https://acme.service-now.com/api/now/sp/widget/ff26f...' -H 'X-UserToken: MOCK_TOKEN' ...

ターゲット、ベクター、ステータス、件数、サンプル、ヒントの根拠を含む PII 検出結果を表示:

ツールをダウンロード