renovate-bot opened a new pull request, #6911:
URL: https://github.com/apache/texera/pull/6911

   This PR contains the following updates:
   
   | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | 
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
   |---|---|---|---|
   | [setuptools](https://redirect.github.com/pypa/setuptools) 
([changelog](https://setuptools.pypa.io/en/stable/history.html)) | `==80.10.2` 
→ `==83.0.0` | 
![age](https://developer.mend.io/api/mc/badges/age/pypi/setuptools/83.0.0?slim=true)
 | 
![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/setuptools/80.10.2/83.0.0?slim=true)
 |
   
   ---
   
   > [!WARNING]
   > Some dependencies could not be looked up. Check the Dependency Dashboard 
for more information.
   
   ---
   
   ### setuptools: MANIFEST.in exclusion bypass in sdist via Unicode 
normalization collision (NFC/NFD) on macOS APFS/HFS+
   BIT-setuptools-2026-59890 / 
[CVE-2026-59890](https://nvd.nist.gov/vuln/detail/CVE-2026-59890) / 
[GHSA-h35f-9h28-mq5c](https://redirect.github.com/advisories/GHSA-h35f-9h28-mq5c)
 / PYSEC-2026-3447
   
   <details>
   <summary>More information</summary>
   
   #### Details
   ##### Summary
   
   When building a source distribution (`python -m build --sdist` / `setup.py 
sdist`), setuptools' `FileList` applies `MANIFEST.in` directives (`exclude`, 
`global-exclude`, `recursive-exclude`, `prune`) by matching a compiled glob 
against on-disk file names **byte-for-byte, with no Unicode normalization**. On 
normalization-preserving filesystems (notably macOS APFS and HFS+), a file 
written in NFD and a `MANIFEST.in` rule written in NFC refer to the same file 
but are byte-distinct, so the exclusion silently fails to match. A file the 
maintainer intended to exclude is then packed into the `.tar.gz` and, if 
published, uploaded to the public, immutable PyPI index.
   
   ##### Details
   
   File names in `FileList.files` come from `os.walk` 
(`setuptools/_distutils/filelist.py`, `_find_all_simple`), so on APFS a file 
written NFD is offered to the matcher in NFD, while the `MANIFEST.in` pattern 
carries the author's editor form (typically NFC). The matching path performs no 
canonicalization:
   
   ```python
   
   ##### setuptools/command/egg_info.py  (FileList.global_exclude)
   def global_exclude(self, pattern):
       match = translate_pattern(os.path.join('**', pattern))   # 
fnmatch.translate -> regex, no NFC/NFD
       return self._remove_files(match.match)                   # byte-level 
regex over raw os.walk names
   ```
   
   A rule written NFC (`café` = `63 61 66 c3 a9`) does not match an on-disk 
name written NFD (`café` = `63 61 66 65 cc 81`), even though the filesystem 
treats the two as one file.
   
   A `unicodedata.normalize('NFD', ...)` helper exists in 
`setuptools/unicode_utils.py` (`decompose()`), but it is **never called in the 
manifest matching path**, so neither the pattern nor the walked path is 
normalized before matching. The only normalization in this area, 
`EggInfoCommand._manifest_normalize`, uses `filesys_decode` (bytes→str decode 
only, no NFC/NFD) and runs when writing `SOURCES.txt`, after matching has 
already occurred.
   
   ##### Impact
   
   `MANIFEST.in` exclusions are the documented mechanism maintainers use to 
keep secrets, local configs, and private fixtures out of the published sdist. A 
non-ASCII excluded file may be published to the public, immutable PyPI index 
despite the rule — an irreversible disclosure with no visual cue (NFC and NFD 
forms render identically). Exposure is filesystem-dependent and most relevant 
on macOS APFS/HFS+, where many maintainers build and publish. Pure-ASCII rules 
are unaffected.
   
   ##### Proof of concept
   
   With a project containing `MANIFEST.in`:
   
   ```
   global-include *.txt *.json
   global-exclude secret_café.txt    # rule saved NFC
   ```
   
   and an on-disk file `secret_café.txt` written in NFD, `python -m build 
--sdist` packs the secret file into the resulting `.tar.gz`, while an ASCII 
control file excluded by the same directive is correctly dropped — isolating 
the bypass to the NFC-pattern vs. NFD-name mismatch. Reproduced on macOS APFS 
with setuptools 82.0.1.
   
   ##### Remediation
   
   Normalize both the walked path and each `MANIFEST.in` pattern to a single 
canonical form before matching, in both `setuptools/command/egg_info.py` 
(`FileList`) and the vendored `setuptools/_distutils/filelist.py`. For an 
exclusion list, err toward excluding more, and document that `MANIFEST.in` 
matching is normalization-insensitive on macOS.
   
   ##### Credit
   
   Reported by Tomas Illuminati. Coordinated via CERT/CC VINCE VU#604762.
   
   #### Severity
   - CVSS Score: 6.1 / 10 (Medium)
   - Vector String: `CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:N`
   
   #### References
   - 
[https://github.com/pypa/setuptools/security/advisories/GHSA-h35f-9h28-mq5c](https://redirect.github.com/pypa/setuptools/security/advisories/GHSA-h35f-9h28-mq5c)
   - 
[https://nvd.nist.gov/vuln/detail/CVE-2026-59890](https://nvd.nist.gov/vuln/detail/CVE-2026-59890)
   - 
[https://github.com/pypa/setuptools/commit/dd9f436a36486b4cb8a4c70a2321548b0be09b8f](https://redirect.github.com/pypa/setuptools/commit/dd9f436a36486b4cb8a4c70a2321548b0be09b8f)
   - 
[https://github.com/pypa/advisory-database/tree/main/vulns/setuptools/PYSEC-2026-3447.yaml](https://redirect.github.com/pypa/advisory-database/tree/main/vulns/setuptools/PYSEC-2026-3447.yaml)
   - 
[https://github.com/pypa/setuptools](https://redirect.github.com/pypa/setuptools)
   - 
[https://github.com/pypa/setuptools/releases/tag/v83.0.0](https://redirect.github.com/pypa/setuptools/releases/tag/v83.0.0)
   
   This data is provided by 
[OSV](https://osv.dev/vulnerability/GHSA-h35f-9h28-mq5c) and the [GitHub 
Advisory Database](https://redirect.github.com/github/advisory-database) 
([CC-BY 
4.0](https://redirect.github.com/github/advisory-database/blob/main/LICENSE.md)).
   </details>
   
   ---
   
   ### BIT-setuptools-2026-59890 / 
[CVE-2026-59890](https://nvd.nist.gov/vuln/detail/CVE-2026-59890) / 
[GHSA-h35f-9h28-mq5c](https://redirect.github.com/advisories/GHSA-h35f-9h28-mq5c)
 / PYSEC-2026-3447
   
   <details>
   <summary>More information</summary>
   
   #### Details
   setuptools is a package that allows users to download, build, install, 
upgrade, and uninstall Python packages. Prior to 83.0.0, FileList applied 
MANIFEST.in exclude, global-exclude, recursive-exclude, and prune directives by 
matching compiled glob patterns against on-disk file names without Unicode 
normalization, so on macOS APFS or HFS+ an NFD file name could bypass an NFC 
exclusion rule and be packed into a source distribution. This issue is fixed in 
version 83.0.0.
   
   #### Severity
   - CVSS Score: 6.1 / 10 (Medium)
   - Vector String: `CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:N`
   
   #### References
   - 
[https://github.com/pypa/setuptools/releases/tag/v83.0.0](https://redirect.github.com/pypa/setuptools/releases/tag/v83.0.0)
   - 
[https://github.com/pypa/setuptools/commit/dd9f436a36486b4cb8a4c70a2321548b0be09b8f](https://redirect.github.com/pypa/setuptools/commit/dd9f436a36486b4cb8a4c70a2321548b0be09b8f)
   - 
[https://github.com/pypa/setuptools/security/advisories/GHSA-h35f-9h28-mq5c](https://redirect.github.com/pypa/setuptools/security/advisories/GHSA-h35f-9h28-mq5c)
   
   This data is provided by 
[OSV](https://osv.dev/vulnerability/PYSEC-2026-3447) and the [PyPI Advisory 
Database](https://redirect.github.com/pypa/advisory-database) ([CC-BY 
4.0](https://redirect.github.com/pypa/advisory-database/blob/main/LICENSE)).
   </details>
   
   ---
   
   ### Release Notes
   
   <details>
   <summary>pypa/setuptools (setuptools)</summary>
   
   ### 
[`v83.0.0`](https://redirect.github.com/pypa/setuptools/compare/v82.0.1...v83.0.0)
   
   [Compare 
Source](https://redirect.github.com/pypa/setuptools/compare/v82.0.1...v83.0.0)
   
   ### 
[`v82.0.1`](https://redirect.github.com/pypa/setuptools/compare/v82.0.0...v82.0.1)
   
   [Compare 
Source](https://redirect.github.com/pypa/setuptools/compare/v82.0.0...v82.0.1)
   
   ### 
[`v82.0.0`](https://redirect.github.com/pypa/setuptools/compare/v81.0.0...v82.0.0)
   
   [Compare 
Source](https://redirect.github.com/pypa/setuptools/compare/v81.0.0...v82.0.0)
   
   ### 
[`v81.0.0`](https://redirect.github.com/pypa/setuptools/compare/v80.10.2...v81.0.0)
   
   [Compare 
Source](https://redirect.github.com/pypa/setuptools/compare/v80.10.2...v81.0.0)
   
   </details>
   
   ---
   
   ### Configuration
   
   📅 **Schedule**: (in timezone Etc/UTC)
   
   - Branch creation
     - At any time (no schedule defined)
   - Automerge
     - At any time (no schedule defined)
   
   🚦 **Automerge**: Disabled by config. Please merge this manually once you are 
satisfied.
   
   ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry 
checkbox.
   
   🔕 **Ignore**: Close this PR and you won't be reminded about this update 
again.
   
   ---
   
    - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this 
box
   
   ---
   
   This PR was generated by [Mend Renovate](https://mend.io/renovate/). View 
the [repository job log](https://developer.mend.io/github/apache/texera).
   
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODAuMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4MC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJyZWxlYXNlL3YxLjIiLCJzZWN1cml0eSJdfQ==-->
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to