
CVE-2026-54356 の概念実証エクスプロイトおよびアドバイザリ。保存された AWS 認証情報を使用して低権限ユーザーが S3 の事前署名付きアップロード URL を発行できるようにする、Budibase の認可欠落の脆弱性です。
公開済み Budibase ワークスペースの低権限 (BASIC ロール) の認証済みユーザーは、POST /api/attachments/:datasourceId/url を呼び出し、ワークスペースのデータソースのサーバー側の AWS 認証情報で署名されたS3 事前署名付きアップロード URL を、攻撃者が制御するオブジェクトキー (データソースに固定バケットがない場合は、攻撃者が制御するバケットも) に対して取得できます。
| CVE | CVE-2026-54356 |
| アドバイザリ | GHSA-6x9p-4r67-5gjx |
| パッケージ | @budibase/server |
| タイプ | CWE-862: Missing Authorization |
| 影響を受けるバージョン | < 3.41.3 |
| 修正バージョン | 3.41.3 |
| 深刻度 | 高 — CVSS 3.1 7.1 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N) |
| 必要な権限 | 認証済み BASIC アプリユーザー |
packages/server/src/api/routes/static.ts:
.post(
"/api/attachments/:datasourceId/url",
recaptcha,
authorized(PermissionType.TABLE, PermissionLevel.WRITE), // too low, wrong resource
controller.getSignedUploadURL
)
packages/server/src/api/controllers/static/index.ts (getSignedUploadURL) は、:datasourceId でデータソースを読み込み、保存されている accessKeyId/secretAccessKey を取得し、攻撃者が指定した bucket/key に対する PutObject リクエストに署名します:
const { bucket, key } = ctx.request.body || {}
const s3 = new S3({
credentials: {
accessKeyId: datasource?.config?.accessKeyId as string,
secretAccessKey: datasource?.config?.secretAccessKey as string,
},
})
signedUrl = await getSignedUrl(s3, new PutObjectCommand({ Bucket: bucket, Key: key }))
認証情報に基づく署名付き URL の発行は特権アクションですが、このチェックは汎用的なテーブル書き込み権限 (BASIC が保持) のみを要求し、呼び出し元がその特定のデータソースを使用する権限を持っているかを検証しません。期待される結果: 403。実際の結果: signedUrl/publicUrl とともに 200。
PutObject 事前署名付き URL を取得できます。curl/PUT)。poc/ を参照してください:
poc/exploit.sh — curl PoC (ログイン → 署名付き URL の発行 → 証明ファイルのアップロード)。poc/poc.py — Python による同じフロー。python3 poc/poc.py \
--target http://localhost:10000 \
--app-id app_xxx --datasource-id datasource_xxx \
--email [email protected] --password 'Password123!' \
--bucket my-attachments --key poc/cve-2026-54356/proof.txt \
--upload
Budibase 3.41.3+ にアップグレードしてください。すぐにアップグレードできない場合は、S3 データソースの AWS 認証情報を最小権限 (バケット/プレフィックス制限付き IAM ポリシー) に制限し、予期しない PutObject アクティビティを監視してください。
@KovachVL によって発見および報告されました。
教育/防御目的および調整された開示にのみ使用してください。所有しているシステム、または明示的にテストを許可されたシステムのみテストしてください。