파이썬 패키지 생태계의 핵심 허브인 PyPI(Python Package Index)가 새로운 보안 정책을 발표했습니다.
이번 조치는 ZIP 파서 혼동(Zip Parser Confusion) 공격이라는 조금 생소한 취약점 대응이 핵심인데요,
간단히 말하면 패키지 압축 해제 과정의 미묘한 차이를 악용해 악성 파일을 숨겨 설치하는 공격을 막기 위한 겁니다.
특히 uv 같은 일부 설치 도구와, 파이썬 표준 라이브러리 zipfile 모듈을 사용하는 설치기 사이에서
ZIP 파일을 해석하는 방식이 달라 발생하는 문제를 겨냥했죠.
📦 ZIP 파서 혼동 공격이 뭐길래?
ZIP 파일은 1989년(!)에 설계된 오래된 포맷입니다.
큰 파일을 여러 저장소에 나누어 저장하거나, 기존 압축 파일에 추가 기록을 덧붙이는 기능을 지원합니다.
문제는 이런 구조 때문에 동일한 ZIP 파일이라도 해석하는 방식에 따라 추출 결과가 달라질 수 있다는 것입니다.
파이썬의 배포 파일인 wheel(.whl)도 사실상 ZIP 포맷이기 때문에,
악의적인 제작자가 Local File Header와 Central Directory를 다르게 설정하거나,
중복 파일명·잘못된 위치 값을 넣으면, 설치기마다 다른 결과를 낼 수 있습니다.
💡 예를 들어, 리뷰나 자동 검사에서는 안전한 파일처럼 보이지만, 실제 설치 시엔 악성 코드가 덮어씌워질 수 있는 거죠.
📜 RECORD 파일과 검증의 허점
wheel 패키지에는 .dist-info 폴더 안에 RECORD 파일이 들어 있습니다.
여기에 패키지 내부 파일 목록과 체크섬이 기록돼 있어, 설치 도구가 이 목록과 실제 파일을 비교해 맞지 않으면 설치를 막는 구조죠.
하지만… 현실은 다릅니다. 😓
많은 설치 도구가 이 검증을 건너뛰고, 그냥 unzip처럼 압축을 풀고, 나중에 RECORD를 덮어써서 제거 기능만 맞춰둡니다.
결국 RECORD 검증이 무시되면, ZIP 구조를 악용한 우회 공격이 가능해집니다.
🛡 PyPI의 대응책
이번에 PyPI는 다음과 같은 강력한 업로드 검사 정책을 도입했습니다.
- 🚫 잘못된 RECORD 메타데이터 → 경고 후 6개월 후부터 업로드 거부 (2026년 2월 1일 적용)
- 🚫 Local Header와 Central Directory 불일치 → 거부
- 🚫 중복 파일명 → 거부
- 🚫 잘못된 Locator 값, 여러 개의 End of Central Directory 기록, 불필요한 트레일링 데이터 → 거부
- 🛡 압축 폭탄(Compression Bomb) 탐지 → 이미 적용 중
또한, Central Directory 기반 추출만 허용해, 설치기 해석 차이로 인한 혼동 가능성을 줄였습니다.
📊 영향도 분석
PyPI가 다운로드 상위 15,000개 파이썬 패키지를 분석한 결과:
- 13,468개 중 13,460개는 문제 없음
- 일부 패키지만 RECORD 누락, 불일치, 중복 파일 발견
즉, 대부분의 패키지는 이미 안전하고, 변화에 따른 혼란은 제한적일 것으로 보입니다.
🧩 개발자와 사용자에게 주는 시사점
- 패키지 제작자
- wheel 생성 시 RECORD 파일이 올바른지 꼭 확인
- 빌드 도구(setuptools, wheel, hatch, poetry) 최신 버전 유지
- 설치 도구 개발자
- RECORD 검증 로직 필수 적용
- Central Directory만 신뢰하는 ZIP 처리 구현
- 일반 사용자
- 별도 조치 필요 없음
- pip이나 설치 도구를 최신 버전으로 업데이트하면 자동 보호
🛠 보안적으로 중요한 이유
ZIP 파서 혼동 공격은 단순 코드 취약점이 아니라, 파일 포맷과 처리 로직의 차이를 노립니다.
즉, 코드 한 줄 버그가 아니라 설계 철학의 틈새를 파고드는 유형입니다.
이런 유형은 리뷰·검증 툴이 완벽하지 않아도 무조건 막아야 하는 보안 관문을 만드는 게 핵심입니다.
PyPI가 이번에 6개월 유예 → 완전 차단의 점진적 접근을 택한 건,
커뮤니티 충격 없이 보안 표준을 끌어올리려는 전략이라고 볼 수 있습니다. 🚀
📌 정리
- ZIP 파서 혼동 공격 = 압축 해제 로직 차이를 악용해 악성 파일을 숨기는 기법
- wheel 패키지 구조(RECORD 포함)와 설치기 검증 부재가 취약점의 원인
- PyPI, 업로드 단계에서 형식 오류·구조 불일치 ZIP 차단
- 2026년 2월부터 RECORD 불일치 패키지 전면 거부
- 사용자 피해 가능성은 낮지만, 개발자·설치기 제작자는 즉시 조치 필요
'CyberSecurity > Cyber Risk Insights🔐' 카테고리의 다른 글
| 🔐 Ivanti, Connect Secure·Policy Secure·ZTA Gateway 긴급 보안 패치 발표! – 원격 DoS 취약점 4종 수정 (2) | 2025.08.13 |
|---|---|
| 🚨 APT급 기술을 쓰는 신흥 랜섬웨어 ‘Charon’ 등장! – 중동 공공·항공 산업 첫 타깃 (1) | 2025.08.13 |
| 🖋️ eudcedit.exe로 UAC 우회? 윈도우 권한 상승 취약점 발견! (4) | 2025.08.11 |
| 🔓 BitUnlocker: Windows BitLocker를 무력화한 4가지 치명적 취약점 (4) | 2025.08.11 |
| 🛑 macOS 사용자를 노린 Odyssey Stealer: 가짜 CAPTCHA로 시작되는 암호화폐 지갑 탈취 캠페인 (2) | 2025.08.11 |

