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