
CVE-2025-62518: TARmageddon

Dieses Repository demonstriert einen kritischen Fehler in tokio-tar und verwandten asynchronen Rust-Tar-Bibliotheken, bei dem PAX-Erweiterungskopfzeilen-size-Überschreibungen nicht angewendet werden, bevor die nächste Header-Position berechnet wird.
Grundursache: Bei der Verarbeitung von Tar-Dateien mit PAX-Erweiterungskopfzeilen, die die Dateigröße überschreiben, verwendet die Bibliothek das oktale Größenfeld (oft null) anstelle der PAX-Überschreibung für Positionsberechnungen.
Auswirkungen: Dies führt dazu, dass der Parser in Dateiinhalte springt und diese für Tar-Header hält, was zur Extraktion falscher Dateien führt.
Bekannte betroffene Bibliotheken:
async-tar https://github.com/dignifiedquire/async-tartokio-tar https://github.com/vorot93/tokio-tarkrata-tokio-tar https://github.com/edera-dev/tokio-tarastral-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
Dies wird:
build/output/ generieren├── disclosure/ # Dokumentationsbaum zur Sicherheitsoffenlegung
│ └── blast_radius/ # Aufzeichnung von Projekten, die von tokio-tar-Varianten abhängen
├── repro_generator/ # C++-Tool zum Generieren einer Reproduktions-Tar-Datei
├── tar-bug-detector/ # Rust-Tool zum Vergleichen von Tar-Bibliotheken
├── tarwalk/ # Korrekter C++-Tar-Parser
│ ├── tarwalk.cpp # Behandelt PAX korrekt
│ └── tarwalk_bad.cpp # Reproduziert denselben Fehler
├── CMakeLists.txt # Build-System
├── generate_report.cmake # Berichtsgenerierung
└── README.md # Diese Datei
Header -> Inhalt (Größe aus oktalem Feld) -> Nächster Header
PAX-Header (Größe=1024) -> Datei-Header (oktale Größe=0) -> Inhalt (1024 Bytes) -> Nächster Header
PAX-Header (Größe=1024) -> Datei-Header (oktale Größe=0) -> Inhalt (0 Bytes) -> FALSCHE POSITION
↓
Inhalt als Header lesen!
Docker save erstellt Tar-Dateien mit:
etc/, usr/)pax_bug_compact.tar - Minimaler ReproduktionsfallKorrekte Bibliotheken (GNU tar, synchrone tar-Crate):
normal.txt -> blob.bin -> marker.txt
Fehlerhafte Bibliotheken (tokio-tar):
normal.txt -> blob.bin -> INNER_FILE -> marker.txt
Das Auftreten von INNER_FILE deutet auf den Fehler hin – die Bibliothek sprang in den Inhalt von blob.bin und hielt einen gefälschten Tar-Header für einen echten Eintrag.
Die Korrektur erfordert die Anwendung von PAX-Überschreibungen vor den Positionsberechnungen:
// 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);
Dieser Reproduktionscode wird für Sicherheitsforschung und verantwortungsvolle Offenlegung bereitgestellt.
Siehe COPYING für die Lizenz des ursprünglichen Quellcodes.