
CVE-2026-54356에 대한 개념 증명 익스플로잇 및 권고입니다. 이는 Budibase의 인가 누락 결함으로, 낮은 권한의 사용자가 저장된 AWS 자격 증명을 사용해 S3 사전 서명 업로드 URL을 생성할 수 있게 합니다.
게시된 Budibase 작업공간의 낮은 권한(BASIC 역할) 인증 사용자는 POST /api/attachments/:datasourceId/url을 호출하여, 공격자가 제어하는 객체 키(그리고 데이터소스에 고정 버킷이 없는 경우 공격자가 제어하는 버킷까지)에 대해 작업공간 데이터소스의 서버 측 AWS 자격 증명으로 서명된 S3 사전 서명 업로드 URL을 얻을 수 있습니다.
| CVE | CVE-2026-54356 |
| 권고 | GHSA-6x9p-4r67-5gjx |
| 패키지 | @budibase/server |
| 유형 | CWE-862: 누락된 권한 부여 |
| 영향받는 버전 | < 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이(가) 발견하고 보고했습니다.
교육/방어 목적 및 조정된 공개(coordinated disclosure) 전용입니다. 소유한 시스템 또는 명시적으로 테스트 권한이 부여된 시스템만 테스트하세요.