tar-codec - uv가 도입한 빠르고 안전한 Rust tar 파서

5 days ago 15

Astral이 같은 tar 파일을 도구마다 다르게 해석하는 문제를 줄이기 위해 Rust 라이브러리 tar-codec를 개발함. uv 자체 벤치마크에서 기존 구현보다 약 2배 빠르며, uv 0.13부터 기본으로 사용함 핵심 동기는 보안임. 조작된 아카이브가 패키지 인덱스의 검사에서는 정상 파일로 보이지만, 설치 도구에서는 다른 파일이나 악성 내용을 추출하게 만들 수 있음 tar는 여러 형식과 확장이 누적된 계열이므로, 헤더의 크기와 이름을 어떤 순서로 해석하느냐에 따라 결과가 달라짐. 첫 헤더에서 형식 계열을 고정하고 모호한 혼용을 거부하도록 설계함 블록 해석, 파일 항목 조립, 디스크 추출을 계층으로 나누고, 추출 범위를 지정 디렉터리에 제한해 링크와 경로 순회 관련 위험을 줄임 관대한 입력 수용보다 잘못된 입력을 명확히 거부하는 구조를 택했지만 모든 해석 차이의 제거를 보장하지는 않음. 안전한 파일 추출에는 추가 비용이 들며, 특히 macOS에서 성능에 영향을 줌 Python 패키지 설치에 tar가 필요한 이유 uv는 PyPI 같은 패키지 인덱스에서 설치 가능한 배포본을 받아 사용자를 대신해 설치함 Python 배포본은 크게 빌드 배포본(bdist/wheel) 과 소스 배포본(sdist) 으로 나뉨 wheel은 구조화된 메타데이터와 정해진 디렉터리 배치를 담은 ZIP 아카이브로, 설치기는 내용을 적절한 위치에 배치함 bdist의 ‘built’는 빌드 백엔드로 생성했다는 뜻이며, 네이티브 코드가 있다는 뜻은 아님. 순수 Python 패키지도 더 빠르고 안정적인 설치를 위해 wheel로 배포함 sdist는 기본적으로 릴리스 시점의 소스 트리를 묶은 tar 아카이브임 sdist는 설치 과정에서 임의 코드를 실행하므로 강력하지만, 빌드 도구나 의존성이 빠지면 실패할 수 있고 공격자가 제어하면 사용자가 import하지 않아도 코드를 실행할 수 있음 과거에는 루트에 pyproject.toml이나 setup.py가 있는 소스 아카이브에 가까웠음 최근 표준은 표준 메타데이터를 담은 PKG-INFO를 요구하지만, 빌드 시스템을 실행해야 메타데이터를 얻을 수 있는 배포본도 여전히 많음. 관련 표준은 PEP 643임 wheel은 일반적으로 sdist에 빌드 백엔드를 실행해 생성하며, uv_build, maturin, flit 등이 해당함 따라서 Python 패키지 설치기는 최소한 ZIP과 tar를 모두 처리해야 함. ZIP 관련...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵