Every CVESearch/Get API key

GHSA-cfqx-f43m-vfh7

@saltcorn/server arbitrary file and directory listing when accessing build mobile app results

5.5 MediumFix available

GHSA-cfqx-f43m-vfh7 is a medium vulnerability (CVSS 5.5) in @saltcorn/server, published October 3, 2024. No source lists public exploit code. Fixed in @saltcorn/server 1.0.0-beta.14.

What does this mean?
Severity
5.5 MediumCVSS 4.0, GitHub Advisories
Exploit chance
UnscoredNo EPSS score yet
Exploitation
None knownNot on CISA’s or ENISA’s lists
Fixed in
1.0.0-beta.14@saltcorn/server +1 more

Description

Summary

A user with admin permission can read arbitrary file and directory names on the filesystem by calling the admin/build-mobile-app/result?build_dir_name= endpoint. The build_dir_name parameter is not properly validated and it's then used to construct the buildDir that is read. The file/directory names under the buildDir will be returned.

Details

router.get(
  "/build-mobile-app/result",
  isAdmin,
  error_catcher(async (req, res) => {
    const { build_dir_name } = req.query; // [1] source
    const rootFolder = await File.rootFolder();
    const buildDir = path.join(
      rootFolder.location,
      "mobile_app",
      build_dir_name // [2]
    );
    const files = await Promise.all(
      fs
        .readdirSync(buildDir) // [3] sink
        .map(async (outFile) => await File.from_file_on_disk(outFile, buildDir))
    );
    [...]
  })
);

PoC

  • log into the application as an admin user
  • visit the following url: http://localhost:3000/admin/build-mobile-app/result?build_dir_name=/../../../../../../../../

NOTE: it's possible to only see file and directory names but not to download their content.

Impact

Information disclosure

Recommended Mitigation

Resolve the buildDir and check if it starts with ${rootFolder.location}/mobile_app.

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
High
Integrity
None
Availability
None

Affected packages

Affected packages
PackageAffectedFixed
@saltcorn/server
npm
through 1.0.0-beta.13
1.0.0-beta.14
@saltcorn/server
npm
before 1.0.0-beta.14
1.0.0-beta.14

What each source reports

GitHub Advisories Score used5.5

@saltcorn/server arbitrary file and directory listing when accessing build mobile app results

Summary

A user with admin permission can read arbitrary file and directory names on the filesystem by calling the admin/build-mobile-app/result?build_dir_name= endpoint. The build_dir_name parameter is not properly validated and it's then used to construct the buildDir that is read. The file/directory names under the buildDir will be returned.

Details

router.get(
  "/build-mobile-app/result",
  isAdmin,
  error_catcher(async (req, res) => {
    const { build_dir_name } = req.query; // [1] source
    const rootFolder = await File.rootFolder();
    const buildDir = path.join(
      rootFolder.location,
      "mobile_app",
      build_dir_name // [2]
    );
    const files = await Promise.all(
      fs
        .readdirSync(buildDir) // [3] sink
        .map(async (outFile) => await File.from_file_on_disk(outFile, buildDir))
    );
    [...]
  })
);

PoC

  • log into the application as an admin user
  • visit the following url: http://localhost:3000/admin/build-mobile-app/result?build_dir_name=/../../../../../../../../

NOTE: it's possible to only see file and directory names but not to download their content.

Impact

Information disclosure

Recommended Mitigation

Resolve the buildDir and check if it starts with ${rootFolder.location}/mobile_app.

Record
GHSA-cfqx-f43m-vfh7
CVSS 4.0
5.5 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P
CVSS 3.1
4.9 MediumCVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N
Weakness
CWE-548
Updated
2026-11-02
OSV5.5

@saltcorn/server arbitrary file and directory listing when accessing build mobile app results

Summary

A user with admin permission can read arbitrary file and directory names on the filesystem by calling the admin/build-mobile-app/result?build_dir_name= endpoint. The build_dir_name parameter is not properly validated and it's then used to construct the buildDir that is read. The file/directory names under the buildDir will be returned.

Details

router.get(
  "/build-mobile-app/result",
  isAdmin,
  error_catcher(async (req, res) => {
    const { build_dir_name } = req.query; // [1] source
    const rootFolder = await File.rootFolder();
    const buildDir = path.join(
      rootFolder.location,
      "mobile_app",
      build_dir_name // [2]
    );
    const files = await Promise.all(
      fs
        .readdirSync(buildDir) // [3] sink
        .map(async (outFile) => await File.from_file_on_disk(outFile, buildDir))
    );
    [...]
  })
);

PoC

  • log into the application as an admin user
  • visit the following url: http://localhost:3000/admin/build-mobile-app/result?build_dir_name=/../../../../../../../../

NOTE: it's possible to only see file and directory names but not to download their content.

Impact

Information disclosure

Recommended Mitigation

Resolve the buildDir and check if it starts with ${rootFolder.location}/mobile_app.

Record
GHSA-cfqx-f43m-vfh7
CVSS 4.0
5.5 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P
CVSS 3.1
4.9 MediumCVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N
Weakness
CWE-548
Updated
2026-11-02

History

History
RecordedChangedSources
first indexedGitHub Advisories, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

References

MoveEnter Open