Skip to main content

Saltcorn EUVDEUVD-2026-25633

| CVE-2026-41478 CRITICAL
SQL Injection (CWE-89)
2026-04-24 GitHub_M GHSA-jp74-mfrx-3qvh
9.9
CVSS 3.1 · GitHub Advisory
Share

Severity by source

GitHub Advisory PRIMARY
9.9 CRITICAL
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
vuln.today AI
8.8 HIGH

Network-reachable, low-complexity injection needing only a low-privilege authenticated account (PR:L); total DB impact, but injection stays within the app's own database scope (S:U).

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from GitHub Advisory.

CVSS VectorGitHub Advisory

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

7
Source Code Evidence Fetched
Jul 24, 2026 - 02:20 vuln.today
Analysis Generated
Jul 24, 2026 - 02:20 vuln.today
Patch released
Apr 28, 2026 - 14:58 nvd
Patch available
Patch available
Apr 24, 2026 - 23:02 EUVD
CVSS changed
Apr 24, 2026 - 21:22 NVD
10.0 (CRITICAL) 9.9 (CRITICAL)
EUVD ID Assigned
Apr 24, 2026 - 21:15 euvd
EUVD-2026-25633
CVE Published
Apr 24, 2026 - 20:52 nvd
CRITICAL 9.9

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 2 npm packages depend on @saltcorn/server (2 direct, 0 indirect)

Ecosystem-wide dependent count for version 1.5.0-beta.0.

DescriptionGitHub Advisory

Saltcorn is an extensible, open source, no-code database application builder. Prior to 1.4.6, 1.5.6, and 1.6.0-beta.5, a SQL injection vulnerability in Saltcorn’s mobile-sync routes allows any authenticated low-privilege user with read access to at least one table to inject arbitrary SQL through sync parameters. This can lead to full database exfiltration, including admin password hashes and configuration secrets, and may also enable database modification or destruction depending on the backend. This vulnerability is fixed in 1.4.6, 1.5.6, and 1.6.0-beta.5.

AnalysisAI

SQL injection in Saltcorn's mobile-sync routes lets any authenticated low-privilege user with read access to a single table inject arbitrary SQL via the POST /sync/load_changes and POST /sync/deletes endpoints, enabling full database exfiltration of admin password hashes and configuration secrets and potentially data modification or destruction. It affects Saltcorn releases before 1.4.6, before 1.5.6, and before 1.6.0-beta.5. Publicly available exploit code exists (the GHSA advisory documents a working PoC and SSVC rates exploitation as 'poc'), though EPSS probability is very low at 0.03%.

Technical ContextAI

Saltcorn is an extensible open-source no-code database application builder (npm package @saltcorn/server) that ships a mobile synchronization feature. The flaw is a classic CWE-89 SQL Injection: in packages/server/routes/sync.js, user-controlled request-body values are interpolated directly into SQL template literals rather than passed as bound parameters. Specifically, req.body.syncInfos[tableName].maxLoadedId is concatenated into query fragments in getSyncRows() (e.g. data_tbl."<pk>" > ${syncInfo.maxLoadedId} and info_tbl.ref > ${syncInfo.maxLoadedId}), and timestamp-derived request values are similarly interpolated in getDelRows(). The code applies db.sqlsanitize() only to identifiers such as the primary-key name, which does not sanitize interpolated values, and performs no parseInt()/numeric validation or prepared-statement binding before concatenation, allowing an attacker to break out of the intended query and execute arbitrary SQL in the application database context.

RemediationAI

Vendor-released patch: upgrade to Saltcorn 1.4.6, 1.5.6, or 1.6.0-beta.5, whichever matches your release line (per the vendor advisory GHSA-jp74-mfrx-3qvh, https://github.com/saltcorn/saltcorn/security/advisories/GHSA-jp74-mfrx-3qvh, where the sync parameters are properly bound/validated). Until patching, reduce exposure by restricting or disabling the mobile-sync feature and blocking or access-controlling the POST /sync/load_changes and POST /sync/deletes routes at a reverse proxy (trade-off: mobile app synchronization will stop working); tighten account provisioning by disabling self-registration and auditing low-privilege accounts, since any authenticated user with read access to one table can exploit this; and if using PostgreSQL, ensure the application database role has least privilege (no unnecessary write/DDL rights) to limit the modification/destruction impact, accepting that this does not stop confidentiality loss. Do not rely on db.sqlsanitize() as a mitigation - it protects identifiers, not injected values.

Share

EUVD-2026-25633 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy