Python, 35년 된 API `os.path.commonprefix()` 폐기 결정
Python 표준 라이브러리 `os.path.commonprefix()` 함수가 보안 문제(Security Issues)와 사용자 혼란(User Confusion)을 야기하여 폐기될 예정임
함수의 위치(os.path 모듈)와 이름이 경로(Path) 관련 기능으로 오해받아 잘못 사용되는 사례가 빈번했음
`pip` 라이브러리를 포함, 다양한 프로젝트에서 해당 함수를 잘못 사용하여 경로 조작(Path Traversal) 취약점이 발생했음
`pathlib` 사용 권장 및 정적 분석 도구(Static Code Analysis)를 통한 안전한 코드 작성을 강조함
`os.path.commonprefix()`의 오해와 폐기 결정
Seth Larson은 35년 이상 사용된 `os.path.commonprefix()` 함수가 API 설계(API Design)의 문제점을 드러낸다고 지적한다. 특히, `os.path` 모듈 내 위치로 인해 경로 관련 함수로 오해받아 보안 취약점(Security Vulnerability)을 유발하는 사례가 다수 발생했다. 2002년부터 함수의 모호성이 지적되었음에도 불구하고, 하위 호환성(Backwards Compatibility) 유지를 위해 개선되지 못했다.
경로 조작(Path Traversal) 취약점의 실제 사례
`pip` 라이브러리에서 `os.path.commonprefix()`를 사용하여 경로 조작(Path Traversal) 취약점이 발생한 사례가 보고되었다. `is_within_directory()` 함수에서 이 함수를 잘못 사용하여, 압축 파일(Wheel Archive File)의 압축 해제 과정에서 임의의 파일에 접근할 수 있는 문제가 발생했다. Trellix의 CVE-2007-4559 완화 시도에서도 동일한 문제가 발견되었다.
API 설계의 중요성: 라벨링(Labeling)과 의도
Larson은 API의 라벨링(Labeling), 즉 모듈, 이름, 매개변수를 통해 사용자가 API의 의도를 파악해야 한다고 강조한다. `os.path.commonprefix()`의 경우, `os.path` 모듈에 위치하여 경로 관련 기능으로 오해받기 쉬웠다. 이는 문서화(Documentation)만으로는 해결되지 않았으며, 정적 코드 분석(Static Code Analysis)과 같은 도구를 통해 안전성을 확보해야 한다.
커뮤니티의 반응: `pathlib` 사용 권장
커뮤니티에서는 `os.path` 모듈 대신 `pathlib` 사용을 권장하는 의견이 제시되었다. `pathlib`는 객체 지향적인 방식으로 경로를 처리하여, 코드 가독성(Code Readability)과 안전성(Security)을 높일 수 있다. 또한, `os.path.commonprefix()`와 같은 혼란스러운 API를 제거하고, 명확한 의도를 가진 API를 사용하는 것이 중요하다고 강조한다.