
प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट और CVE-2026-54356 के लिए एडवाइज़री, एक Budibase प्राधिकरण-अभाव दोष जो निम्न-विशेषाधिकार वाले उपयोगकर्ताओं को संग्रहीत AWS क्रेडेंशियल के साथ S3 पूर्व-हस्ताक्षरित अपलोड URL जारी करने की अनुमति देता है।
एक कम-विशेषाधिकार (BASIC भूमिका) प्रमाणित उपयोगकर्ता, प्रकाशित Budibase कार्यक्षेत्र में, POST /api/attachments/:datasourceId/url को कॉल कर सकता है और S3 प्री-साइन्ड अपलोड URL प्राप्त कर सकता है, जो कार्यक्षेत्र डेटासोर्स के सर्वर-पक्ष AWS क्रेडेंशियल्स से हस्ताक्षरित होता है, एक हमलावर-नियंत्रित ऑब्जेक्ट कुंजी के लिए (और, यदि डेटासोर्स के पास कोई निश्चित बकेट नहीं है, तो हमलावर-नियंत्रित बकेट के लिए भी)।
| 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। वास्तविक: 200 with signedUrl/publicUrl।
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 क्रेडेंशियल्स को न्यूनतम-विशेषाधिकार (bucket/prefix-प्रतिबंधित IAM नीति) तक सीमित करें और अनपेक्षित PutObject गतिविधि की निगरानी करें।
खोज एवं रिपोर्ट: @KovachVL।
केवल शैक्षिक/रक्षात्मक उपयोग और समन्वित प्रकटीकरण के लिए। केवल उन्हीं सिस्टमों का परीक्षण करें जिनके स्वामी आप हैं या जिनके परीक्षण के लिए आप स्पष्ट रूप से अधिकृत हैं।