What — extract_tarball() calls tar.extractall(filter=None) on the non-progress path, and on the progress path passes a custom _filter that returns tinfo unmodified. Both bypass Python's data_filter, so a tarball member with an absolute path or ../ traversal is written wherever it points.
Why it matters here — This is the CVE-2007-4559 class. It matters here because StandalonePython.FromTarball(fpath) accepts an arbitrary caller-supplied path, and FromDistro() downloads from a configurable asset_url_prefix rather than a pinned source. The default path is a trusted HTTPS distro, which is why this is recommended and not critical — but the entry point is general.
Worth being clear: this was a knowing tradeoff, not an oversight. The code carries # TODO: ideally we'd use data_filter here, but it's busted: https://github.com/python/cpython/issues/107845. The ask is to recheck whether that upstream bug is still open on the Python versions comfy-cli now supports, not to fix a mistake.
Evidence
$ ruff check --select S202 --output-format concise comfy_cli
comfy_cli/utils.py:174:13: S202 Uses of `tarfile.extractall()`
comfy_cli/utils.py:195:13: S202 Uses of `tarfile.extractall()`
$ sed -n '173,175p;184,195p' comfy_cli/utils.py
with tarfile.open(inPath) as tar:
tar.extractall(filter=None)
...
def _filter(tinfo: tarfile.TarInfo, _path: PathLike):
...
# TODO: ideally we'd use data_filter here, but it's busted: cpython#107845
# return tarfile.data_filter(tinfo, _path)
return tinfo
$ grep -n 'extract_tarball' comfy_cli/standalone.py
128: extract_tarball(inPath=fpath, outPath=rpath, show_progress=show_progress)
Fix
Recheck cpython#107845 against the minimum supported Python. If it is fixed, switch both paths to data_filter. If not, keep the progress callback for UI but have _filter delegate to tarfile.data_filter(tinfo, _path) for the safety decision — the progress bar and the filter are separable concerns, and the current code conflates them.
Found by repo-audit during repo improvement sweep 2026-08-17. Parent: #723
What —
extract_tarball()callstar.extractall(filter=None)on the non-progress path, and on the progress path passes a custom_filterthat returnstinfounmodified. Both bypass Python'sdata_filter, so a tarball member with an absolute path or../traversal is written wherever it points.Why it matters here — This is the CVE-2007-4559 class. It matters here because
StandalonePython.FromTarball(fpath)accepts an arbitrary caller-supplied path, andFromDistro()downloads from a configurableasset_url_prefixrather than a pinned source. The default path is a trusted HTTPS distro, which is why this isrecommendedand notcritical— but the entry point is general.Worth being clear: this was a knowing tradeoff, not an oversight. The code carries
# TODO: ideally we'd use data_filter here, but it's busted: https://github.com/python/cpython/issues/107845. The ask is to recheck whether that upstream bug is still open on the Python versions comfy-cli now supports, not to fix a mistake.Evidence
Fix
Recheck cpython#107845 against the minimum supported Python. If it is fixed, switch both paths to
data_filter. If not, keep the progress callback for UI but have_filterdelegate totarfile.data_filter(tinfo, _path)for the safety decision — the progress bar and the filter are separable concerns, and the current code conflates them.Found by
repo-auditduring repo improvement sweep 2026-08-17. Parent: #723