crate / crate/crate-python

[Security] tarfile.extractall without member validation in src/crate/testing/layer.py

Abierto
#794 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
85
Forks
34
Merge medio
3 d 16 h
PR fusionados (30 d)
3

Descripción

**Severity**: HIGH (Bandit B202)
**File**: `src/crate/testing/layer.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
- CWE-22: Path Traversal
- Bandit B202
- [OWASP: Zip Slip](https://owasp.org/www-community/attacks/Zip_Slip)

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.