
Dimostrazione di CVE-2025-62518: un bug critico di override della dimensione dell'header esteso PAX in tokio-tar e nelle librerie Rust async tar, con strumenti di riproduzione e analisi del blast radius.

Questo repository dimostra un bug critico in tokio-tar e nelle librerie Rust async correlate per tar, dove gli override della dimensione (size) dell'header esteso PAX non vengono applicati prima di calcolare la posizione dell'header successivo.
Causa principale: Quando si elaborano file tar con header estesi PAX che sovrascrivono la dimensione del file, la libreria utilizza il campo della dimensione ottale (spesso zero) invece dell'override PAX per i calcoli di posizione.
Impatto: Ciò causa al parser di saltare nel contenuto del file e scambiarlo per header tar, portando all'estrazione di file errati.
Librerie Note Affette:
async-tar https://github.com/dignifiedquire/async-tartokio-tar https://github.com/vorot93/tokio-tarkrata-tokio-tar astral-tokio-tar https://github.com/astral-sh/tokio-tar# Requirements: CMake, Rust/Cargo, C++ compiler, system tar command
cmake -S . -B build
cmake --build build --target generate_report
Questo farà:
build/output/├── disclosure/ # Security disclosure documentation tree
│ └── blast_radius/ # Record of projects depending on tokio-tar variants
├── repro_generator/ # C++ tool to generate a repro case tar file
├── tar-bug-detector/ # Rust tool comparing tar libraries
├── tarwalk/ # Correct C++ tar parser
│ ├── tarwalk.cpp # Handles PAX correctly
│ └── tarwalk_bad.cpp # Reproduces the same bug
├── CMakeLists.txt # Build system
├── generate_report.cmake # Report generation
└── README.md # This file
Header -> Content (size from octal field) -> Next Header
PAX Header (size=1024) -> File Header (octal size=0) -> Content (1024 bytes) -> Next Header
PAX Header (size=1024) -> File Header (octal size=0) -> Content (0 bytes) -> WRONG POSITION
↓
Reading content as headers!
Docker save crea file tar con:
etc/, usr/)pax_bug_compact.tar - Caso di riproduzione minimaleLibrerie corrette (GNU tar, crate tar sincrona):
normal.txt -> blob.bin -> marker.txt
Librerie errate (tokio-tar):
normal.txt -> blob.bin -> INNER_FILE -> marker.txt
L'apparizione di INNER_FILE indica il bug - la libreria è saltata nel contenuto di blob.bin e ha scambiato un falso header tar per una voce reale.
La correzione richiede l'applicazione degli override PAX prima dei calcoli di posizione:
// Read header
let mut file_size = header.size();
// Apply PAX overrides BEFORE calculating next position
if let Some(pax_size) = pending_pax.get("size") {
file_size = pax_size.parse().unwrap();
}
// Now calculate next header position using effective size
let next_pos = current_pos + 512 + pad_to_512(file_size);
Questo codice di riproduzione è fornito per scopi di ricerca sulla sicurezza e divulgazione responsabile.
Vedere COPYING per la licenza del codice sorgente originale.