Lookup for vulnerable packages by Package URL.

GET /api/packages/773167?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "url": "http://public2.vulnerablecode.io/api/packages/773167?format=api",
    "purl": "pkg:npm/%40saltcorn/server@0.8.0-beta.4",
    "type": "npm",
    "namespace": "@saltcorn",
    "name": "server",
    "version": "0.8.0-beta.4",
    "qualifiers": {},
    "subpath": "",
    "is_vulnerable": true,
    "next_non_vulnerable_version": "1.4.6",
    "latest_non_vulnerable_version": "1.6.0-beta.5",
    "affected_by_vulnerabilities": [
        {
            "url": "http://public2.vulnerablecode.io/api/vulnerabilities/55949?format=api",
            "vulnerability_id": "VCID-4476-cb8f-2fb1",
            "summary": "Saltcorn Server allows logged-in users to delete arbitrary files because of a path traversal vulnerability\nA logged-in user with any role can delete arbitrary files on the filesystem by calling the `sync/clean_sync_dir` endpoint. The `dir_name` POST parameter is not validated/sanitized and is used to construct the `syncDir` that is deleted by calling `fs.rm`.",
            "references": [
                {
                    "reference_url": "https://api.first.org/data/v1/epss?cve=CVE-2024-47818",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "0.00205",
                            "scoring_system": "epss",
                            "scoring_elements": "0.42575",
                            "published_at": "2026-06-09T12:55:00Z"
                        },
                        {
                            "value": "0.00205",
                            "scoring_system": "epss",
                            "scoring_elements": "0.42566",
                            "published_at": "2026-06-08T12:55:00Z"
                        },
                        {
                            "value": "0.00205",
                            "scoring_system": "epss",
                            "scoring_elements": "0.42602",
                            "published_at": "2026-06-07T12:55:00Z"
                        },
                        {
                            "value": "0.00205",
                            "scoring_system": "epss",
                            "scoring_elements": "0.4263",
                            "published_at": "2026-06-06T12:55:00Z"
                        },
                        {
                            "value": "0.00205",
                            "scoring_system": "epss",
                            "scoring_elements": "0.42618",
                            "published_at": "2026-06-05T12:55:00Z"
                        }
                    ],
                    "url": "https://api.first.org/data/v1/epss?cve=CVE-2024-47818"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "6.5",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H"
                        },
                        {
                            "value": "7.1",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/blob/v1.0.0-beta.15/packages/server/routes/sync.js#L337-L346",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "6.5",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H"
                        },
                        {
                            "value": "7.1",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        },
                        {
                            "value": "Track",
                            "scoring_system": "ssvc",
                            "scoring_elements": "SSVCv2/E:P/A:N/T:P/P:M/B:A/M:M/D:T/2024-10-08T14:13:36Z/"
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/blob/v1.0.0-beta.15/packages/server/routes/sync.js#L337-L346"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/commit/3c551261d0e230635774798009951fa83a07cc3a",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "6.5",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H"
                        },
                        {
                            "value": "7.1",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        },
                        {
                            "value": "Track",
                            "scoring_system": "ssvc",
                            "scoring_elements": "SSVCv2/E:P/A:N/T:P/P:M/B:A/M:M/D:T/2024-10-08T14:13:36Z/"
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/commit/3c551261d0e230635774798009951fa83a07cc3a"
                },
                {
                    "reference_url": "https://nvd.nist.gov/vuln/detail/CVE-2024-47818",
                    "reference_id": "CVE-2024-47818",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "6.5",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H"
                        },
                        {
                            "value": "7.1",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://nvd.nist.gov/vuln/detail/CVE-2024-47818"
                },
                {
                    "reference_url": "https://github.com/advisories/GHSA-43f3-h63w-p6f6",
                    "reference_id": "GHSA-43f3-h63w-p6f6",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "HIGH",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/advisories/GHSA-43f3-h63w-p6f6"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-43f3-h63w-p6f6",
                    "reference_id": "GHSA-43f3-h63w-p6f6",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "6.5",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        },
                        {
                            "value": "7.1",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        },
                        {
                            "value": "Track",
                            "scoring_system": "ssvc",
                            "scoring_elements": "SSVCv2/E:P/A:N/T:P/P:M/B:A/M:M/D:T/2024-10-08T14:13:36Z/"
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-43f3-h63w-p6f6"
                }
            ],
            "fixed_packages": [
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/82859?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.0.0-beta.16",
                    "is_vulnerable": true,
                    "affected_by_vulnerabilities": [
                        {
                            "vulnerability": "VCID-d5ew-szns-kucd"
                        },
                        {
                            "vulnerability": "VCID-n1q4-umca-e7g7"
                        },
                        {
                            "vulnerability": "VCID-va1x-6pqx-qqfk"
                        }
                    ],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.0.0-beta.16"
                }
            ],
            "aliases": [
                "CVE-2024-47818",
                "GHSA-43f3-h63w-p6f6"
            ],
            "risk_score": 4.0,
            "exploitability": "0.5",
            "weighted_severity": "8.0",
            "resource_url": "http://public2.vulnerablecode.io/vulnerabilities/VCID-4476-cb8f-2fb1"
        },
        {
            "url": "http://public2.vulnerablecode.io/api/vulnerabilities/55940?format=api",
            "vulnerability_id": "VCID-7rem-1fuj-xkhm",
            "summary": "@saltcorn/server Remote Code Execution (RCE) / SQL injection via prototype pollution  by manipulating `lang` and  `defstring` parameters when setting localizer strings\nThe endpoint `/site-structure/localizer/save-string/:lang/:defstring` accepts two parameter values: `lang` and `defstring`. These values are used in an unsafe way to set the keys and value of the `cfgStrings` object. It allows to add/modify properties of the `Object prototype` that result in several logic issues, including:\n- RCE vulnerabilities by polluting the `tempRootFolder` property\n- SQL injection vulnerabilities by polluting the `schema` property when using `PostgreSQL` database.",
            "references": [
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "7.2",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"
                        },
                        {
                            "value": "7.3",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:P"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/blob/v1.0.0-beta.13/packages/server/routes/infoarch.js#L236-L239",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "7.2",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"
                        },
                        {
                            "value": "7.3",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:P"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/blob/v1.0.0-beta.13/packages/server/routes/infoarch.js#L236-L239"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/commit/9e066ae8ba317469053cc27e95dcdf5b6e60e12d",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "7.2",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"
                        },
                        {
                            "value": "7.3",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:P"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/commit/9e066ae8ba317469053cc27e95dcdf5b6e60e12d"
                },
                {
                    "reference_url": "https://github.com/advisories/GHSA-78p3-fwcq-62c2",
                    "reference_id": "GHSA-78p3-fwcq-62c2",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "HIGH",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/advisories/GHSA-78p3-fwcq-62c2"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-78p3-fwcq-62c2",
                    "reference_id": "GHSA-78p3-fwcq-62c2",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "7.2",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        },
                        {
                            "value": "7.3",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:P"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-78p3-fwcq-62c2"
                }
            ],
            "fixed_packages": [
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/82842?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.0.0-beta.14",
                    "is_vulnerable": true,
                    "affected_by_vulnerabilities": [
                        {
                            "vulnerability": "VCID-4476-cb8f-2fb1"
                        },
                        {
                            "vulnerability": "VCID-9vf2-jqvg-t7cb"
                        },
                        {
                            "vulnerability": "VCID-d5ew-szns-kucd"
                        },
                        {
                            "vulnerability": "VCID-n1q4-umca-e7g7"
                        },
                        {
                            "vulnerability": "VCID-va1x-6pqx-qqfk"
                        }
                    ],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.0.0-beta.14"
                }
            ],
            "aliases": [
                "GHSA-78p3-fwcq-62c2"
            ],
            "risk_score": 4.0,
            "exploitability": "0.5",
            "weighted_severity": "8.0",
            "resource_url": "http://public2.vulnerablecode.io/vulnerabilities/VCID-7rem-1fuj-xkhm"
        },
        {
            "url": "http://public2.vulnerablecode.io/api/vulnerabilities/55953?format=api",
            "vulnerability_id": "VCID-9vf2-jqvg-t7cb",
            "summary": "Saltcorn Server Stored Cross-Site Scripting (XSS) in event logs page\nEvent log data is not properly sanitized leading to stored Cross-Site Scripting (XSS) vulnerability.",
            "references": [
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "6.1",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
                        },
                        {
                            "value": "5.1",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/blob/v1.0.0-beta.13/packages/server/routes/eventlog.js#L445",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "6.1",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
                        },
                        {
                            "value": "5.1",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/blob/v1.0.0-beta.13/packages/server/routes/eventlog.js#L445"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/commit/3c551261d0e230635774798009951fa83a07cc3a",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "6.1",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
                        },
                        {
                            "value": "5.1",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/commit/3c551261d0e230635774798009951fa83a07cc3a"
                },
                {
                    "reference_url": "https://github.com/advisories/GHSA-pf56-h9qf-rxq4",
                    "reference_id": "GHSA-pf56-h9qf-rxq4",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "MODERATE",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/advisories/GHSA-pf56-h9qf-rxq4"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-pf56-h9qf-rxq4",
                    "reference_id": "GHSA-pf56-h9qf-rxq4",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "6.1",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        },
                        {
                            "value": "5.1",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-pf56-h9qf-rxq4"
                }
            ],
            "fixed_packages": [
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/82859?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.0.0-beta.16",
                    "is_vulnerable": true,
                    "affected_by_vulnerabilities": [
                        {
                            "vulnerability": "VCID-d5ew-szns-kucd"
                        },
                        {
                            "vulnerability": "VCID-n1q4-umca-e7g7"
                        },
                        {
                            "vulnerability": "VCID-va1x-6pqx-qqfk"
                        }
                    ],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.0.0-beta.16"
                }
            ],
            "aliases": [
                "GHSA-pf56-h9qf-rxq4"
            ],
            "risk_score": 3.1,
            "exploitability": "0.5",
            "weighted_severity": "6.2",
            "resource_url": "http://public2.vulnerablecode.io/vulnerabilities/VCID-9vf2-jqvg-t7cb"
        },
        {
            "url": "http://public2.vulnerablecode.io/api/vulnerabilities/55936?format=api",
            "vulnerability_id": "VCID-adpx-bj1b-nufj",
            "summary": "@saltcorn/server arbitrary file and directory listing when accessing build mobile app results\nA 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.",
            "references": [
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "4.9",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N"
                        },
                        {
                            "value": "5.5",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS: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"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/blob/v1.0.0-beta.13/packages/server/routes/admin.js#L2884-L2893",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "4.9",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N"
                        },
                        {
                            "value": "5.5",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS: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"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/blob/v1.0.0-beta.13/packages/server/routes/admin.js#L2884-L2893"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/commit/81adaf78430a9b59804894574d67d2a0c7bb3dc5",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "4.9",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N"
                        },
                        {
                            "value": "5.5",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS: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"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/commit/81adaf78430a9b59804894574d67d2a0c7bb3dc5"
                },
                {
                    "reference_url": "https://github.com/advisories/GHSA-cfqx-f43m-vfh7",
                    "reference_id": "GHSA-cfqx-f43m-vfh7",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "MODERATE",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/advisories/GHSA-cfqx-f43m-vfh7"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-cfqx-f43m-vfh7",
                    "reference_id": "GHSA-cfqx-f43m-vfh7",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "4.9",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        },
                        {
                            "value": "5.5",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS: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"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-cfqx-f43m-vfh7"
                }
            ],
            "fixed_packages": [
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/82842?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.0.0-beta.14",
                    "is_vulnerable": true,
                    "affected_by_vulnerabilities": [
                        {
                            "vulnerability": "VCID-4476-cb8f-2fb1"
                        },
                        {
                            "vulnerability": "VCID-9vf2-jqvg-t7cb"
                        },
                        {
                            "vulnerability": "VCID-d5ew-szns-kucd"
                        },
                        {
                            "vulnerability": "VCID-n1q4-umca-e7g7"
                        },
                        {
                            "vulnerability": "VCID-va1x-6pqx-qqfk"
                        }
                    ],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.0.0-beta.14"
                }
            ],
            "aliases": [
                "GHSA-cfqx-f43m-vfh7"
            ],
            "risk_score": 3.1,
            "exploitability": "0.5",
            "weighted_severity": "6.2",
            "resource_url": "http://public2.vulnerablecode.io/vulnerabilities/VCID-adpx-bj1b-nufj"
        },
        {
            "url": "http://public2.vulnerablecode.io/api/vulnerabilities/89923?format=api",
            "vulnerability_id": "VCID-d5ew-szns-kucd",
            "summary": "Saltcorn has an Unauthenticated Path Traversal in sync endpoints, allowing arbitrary file write and directory read\n### Summary\n\nTwo unauthenticated path traversal vulnerabilities exist in Saltcorn's mobile sync endpoints. The `POST /sync/offline_changes` endpoint allows an unauthenticated attacker to create arbitrary directories and write a `changes.json` file with attacker-controlled JSON content anywhere on the server filesystem. The `GET /sync/upload_finished` endpoint allows an unauthenticated attacker to list arbitrary directory contents and read specific JSON files.\n\nThe safe path validation function `File.normalise_in_base()` exists in the codebase and is correctly used by the `clean_sync_dir` endpoint in the **same file** (fix for GHSA-43f3-h63w-p6f6), but was not applied to these two endpoints.\n\n### Details\n\n**Finding 1: Arbitrary file write — `POST /sync/offline_changes` (sync.js line 226)**\n\nThe `newSyncTimestamp` parameter from the request body is used directly in `path.join()` without sanitization:\n\n```javascript\nconst syncDirName = `${newSyncTimestamp}_${req.user?.email || \"public\"}`;\nconst syncDir = path.join(\n    rootFolder.location, \"mobile_app\", \"sync\", syncDirName\n);\nawait fs.mkdir(syncDir, { recursive: true });        // creates arbitrary dir\nawait fs.writeFile(\n    path.join(syncDir, \"changes.json\"),\n    JSON.stringify(changes)                           // writes attacker content\n);\n```\n\nNo authentication middleware is applied to this route. Since `path.join()` normalizes `../` sequences, setting `newSyncTimestamp` to `../../../../tmp/evil` causes the path to resolve outside the sync directory.\n\n**Finding 2: Arbitrary directory read — `GET /sync/upload_finished` (sync.js line 288)**\n\nThe `dir_name` query parameter is used directly in `path.join()` without sanitization:\n\n```javascript\nconst syncDir = path.join(\n    rootFolder.location, \"mobile_app\", \"sync\", dir_name\n);\nlet entries = await fs.readdir(syncDir);\n```\n\nAlso unauthenticated. An attacker can list directory contents and read files named `translated-ids.json`, `unique-conflicts.json`, `data-conflicts.json`, or `error.json` from any directory.\n\n**Contrast — fixed endpoint in the same file (line 342):**\n\nThe `clean_sync_dir` endpoint correctly uses `File.normalise_in_base()`:\n\n```javascript\nconst syncDir = File.normalise_in_base(\n    path.join(rootFolder.location, \"mobile_app\", \"sync\"),\n    dir_name\n);\nif (syncDir) await fs.rm(syncDir, { recursive: true, force: true });\n```\n\n### PoC\n\n```bash\n# Write arbitrary file to /tmp/\ncurl -X POST http://TARGET:3000/sync/offline_changes \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"newSyncTimestamp\": \"../../../../tmp/saltcorn_poc\",\n    \"oldSyncTimestamp\": \"0\",\n    \"changes\": {\"proof\": \"path_traversal_write\"}\n  }'\n# Result: /tmp/saltcorn_poc_public/changes.json created with attacker content\n\n# List /etc/ directory\ncurl \"http://TARGET:3000/sync/upload_finished?dir_name=../../../../etc\"\n```\n\n### Impact\n\n- **Unauthenticated arbitrary directory creation** anywhere on the filesystem\n- **Unauthenticated arbitrary JSON file write** (`changes.json`) to any writable directory\n- **Unauthenticated directory listing** of arbitrary directories\n- **Unauthenticated read** of specific JSON files from arbitrary directories\n- Potential for **remote code execution** via writing to sensitive paths (cron, systemd, Node.js module paths)\n\n### Remediation\n\nApply `File.normalise_in_base()` to both endpoints, matching the existing pattern in `clean_sync_dir`:\n\n```javascript\n// offline_changes fix\nconst syncDirName = `${newSyncTimestamp}_${req.user?.email || \"public\"}`;\nconst syncDir = File.normalise_in_base(\n    path.join(rootFolder.location, \"mobile_app\", \"sync\"),\n    syncDirName\n);\nif (!syncDir) {\n    return res.status(400).json({ error: \"Invalid sync directory name\" });\n}\n\n// upload_finished fix\nconst syncDir = File.normalise_in_base(\n    path.join(rootFolder.location, \"mobile_app\", \"sync\"),\n    dir_name\n);\nif (!syncDir) {\n    return res.json({ finished: false });\n}\n```\n\nAdditionally, add `loggedIn` middleware to endpoints that modify server state.",
            "references": [
                {
                    "reference_url": "https://api.first.org/data/v1/epss?cve=CVE-2026-40163",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "0.00239",
                            "scoring_system": "epss",
                            "scoring_elements": "0.47194",
                            "published_at": "2026-06-09T12:55:00Z"
                        },
                        {
                            "value": "0.00239",
                            "scoring_system": "epss",
                            "scoring_elements": "0.47227",
                            "published_at": "2026-06-05T12:55:00Z"
                        },
                        {
                            "value": "0.00239",
                            "scoring_system": "epss",
                            "scoring_elements": "0.4723",
                            "published_at": "2026-06-06T12:55:00Z"
                        },
                        {
                            "value": "0.00239",
                            "scoring_system": "epss",
                            "scoring_elements": "0.47211",
                            "published_at": "2026-06-07T12:55:00Z"
                        },
                        {
                            "value": "0.00239",
                            "scoring_system": "epss",
                            "scoring_elements": "0.47181",
                            "published_at": "2026-06-08T12:55:00Z"
                        }
                    ],
                    "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-40163"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "8.2",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-32pv-mpqg-h292",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "8.2",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        },
                        {
                            "value": "Track",
                            "scoring_system": "ssvc",
                            "scoring_elements": "SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-04-15T14:49:25Z/"
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-32pv-mpqg-h292"
                },
                {
                    "reference_url": "https://nvd.nist.gov/vuln/detail/CVE-2026-40163",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "8.2",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N"
                        },
                        {
                            "value": "HIGH",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-40163"
                },
                {
                    "reference_url": "https://github.com/advisories/GHSA-32pv-mpqg-h292",
                    "reference_id": "GHSA-32pv-mpqg-h292",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "HIGH",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/advisories/GHSA-32pv-mpqg-h292"
                }
            ],
            "fixed_packages": [
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/111182?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.4.5",
                    "is_vulnerable": true,
                    "affected_by_vulnerabilities": [
                        {
                            "vulnerability": "VCID-n1q4-umca-e7g7"
                        },
                        {
                            "vulnerability": "VCID-va1x-6pqx-qqfk"
                        }
                    ],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.4.5"
                },
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/111183?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.5.5",
                    "is_vulnerable": true,
                    "affected_by_vulnerabilities": [
                        {
                            "vulnerability": "VCID-n1q4-umca-e7g7"
                        },
                        {
                            "vulnerability": "VCID-va1x-6pqx-qqfk"
                        }
                    ],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.5.5"
                },
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/111184?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.6.0-beta.4",
                    "is_vulnerable": true,
                    "affected_by_vulnerabilities": [
                        {
                            "vulnerability": "VCID-n1q4-umca-e7g7"
                        },
                        {
                            "vulnerability": "VCID-va1x-6pqx-qqfk"
                        }
                    ],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.6.0-beta.4"
                }
            ],
            "aliases": [
                "CVE-2026-40163",
                "GHSA-32pv-mpqg-h292"
            ],
            "risk_score": 4.0,
            "exploitability": "0.5",
            "weighted_severity": "8.0",
            "resource_url": "http://public2.vulnerablecode.io/vulnerabilities/VCID-d5ew-szns-kucd"
        },
        {
            "url": "http://public2.vulnerablecode.io/api/vulnerabilities/89290?format=api",
            "vulnerability_id": "VCID-n1q4-umca-e7g7",
            "summary": "Saltcorn: SQL Injection via Unparameterized Sync Endpoints (maxLoadedId)\n### Summary\nA critical 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. \n\n### Details\nThe issue affects the mobile-sync endpoints:\n\n- `POST /sync/load_changes`\n- `POST /sync/deletes`\n\nAccording to the provided analysis, user-controlled values from the request body are interpolated directly into SQL template literals without parameterization, type enforcement, or sanitization. In particular, `req.body.syncInfos[tableName].maxLoadedId` is embedded into SQL in `getSyncRows()` and timestamp-derived values are similarly interpolated in `getDelRows()`. \n\nRelevant vulnerable code paths include:\n\n- `packages/server/routes/sync.js` — `getSyncRows()`\n  - branch using `where data_tbl.\"${db.sqlsanitize(pkName)}\" > ${syncInfo.maxLoadedId}`\n  - branch using `and info_tbl.ref > ${syncInfo.maxLoadedId}`\n- `packages/server/routes/sync.js` — `getDelRows()`\n  - timestamp expressions built from request-controlled values and inserted into SQL\n- `packages/server/routes/sync.js` — `/load_changes` route handler\n  - request body fields are passed into the SQL-building functions without validation or safe binding\n\nThe root cause is that values are treated as trusted SQL fragments rather than bound parameters. While `db.sqlsanitize()` is used for identifiers elsewhere, that does not protect interpolated values and is not intended to prevent value-based SQL injection. The report notes there is no `parseInt()`, numeric validation, or prepared-statement binding before these values are concatenated into the query string. \n\nThis means a normal authenticated user can escape the intended query logic and execute arbitrary SQL in the context of the application database. The provided evidence demonstrates successful extraction of user records and schema information through the vulnerable sync route, confirming that the injection is practically exploitable. \n\n### PoC\nBased on the provided report, the issue can be reproduced by authenticating as a normal user, sending a crafted request to the affected sync endpoint, and placing a malicious SQL expression into the sync metadata field that is later interpolated into the backend query. Successful exploitation returns attacker-selected database contents in the sync response. \n\n### Impact\n- **Type:** SQL injection\n- **Who is impacted:** Any Saltcorn deployment exposing the affected mobile-sync routes to authenticated users\n- **Security impact:** An authenticated low-privilege user may exfiltrate the full database, including password hashes, configuration secrets, application data, and schema information; on some backends, the same flaw may also permit writes, schema changes, or destructive operations\n- **Attack preconditions:** The attacker needs a valid authenticated account with access to at least one readable table through the sync feature\n- **Privilege impact:** The issue allows escalation from normal user access to database-wide compromise",
            "references": [
                {
                    "reference_url": "https://api.first.org/data/v1/epss?cve=CVE-2026-41478",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "0.00037",
                            "scoring_system": "epss",
                            "scoring_elements": "0.11436",
                            "published_at": "2026-06-06T12:55:00Z"
                        },
                        {
                            "value": "0.00037",
                            "scoring_system": "epss",
                            "scoring_elements": "0.11335",
                            "published_at": "2026-06-09T12:55:00Z"
                        },
                        {
                            "value": "0.00037",
                            "scoring_system": "epss",
                            "scoring_elements": "0.11319",
                            "published_at": "2026-06-08T12:55:00Z"
                        },
                        {
                            "value": "0.00037",
                            "scoring_system": "epss",
                            "scoring_elements": "0.11399",
                            "published_at": "2026-06-07T12:55:00Z"
                        },
                        {
                            "value": "0.00037",
                            "scoring_system": "epss",
                            "scoring_elements": "0.11439",
                            "published_at": "2026-06-05T12:55:00Z"
                        }
                    ],
                    "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-41478"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "9.9",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H"
                        },
                        {
                            "value": "CRITICAL",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-jp74-mfrx-3qvh",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "10",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H"
                        },
                        {
                            "value": "9.9",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H"
                        },
                        {
                            "value": "CRITICAL",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        },
                        {
                            "value": "CRITICAL",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        },
                        {
                            "value": "Track*",
                            "scoring_system": "ssvc",
                            "scoring_elements": "SSVCv2/E:P/A:N/T:T/P:M/B:A/M:M/D:R/2026-04-27T13:10:53Z/"
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-jp74-mfrx-3qvh"
                },
                {
                    "reference_url": "https://nvd.nist.gov/vuln/detail/CVE-2026-41478",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "9.9",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H"
                        },
                        {
                            "value": "CRITICAL",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-41478"
                },
                {
                    "reference_url": "https://github.com/advisories/GHSA-jp74-mfrx-3qvh",
                    "reference_id": "GHSA-jp74-mfrx-3qvh",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "CRITICAL",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/advisories/GHSA-jp74-mfrx-3qvh"
                }
            ],
            "fixed_packages": [
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/110103?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.4.6",
                    "is_vulnerable": false,
                    "affected_by_vulnerabilities": [],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.4.6"
                },
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/110104?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.5.6",
                    "is_vulnerable": false,
                    "affected_by_vulnerabilities": [],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.5.6"
                },
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/110105?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.6.0-beta.5",
                    "is_vulnerable": false,
                    "affected_by_vulnerabilities": [],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.6.0-beta.5"
                }
            ],
            "aliases": [
                "CVE-2026-41478",
                "GHSA-jp74-mfrx-3qvh"
            ],
            "risk_score": 4.5,
            "exploitability": "0.5",
            "weighted_severity": "9.0",
            "resource_url": "http://public2.vulnerablecode.io/vulnerabilities/VCID-n1q4-umca-e7g7"
        },
        {
            "url": "http://public2.vulnerablecode.io/api/vulnerabilities/89080?format=api",
            "vulnerability_id": "VCID-va1x-6pqx-qqfk",
            "summary": "Saltcorn: Open Redirect in `POST /auth/login` due to incomplete `is_relative_url` validation (backslash bypass)\n### Summary\nSaltcorn validates the post-login `dest` parameter with a string check that only blocks `:/` and `//`. Because all WHATWG-compliant browsers normalise backslashes (`\\`) to forward slashes (`/`) for special schemes, a payload such as `/\\evil.com/path` slips through `is_relative_url()`, is emitted unchanged in the HTTP `Location` header, and causes the browser to navigate cross-origin to an attacker-controlled domain. The bug is reachable on a default install and only requires a victim who can be tricked into logging in via a crafted Saltcorn URL.\n\n### Details\nVulnerable function: `packages/server/routes/utils.js:393-395`\n\n```js\nconst is_relative_url = (url) => {\n  return typeof url === \"string\" && !url.includes(\":/\") && !url.includes(\"//\");\n};\n```\n\nThe function's intent is to allow only same-origin redirects, but the allow-list only checks for two literal substrings. It does not handle:\n- backslash characters, which WHATWG URL parsing (used by every modern browser) treats as forward slashes for the special schemes `http`, `https`, `ftp`, `ws`, `wss`. A URL parser fed `/\\evil.com/path` with a base of `http://victim/` resolves to `http://evil.com/path`.\n- non-`http(s):` schemes that do not contain `:/`. The strings `javascript:alert(1)`, `data:text/html,...`, `vbscript:...` all pass.\n\nVulnerable callsite: `packages/server/auth/routes.js:1371-1376`\n\n```js\n} else if (\n  (req.body || {}).dest &&\n  is_relative_url(decodeURIComponent((req.body || {}).dest))\n) {\n  res.redirect(decodeURIComponent((req.body || {}).dest));\n} else res.redirect(\"/\");\n```\n\nThe body's `dest` is URL-decoded twice (once by body-parser, once by the explicit `decodeURIComponent`) and the same value is passed to `res.redirect`. Express 5's `res.redirect` runs the value through `encodeurl@2.0.0`, whose whitelist character class `[^\\x21\\x23-\\x3B\\x3D\\x3F-\\x5F\\x61-\\x7A\\x7C\\x7E]` includes `\\x5C` (backslash). The backslash is therefore not percent-encoded and ends up verbatim in the `Location` response header.\n\n### PoC\n[poc.zip](https://github.com/user-attachments/files/26678853/poc.zip)\n\nPlease extract the uploaded compressed file before proceeding\n1. ./setup.sh\n2. ./poc.sh\n\n<img width=\"419\" height=\"71\" alt=\"스크린샷 2026-04-13 오후 11 44 36\" src=\"https://github.com/user-attachments/assets/9c919ed4-167b-47e3-9873-733f97b44bf0\" />\n\n### Impact\nAny user who can be lured into clicking a Saltcorn login URL crafted by the attacker will, after submitting their valid credentials, be redirected to an attacker-controlled origin. The redirect happens under the trusted Saltcorn domain, so the user has no visual cue that they are about to leave the site. Realistic abuse patterns:\n\n- Credential phishing — the attacker's site renders a forged \"session expired, please log in again\" prompt to capture the password the user just typed.",
            "references": [
                {
                    "reference_url": "https://api.first.org/data/v1/epss?cve=CVE-2026-42259",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "0.00017",
                            "scoring_system": "epss",
                            "scoring_elements": "0.04642",
                            "published_at": "2026-06-05T12:55:00Z"
                        },
                        {
                            "value": "0.00017",
                            "scoring_system": "epss",
                            "scoring_elements": "0.04616",
                            "published_at": "2026-06-07T12:55:00Z"
                        },
                        {
                            "value": "0.00017",
                            "scoring_system": "epss",
                            "scoring_elements": "0.04628",
                            "published_at": "2026-06-06T12:55:00Z"
                        },
                        {
                            "value": "0.00019",
                            "scoring_system": "epss",
                            "scoring_elements": "0.05351",
                            "published_at": "2026-06-09T12:55:00Z"
                        },
                        {
                            "value": "0.00019",
                            "scoring_system": "epss",
                            "scoring_elements": "0.05307",
                            "published_at": "2026-06-08T12:55:00Z"
                        }
                    ],
                    "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-42259"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "5.1",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-f3g8-9xv5-77gv",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "MODERATE",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        },
                        {
                            "value": "5.1",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        },
                        {
                            "value": "Track",
                            "scoring_system": "ssvc",
                            "scoring_elements": "SSVCv2/E:P/A:N/T:P/P:M/B:A/M:M/D:T/2026-05-08T22:55:52Z/"
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-f3g8-9xv5-77gv"
                },
                {
                    "reference_url": "https://nvd.nist.gov/vuln/detail/CVE-2026-42259",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "5.1",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-42259"
                },
                {
                    "reference_url": "https://github.com/advisories/GHSA-f3g8-9xv5-77gv",
                    "reference_id": "GHSA-f3g8-9xv5-77gv",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "MODERATE",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/advisories/GHSA-f3g8-9xv5-77gv"
                }
            ],
            "fixed_packages": [
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/110103?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.4.6",
                    "is_vulnerable": false,
                    "affected_by_vulnerabilities": [],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.4.6"
                },
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/110104?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.5.6",
                    "is_vulnerable": false,
                    "affected_by_vulnerabilities": [],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.5.6"
                },
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/110105?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.6.0-beta.5",
                    "is_vulnerable": false,
                    "affected_by_vulnerabilities": [],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.6.0-beta.5"
                }
            ],
            "aliases": [
                "CVE-2026-42259",
                "GHSA-f3g8-9xv5-77gv"
            ],
            "risk_score": 3.1,
            "exploitability": "0.5",
            "weighted_severity": "6.2",
            "resource_url": "http://public2.vulnerablecode.io/vulnerabilities/VCID-va1x-6pqx-qqfk"
        },
        {
            "url": "http://public2.vulnerablecode.io/api/vulnerabilities/55937?format=api",
            "vulnerability_id": "VCID-ywkx-sngm-9kat",
            "summary": "@saltcorn/server arbitrary file zip read and download when downloading auto backups\nA 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.",
            "references": [
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "4.4",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:N/A:N"
                        },
                        {
                            "value": "5.0",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/blob/v1.0.0-beta.13/packages/server/routes/admin.js#L671-L682",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "4.4",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:N/A:N"
                        },
                        {
                            "value": "5.0",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/blob/v1.0.0-beta.13/packages/server/routes/admin.js#L671-L682"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/commit/024f19a7e079913f62f4a2335ab04116ddb68192",
                    "reference_id": "",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "4.4",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:N/A:N"
                        },
                        {
                            "value": "5.0",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/commit/024f19a7e079913f62f4a2335ab04116ddb68192"
                },
                {
                    "reference_url": "https://github.com/advisories/GHSA-277h-px4m-62q8",
                    "reference_id": "GHSA-277h-px4m-62q8",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "MODERATE",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/advisories/GHSA-277h-px4m-62q8"
                },
                {
                    "reference_url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-277h-px4m-62q8",
                    "reference_id": "GHSA-277h-px4m-62q8",
                    "reference_type": "",
                    "scores": [
                        {
                            "value": "4.4",
                            "scoring_system": "cvssv3.1",
                            "scoring_elements": "CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:N/A:N"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "cvssv3.1_qr",
                            "scoring_elements": ""
                        },
                        {
                            "value": "5.0",
                            "scoring_system": "cvssv4",
                            "scoring_elements": "CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P"
                        },
                        {
                            "value": "MODERATE",
                            "scoring_system": "generic_textual",
                            "scoring_elements": ""
                        }
                    ],
                    "url": "https://github.com/saltcorn/saltcorn/security/advisories/GHSA-277h-px4m-62q8"
                }
            ],
            "fixed_packages": [
                {
                    "url": "http://public2.vulnerablecode.io/api/packages/82842?format=api",
                    "purl": "pkg:npm/%40saltcorn/server@1.0.0-beta.14",
                    "is_vulnerable": true,
                    "affected_by_vulnerabilities": [
                        {
                            "vulnerability": "VCID-4476-cb8f-2fb1"
                        },
                        {
                            "vulnerability": "VCID-9vf2-jqvg-t7cb"
                        },
                        {
                            "vulnerability": "VCID-d5ew-szns-kucd"
                        },
                        {
                            "vulnerability": "VCID-n1q4-umca-e7g7"
                        },
                        {
                            "vulnerability": "VCID-va1x-6pqx-qqfk"
                        }
                    ],
                    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@1.0.0-beta.14"
                }
            ],
            "aliases": [
                "GHSA-277h-px4m-62q8"
            ],
            "risk_score": 3.1,
            "exploitability": "0.5",
            "weighted_severity": "6.2",
            "resource_url": "http://public2.vulnerablecode.io/vulnerabilities/VCID-ywkx-sngm-9kat"
        }
    ],
    "fixing_vulnerabilities": [],
    "risk_score": "4.5",
    "resource_url": "http://public2.vulnerablecode.io/packages/pkg:npm/%2540saltcorn/server@0.8.0-beta.4"
}