CVE-2026-55410
NocoBase backup restore schema name allows command injection
NocoBase is an AI-powered no-code/low-code platform for building business applications and enterprise solutions. Prior to 2.1.19, NocoBase @nocobase/plugin-backups restored PostgreSQL backups by interpolating the database.schema value from _metadata.json into shell command strings executed with Node.js child_process.exec(), allowing a backup-management user restoring a crafted backup to execute commands as the NocoBase server process. This vulnerability is fixed in 2.1.19.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- High
- User interaction
- None
What an attacker can affect
- Confidentiality
- Low
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
6.7
NocoBase backup restore schema name allows command injection
NocoBase is an AI-powered no-code/low-code platform for building business applications and enterprise solutions. Prior to 2.1.19, NocoBase @nocobase/plugin-backups restored PostgreSQL backups by interpolating the database.schema value from _metadata.json into shell command strings executed with Node.js child_process.exec(), allowing a backup-management user restoring a crafted backup to execute commands as the NocoBase server process. This vulnerability is fixed in 2.1.19.
- Record
CVE-2026-55410- CVSS 3.1
- 6.7 Medium
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
EUVDEUVD-2026-44804
6.7
NocoBase is an AI-powered no-code/low-code platform for building business applications and enterprise solutions. Prior to 2.1.19, NocoBase @nocobase/plugin-backups restored PostgreSQL backups by interpolating the database.schema value from _metadata.json into shell command strings executed with Node.js child_process.exec(), allowing a backup-management user restoring a crafted backup to execute commands as the NocoBase server process. This vulnerability is fixed in 2.1.19.
- Record
EUVD-2026-44804- CVSS 3.1
- 6.7 Medium
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-p853-83gj-wjj3
6.7
NocoBase backup restore schema name allows command injection
Summary
NocoBase @nocobase/plugin-backups 2.0.57 restores PostgreSQL backups by interpolating the backup metadata schema name into shell command strings that are executed with Node.js child_process.exec(). A backup-management user who can restore an uploaded PostgreSQL backup with forced schema restore can place shell metacharacters in _metadata.json under database.schema, causing arbitrary commands to execute as the NocoBase server process during restore.
The vulnerable plugin is included in the default @nocobase/preset-nocobase package and is guarded by the backup-management ACL snippet (backups:* / backup:*). This is not unauthenticated; the attacker must have backup restore privileges or equivalent access to the restore API/CLI.
Details
Affected product evidence:
- Ecosystem/package: npm package
@nocobase/plugin-backupsfrompackages/plugins/@nocobase/plugin-backups/package.json. - Tested vulnerable version:
2.0.57(packages/plugins/@nocobase/plugin-backups/package.json:1-16). - Tested commit:
e03d267362b3426f484c28783020b4a2a08911e8. - Default/common inclusion:
@nocobase/preset-nocobasedepends on and lists@nocobase/plugin-backups2.0.57 as built in (packages/presets/nocobase/package.json:22-24,packages/presets/nocobase/package.json:115-128). - Affected range estimate: at least the tested
2.0.57checkout. Earlier/later versions were not tested. - Patched version: unknown/not available in this local checkout.
Source-to-sink path:
- The plugin registers backup-management snippets for
backups:*andbackup:*, so the restore API is intended for roles granted backup-management permissions (packages/plugins/@nocobase/plugin-backups/src/server/plugin.ts:51-59). - The
backuprestore-upload action accepts request body/queryforceand passes it asforceSchemaRestoretoRestoreManager.restore()(packages/plugins/@nocobase/plugin-backups/src/server/resourcers/backup-cli.ts:40-42,packages/plugins/@nocobase/plugin-backups/src/server/resourcers/backup-cli.ts:200-211). RestoreManagerdecompresses the uploaded backup archive, reads_metadata.json, and parses attacker-controlled JSON metadata (packages/plugins/@nocobase/plugin-backups/src/server/managers/restore.ts:203-215,packages/plugins/@nocobase/plugin-backups/src/server/managers/restore.ts:257-267).- When
forceSchemaRestoreis true and the database dialect is PostgreSQL, the schema-mismatch check is skipped (packages/plugins/@nocobase/plugin-backups/src/server/managers/restore.ts:270-300). Existing tests confirm forced schema restore intentionally allows a metadata schema mismatch (packages/plugins/@nocobase/plugin-backups/src/server/__tests__/managers/restore.test.ts:336-356) and that the API passesforceSchemaRestore: truewhenforce=trueis supplied (packages/plugins/@nocobase/plugin-backups/src/server/__tests__/managers/restore.test.ts:377-409). - The parsed
metadata.database.schemais passed intothis.#dbAdapter.restore(path.join(extractedDir, dbFile), metadata.database.schema)(packages/plugins/@nocobase/plugin-backups/src/server/managers/restore.ts:427-448). - For PostgreSQL, if the backup schema differs from the target schema,
PostgresAdapter.restore()assignssrcSchema = schema || 'public'and buildspgRestoreCommandusing-n ${srcSchema}with no quoting or argument array (packages/plugins/@nocobase/plugin-backups/src/server/adapters/database.ts:350-420). #restoreSchema()also interpolatessrcSchemaandtargetSchemadirectly into SQL strings and then callsrun(pgRestoreCommand, ...)(packages/plugins/@nocobase/plugin-backups/src/server/adapters/database.ts:423-451).run()executes the assembled string throughchild_process.exec(), which invokes a shell (packages/plugins/@nocobase/plugin-backups/src/server/adapters/database.ts:1-31).
A schema value such as safe; touch /tmp/nocobase-cve-marker # produces a restore command of this form:
- Record
GHSA-p853-83gj-wjj3- CVSS 3.1
- 6.7 Medium
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
NVD
6.7
NocoBase is an AI-powered no-code/low-code platform for building business applications and enterprise solutions. Prior to 2.1.19, NocoBase @nocobase/plugin-backups restored PostgreSQL backups by interpolating the database.schema value from _metadata.json into shell command strings executed with Node.js child_process.exec(), allowing a backup-management user restoring a crafted backup to execute commands as the NocoBase server process. This vulnerability is fixed in 2.1.19.
- Record
CVE-2026-55410- CVSS 3.1
- 6.7 Medium
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
OSV
6.7
NocoBase backup restore schema name allows command injection
NocoBase is an AI-powered no-code/low-code platform for building business applications and enterprise solutions. Prior to 2.1.19, NocoBase @nocobase/plugin-backups restored PostgreSQL backups by interpolating the database.schema value from _metadata.json into shell command strings executed with Node.js child_process.exec(), allowing a backup-management user restoring a crafted backup to execute commands as the NocoBase server process. This vulnerability is fixed in 2.1.19.
- Record
CVE-2026-55410- CVSS 3.1
- 6.7 Medium
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
OSVGHSA-p853-83gj-wjj3
6.7
NocoBase backup restore schema name allows command injection
Summary
NocoBase @nocobase/plugin-backups 2.0.57 restores PostgreSQL backups by interpolating the backup metadata schema name into shell command strings that are executed with Node.js child_process.exec(). A backup-management user who can restore an uploaded PostgreSQL backup with forced schema restore can place shell metacharacters in _metadata.json under database.schema, causing arbitrary commands to execute as the NocoBase server process during restore.
The vulnerable plugin is included in the default @nocobase/preset-nocobase package and is guarded by the backup-management ACL snippet (backups:* / backup:*). This is not unauthenticated; the attacker must have backup restore privileges or equivalent access to the restore API/CLI.
Details
Affected product evidence:
- Ecosystem/package: npm package
@nocobase/plugin-backupsfrompackages/plugins/@nocobase/plugin-backups/package.json. - Tested vulnerable version:
2.0.57(packages/plugins/@nocobase/plugin-backups/package.json:1-16). - Tested commit:
e03d267362b3426f484c28783020b4a2a08911e8. - Default/common inclusion:
@nocobase/preset-nocobasedepends on and lists@nocobase/plugin-backups2.0.57 as built in (packages/presets/nocobase/package.json:22-24,packages/presets/nocobase/package.json:115-128). - Affected range estimate: at least the tested
2.0.57checkout. Earlier/later versions were not tested. - Patched version: unknown/not available in this local checkout.
Source-to-sink path:
- The plugin registers backup-management snippets for
backups:*andbackup:*, so the restore API is intended for roles granted backup-management permissions (packages/plugins/@nocobase/plugin-backups/src/server/plugin.ts:51-59). - The
backuprestore-upload action accepts request body/queryforceand passes it asforceSchemaRestoretoRestoreManager.restore()(packages/plugins/@nocobase/plugin-backups/src/server/resourcers/backup-cli.ts:40-42,packages/plugins/@nocobase/plugin-backups/src/server/resourcers/backup-cli.ts:200-211). RestoreManagerdecompresses the uploaded backup archive, reads_metadata.json, and parses attacker-controlled JSON metadata (packages/plugins/@nocobase/plugin-backups/src/server/managers/restore.ts:203-215,packages/plugins/@nocobase/plugin-backups/src/server/managers/restore.ts:257-267).- When
forceSchemaRestoreis true and the database dialect is PostgreSQL, the schema-mismatch check is skipped (packages/plugins/@nocobase/plugin-backups/src/server/managers/restore.ts:270-300). Existing tests confirm forced schema restore intentionally allows a metadata schema mismatch (packages/plugins/@nocobase/plugin-backups/src/server/__tests__/managers/restore.test.ts:336-356) and that the API passesforceSchemaRestore: truewhenforce=trueis supplied (packages/plugins/@nocobase/plugin-backups/src/server/__tests__/managers/restore.test.ts:377-409). - The parsed
metadata.database.schemais passed intothis.#dbAdapter.restore(path.join(extractedDir, dbFile), metadata.database.schema)(packages/plugins/@nocobase/plugin-backups/src/server/managers/restore.ts:427-448). - For PostgreSQL, if the backup schema differs from the target schema,
PostgresAdapter.restore()assignssrcSchema = schema || 'public'and buildspgRestoreCommandusing-n ${srcSchema}with no quoting or argument array (packages/plugins/@nocobase/plugin-backups/src/server/adapters/database.ts:350-420). #restoreSchema()also interpolatessrcSchemaandtargetSchemadirectly into SQL strings and then callsrun(pgRestoreCommand, ...)(packages/plugins/@nocobase/plugin-backups/src/server/adapters/database.ts:423-451).run()executes the assembled string throughchild_process.exec(), which invokes a shell (packages/plugins/@nocobase/plugin-backups/src/server/adapters/database.ts:1-31).
A schema value such as safe; touch /tmp/nocobase-cve-marker # produces a restore command of this form:
- Record
GHSA-p853-83gj-wjj3- CVSS 3.1
- 6.7 Medium
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
@nocobase/plugin-backupsnpm |
before 2.1.19 | 2.1.19 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-55410 is a medium vulnerability (CVSS 6.7) in Nocobase, published July 15, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.72%, the 54th percentile. Fixed in @nocobase/plugin-backups 2.1.19.
References
github.com/nocobase/nocobase/security/advisories/GHSA-p853-83gj-wjj3
github.com/nocobase/nocobase/commit/0e1aba1b7b112ffc841588963f7343c00edd9806
github.com/nocobase/nocobase/releases/tag/v2.1.19
nvd.nist.gov/vuln/detail/CVE-2026-55410
github.com/advisories/GHSA-p853-83gj-wjj3
github.com/CVEProject/cvelistV5/tree/main/cves/2026/55xxx/CVE-2026-55410.json
github.com/nocobase/nocobase
Left out here: the rest of 2 source descriptions. The JSON record has them.