피드로 돌아가기
Python 3.12.12, 3.11.14, 3.10.19 and 3.9.24 are now available!
Python InsiderPython Insider
Security

Python 보안 릴리스(3.12.12, 3.11.14, 3.10.19, 3.9.24)에서 tarfile, zipfile, html.parser의 검증 로직 강화로 악의적 입력 처리 시 이차 복잡도 제거 및 HTML5 표준 준수

Python 3.12.12, 3.11.14, 3.10.19 and 3.9.24 are now available!

Thomas Wouters2025년 10월 9일6intermediate

Context

Python의 tarfile, zipfile, html.parser 모듈들이 악의적으로 조작된 아카이브와 HTML 입력에 대해 취약점을 가지고 있었습니다. html.parser에서는 특수 제작 입력에 대해 이차 복잡도(quadratic complexity) 처리로 인한 성능 저하가 발생했으며, HTML5 표준과 불일치하는 파싱 동작이 보안 우회를 야기할 수 있었습니다.

Technical Solution

  • tarfile 아카이브 검증: 멤버 오프셋 음수 확인 추가(gh-130577)
  • zipfile 검증: zip64 중앙 디렉터리 레코드 일관성 검사 및 "zip64 extensible data" 지원 추가(gh-139700)
  • html.parser 태그 파싱 표준화: HTML5 표준에 따라 </ 와 태그명 사이의 공백 거부, \v 및 비ASCII 공백 제거, Null 문자(U+0000)로 태그명 종료 금지(gh-135661)
  • html.parser 속성 처리 개선: 따옴표 속성값 내 > 이후의 속성과 슬래시 무시, 속성명과 값 사이의 복수 = 기호 유지(gh-135661)
  • html.parser 성능 최적화: 특수 제작 입력 처리 시 이차 복잡도 제거, 파일 끝 오류를 HTML5 스펙에 따라 자동 종료 처리(gh-135462)
  • html.parser CDATA 파싱: HTML5 표준 준수로 ] ]> 와 ]] > 를 CDATA 섹션 종료로 인식하지 않도록 수정, 외국어 콘텐츠(SVG/MathML)와 HTML 네임스페이스 처리 분리(gh-135661)
  • html.parser 주석 파싱: --!> 를 주석 종료로 인식, -- > 는 종료로 인식하지 않음, 비정상 종료 빈 주석(<-->, <--->) 지원(gh-102555)
  • html.parser 미종료 태그 처리: <script> 태그 미종료 시 데이터 손실 방지(gh-86155)
  • html.parser 이스케이프 가능 원본 텍스트: textarea와 title 요소 처리 지원(gh-118350)

Impact

아티클에 성능 개선 수치 또는 보안 취약점 심각도 등급이 명시되지 않았습니다.

Key Takeaway

표준 준수(HTML5)와 입력 검증을 통해 보안 취약점을 제거할 때, 악의적 입력에서의 이차 복잡도 제거와 엣지 케이스 처리가 동일하게 중요한 고려사항입니다.


Python을 사용하는 개발 팀에서 사용자 업로드 아카이브(tar/zip)나 HTML 콘텐츠를 파싱하는 서비스의 경우,

3.

1

2.12,

3.

1

1.14,

3.

1

0.19,

3.

9.24 이상으로 업그레이드하면 악의적 입력으로 인한 서비스 거부 공격(DoS)과 파싱 우회를 방지할 수 있습니다.

원문 읽기