Bug 2219408

Summary: [RHEL8] oscap-anaconda-addon: Python tarfile extraction needs change to avoid a warning (CVE-2007-4559 mitigation)
Product: Red Hat Enterprise Linux 8 Reporter: Charalampos Stratakis <cstratak>
Component: oscap-anaconda-addonAssignee: Matěj Týč <matyc>
Status: CLOSED ERRATA QA Contact: Release Test Team <release-test-team-automation>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 8.9CC: cstratak, jcerny, jikortus, jstodola, matyc, mhaicman, pviktori, release-test-team-automation, wsato
Target Milestone: rcKeywords: Triaged
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: oscap-anaconda-addon-1.2.1-14.el8 Doc Type: No Doc Update
Doc Text:
Story Points: ---
Clone Of: 2218875 Environment:
Last Closed: 2023-11-14 15:36:18 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 2218875    
Bug Blocks: 263261    

Description Charalampos Stratakis 2023-07-03 13:57:18 UTC
+++ This bug was initially created as a clone of Bug #2218875 +++

Hello,
In RHEL 9.3 and 8.9, we're planning to fix the long-standing CVE-2007-4559: Python's `tarfile` module makes it too easy to extract tarballs in an unsafe way.
Unfortunately, for the CVE to be considered fixed, this needs a behavior change. (If you don't think this is the case, let's bring it up with the security team.)
Upstream, Python will emit deprecation warnings for 2 releases, but in RHEL we change the behavior now, emit warnings, and provide ways for customers to restore earlier behavior.
To avoid the warning, software shipped by Red Hat will need a change.

For more details see upstream PEP 706: https://peps.python.org/pep-0706
and the Red Hat knowledge base draft: https://access.redhat.com/articles/7004769

---

In /usr/share/anaconda/addons/org_fedora_oscap/common.py, oscap-anaconda-addon calls `tfile.extractall()`. The call will emit a warning by default. To prevent that, add something like this before the call:

tfile.extraction_filter = getattr(tarfile, 'data_filter',
                                  (lambda member, path: member))

This is compatible with unpatched versions of Python. If you only build for RHEL8.9+, instead add an argument to the call:
`tfile.extractall(path=out_dir, filter='data')`.

The 'data' filter above attempts a "safe" extraction, intended for pure data archives. For example:
- prevents extracting outside the target directory, and to absolute paths (by raising an exception)
- prevents symlinks pointing outside the target directory, and to absolute paths
- adjusts permissions (for the owner, only the executable bit is honored)
See PEP 706 for details: https://peps.python.org/pep-0706/#filters

If you trust the tarball, use `'fully_trusted_filter'` (or `filter='fully_trusted'`) instead. That will preserve the existing behavior.

---

Let me know if you have any questions!

Comment 1 Jan Černý 2023-07-18 11:40:19 UTC
a fix has been merged to upstream: https://github.com/OpenSCAP/oscap-anaconda-addon/pull/249

Comment 3 Jan Stodola 2023-08-01 13:53:09 UTC
The changes from https://github.com/OpenSCAP/oscap-anaconda-addon/pull/249 are applied in oscap-anaconda-addon-1.2.1-13.el8.

Setting Verified:Tested,SanityOnly

Comment 8 errata-xmlrpc 2023-11-14 15:36:18 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (oscap-anaconda-addon bug fix and enhancement update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2023:7048