{"schemaVersion":3,"id":"CVE-2026-42351","aliases":["GHSA-f6pr-83pg-ghh6","PYSEC-2026-2985"],"status":"published","duplicateOf":null,"title":null,"description":"pygeoapi is a Python server implementation of the OGC API suite of standards. From version 0.23.0 to before version 0.23.3, a raw string path concatenation vulnerability in pygeoapi's STAC FileSystemProvider plugin can allow for requests to STAC collection based collections to expose directories without authentication. The issue manifests when pygeoapi is deployed without a proxy or web front end that would normalize URLs with .. values, along with a resource of type stac-collection defined in configuration. This issue has been patched in version 0.23.3.","dates":{"published":"2026-05-08T22:31:18.001Z","modified":"2026-05-12T02:13:37.972Z","reserved":null,"kevAdded":[],"kevDue":[]},"cvss":{"headline":{"score":7.5,"severity":"high","version":"3.1","versionLabel":"v3.1","source":"CVE.org","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","computed":false,"selection":"backend-summary"},"metrics":[{"version":"3.1","versionLabel":"v3.1","source":"CVE.org","score":7.5,"severity":"high","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","exploitability":null,"impact":null,"computed":false},{"version":"3.1","versionLabel":"v3.1","source":"OSV · Pypi","score":7.5,"severity":"high","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","exploitability":10,"impact":6,"computed":true},{"version":"3.1","versionLabel":"v3.1","source":"NVD","score":7.5,"severity":"high","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","exploitability":null,"impact":null,"computed":false}]},"epss":{"probability":0.00612,"percentile":0.48372,"severity":"low","asOf":"2026-10-20T00:00:00.000Z","change":{"pp":0.10199999999999992,"baselineDate":"2026-09-20T00:00:00.000Z","baselineScore":0.0051},"history":[{"date":"2026-09-14T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-15T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-16T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-17T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-18T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-19T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-20T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-21T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-22T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-23T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-24T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-09-25T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-09-26T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-09-27T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-09-28T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-09-29T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-09-30T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-01T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-02T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-03T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-04T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-05T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-06T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-07T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-20T00:00:00.000Z","score":0.00612,"percentile":0.48372}],"last30":[{"date":"2026-09-20T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-21T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-22T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-23T00:00:00.000Z","score":0.0051,"percentile":null},{"date":"2026-09-24T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-09-25T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-09-26T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-09-27T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-09-28T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-09-29T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-09-30T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-01T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-02T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-03T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-04T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-05T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-06T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-07T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00612,"percentile":null},{"date":"2026-10-20T00:00:00.000Z","score":0.00612,"percentile":0.48372}]},"kev":{"state":"not-listed","entries":[],"listedCount":0,"totalCatalogs":3,"catalogs":[{"source":"cisa","label":"CISA","listed":false,"entry":null},{"source":"enisa","label":"ENISA","listed":false,"entry":null},{"source":"circl","label":"CIRCL","listed":false,"entry":null}]},"ransomware":{"state":"none-recorded","sources":[]},"exploits":[],"exploitCount":0,"weaknesses":[{"id":"CWE-22","name":"Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')","description":"The product uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the product does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.","type":"weakness","status":"Stable","abstraction":"Base","likelihoodOfExploit":"High","url":"https://cwe.mitre.org/data/definitions/22.html"}],"affected":[{"vendor":"geopython","product":"pygeoapi","name":"pygeoapi","label":"pygeoapi","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"≥ 0.23.0, < 0.23.3","noFixRecorded":false,"fixedIn":null}],"versionsText":"≥ 0.23.0, < 0.23.3","eol":null,"hubHref":"/vendor/geopython/pygeoapi"},{"vendor":"PyPI","product":"pygeoapi","name":"pygeoapi","label":"pygeoapi","ecosystem":"PyPI","cpePart":null,"purl":"pkg:pypi/pygeoapi","purlType":"pypi","versions":[{"text":"≥ 0.23.0, < 0.23.3","noFixRecorded":false,"fixedIn":null}],"versionsText":"≥ 0.23.0, < 0.23.3","eol":null,"hubHref":null}],"affectedCount":2,"eol":{"hasEol":false,"count":0},"references":[{"url":"https://github.com/geopython/pygeoapi/security/advisories/GHSA-f6pr-83pg-ghh6","label":"github.com/geopython/pygeoapi/security/advisories/GHSA-f6pr-83pg-ghh6","hostname":"github.com","tags":["X Refsource CONFIRM","WEB"]},{"url":"https://github.com/geopython/pygeoapi/commit/bf25b8695edbdd5476eeffc102b633d1d3e45f52","label":"github.com/geopython/pygeoapi/commit/bf25b8695edbdd5476eeffc102b633d1d3e45f52","hostname":"github.com","tags":["X Refsource MISC","WEB"]},{"url":"https://github.com/geopython/pygeoapi/releases/tag/0.23.3","label":"github.com/geopython/pygeoapi/releases/tag/0.23.3","hostname":"github.com","tags":["X Refsource MISC","WEB"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-42351","label":"nvd.nist.gov/vuln/detail/CVE-2026-42351","hostname":"nvd.nist.gov","tags":["Advisory"]},{"url":"https://github.com/geopython/pygeoapi","label":"github.com/geopython/pygeoapi","hostname":"github.com","tags":["PACKAGE"]},{"url":"https://pypi.org/project/pygeoapi","label":"pypi.org/project/pygeoapi","hostname":"pypi.org","tags":["PACKAGE"]},{"url":"https://github.com/advisories/GHSA-f6pr-83pg-ghh6","label":"github.com/advisories/GHSA-f6pr-83pg-ghh6","hostname":"github.com","tags":["Advisory"]}],"lineage":{"upstream":[],"downstream":[],"duplicates":[],"related":[]},"timeline":[{"kind":"published","date":"2026-05-08T22:31:18.001Z","label":"Published","detail":"Vulnerability first disclosed.","source":null},{"kind":"modified","date":"2026-05-12T02:13:37.972Z","label":"Last modified","detail":"Vulnerability information updated.","source":null}],"risk":{"score":30,"level":"medium","profile":"Default","thresholds":{"critical":75,"high":50,"medium":25,"low":10}},"meta":{"dataAsOf":"2026-10-20T18:48:15.225Z","stale":false,"partial":false}}