{"id":"CVE-2026-42810","summary":"Apache Polaris: could broaden vended S3 credentials through wildcard-bearing namespace or table names","details":"Apache Polaris accepts literal `*` characters in namespace and table names. When it\nlater builds temporary S3 access policies for delegated table access, those\nsame characters appear to be reused unescaped in S3 IAM resource patterns\nand\n`s3:prefix` conditions.\n\n\n\nIn S3 IAM policy matching, `*` is treated as a wildcard rather than as\nordinary text. That means temporary credentials issued for one crafted table\ncan match the storage path of a different table.\n\n\n\nIn private testing against Polaris 1.4.0 using Polaris' AWS S3 temporary-\ncredential path on both MinIO and real AWS S3, credentials returned for\ncrafted tables such as `f*.t1`, `f*.*`, `*.*`, and `foo.*` could reach other\ntables' S3 locations.\n\n\nThe confirmed behavior includes:\n\n\n- reading another table's metadata control file ([Iceberg metadata JSON]);\n\n- listing another table's exact S3 table prefix ([table prefix]);\n\n- and, when write delegation was returned for the crafted table, creating\nand\ndeleting an object under another table's exact S3 table prefix.\n\n\n\nA control case using ordinary different names did not allow the same\ncross-table access.\n\n\n\nA least-privilege AWS S3 variant was also confirmed in which the attacker\nprincipal had no Polaris permissions on the victim table and only the\nminimal permissions required to create and use a crafted wildcard table\n(namespace-scoped `TABLE_CREATE` and `TABLE_WRITE_DATA` on `*`). In that\nsetup, direct Polaris access to `foo.t1` remained forbidden, but the\nattacker\ncould still create and load `*.*`, receive delegated S3 credentials, and use\nthose credentials to list, read, create, and delete objects under `foo.t1`.\n\n\n\nIn Iceberg, the metadata JSON file is a control file: it tells readers which\ndata files belong to the table, which snapshots exist, and which table\nversion\nto read. So unauthorized access to it is already a meaningful\nconfidentiality\nproblem. The confirmed write-capable variant means the issue is not limited\nto\ndisclosure.","aliases":["GHSA-vxgg-mqx2-3w59"],"modified":"2026-07-15T01:49:19.597294226Z","published":"2026-05-04T16:48:49.754Z","database_specific":{"cna_assigner":"apache","cwe_ids":["CWE-116","CWE-20"],"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/42xxx/CVE-2026-42810.json","unresolved_ranges":[{"source":"AFFECTED_FIELD","extracted_events":[{"fixed":"1.4.1"}]}]},"references":[{"type":"WEB","url":"http://www.openwall.com/lists/oss-security/2026/05/02/11"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/42xxx/CVE-2026-42810.json"},{"type":"ADVISORY","url":"https://lists.apache.org/thread/gg3qq9sqg4hdjmprqy46p40xmln61dm9"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-42810"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/apache/polaris","events":[{"introduced":"0"},{"fixed":"9569f2d24c08f926cf768290fda7680cdb1e1611"}],"database_specific":{"extracted_events":[{"introduced":"0"},{"fixed":"1.4.1"}],"source":"CPE_RANGE","cpe":"cpe:2.3:a:apache:polaris:*:*:*:*:*:*:*:*"}}],"versions":["apache-polaris-1.4.0-rc2","apache-polaris-1.4.0","apache-polaris-1.4.0-rc1","apache-polaris-1.4.0-rc0"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-42810.json"}}],"schema_version":"1.7.5","severity":[{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H"}]}