#1373·bandit

[Security] tarfile.extractall without member validation in examples/tarfile_extractall.py

Author: sudabgCreated Mar 16, 2026Updated Aug 29, 2026

Severity: HIGH (Bandit B202) File: examples/tarfile_extractall.py

Vulnerability

tarfile.extractall() without member validation allows path traversal (zip slip). A malicious archive can write files outside the target directory.

Fix

python
import os

SAFE_ID = __import__("re").compile(r"^[a-zA-Z0-9_.-]+$")

def _is_within_directory(directory, target):
    abs_directory = os.path.realpath(directory)
    abs_target = os.path.realpath(target)
    return abs_target.startswith(abs_directory + os.sep) or abs_target == abs_directory

def safe_extract(tar, path=".", members=None, *, numeric_owner=False):
    for member in tar.getmembers():
        member_path = os.path.join(path, member.name)
        if not _is_within_directory(path, member_path):
            raise Exception(f"Path traversal in tar: {member.name}")
    tar.extractall(path, members, numeric_owner=numeric_owner)

References