보안 정책¶
중요
Python 보안 대응 팀 (PSRT) 구성원은 이 업무와 다른 많은 책임 사이에서 균형을 맞춥니다. 보고서 검토에 필요한 시간과 주의를 신중하게 고려해 주십시오. 보안 정책을 반복해서 준수하지 않으면 기술적 타당성과 관계없이 향후 보고서가 거부되거나 보고자가 python GitHub 조직에서 차단될 수 있습니다.
어떤 유형의 버그가 취약점입니까?¶
모든 버그가 취약점인 것은 아닙니다.
PSRT 구성원의 중복 작업을 방지하려면 가능성이 있는 모든 보고서를 PSRT에 제출하기 전에 관련 위협 모델에 따라 평가해야 합니다. 가능하다면 버그를 취약점으로 보고할지 판단할 때 관련 위협 모델을 고려했음을 보여 주도록 해당 위협 모델을 인용하십시오.
취약점은 실제 환경에 존재할 수 있는 코드, 구성, 전제 조건 또는 배포 환경에서 악용할 수 있어야 합니다. 프로덕션 프로그램에서 사용될 가능성이 낮은 코드에만 영향을 미치는 취약점은 인정되지 않습니다.
문서화된 기능은 취약점으로 간주되지 않습니다. 예를 들어 pickle, marshal, shelve, eval(), exec()은 데이터로 제공된 임의의 Python 코드를 실행한다고 문서화되어 있습니다. 관련 ctypes 모듈은 메모리의 임의 위치를 수정할 수 있게 한다고 문서화되어 있습니다.
CPython은 신뢰할 수 없는 Python 코드를 샌드박스에서 실행하는 것을 보안 경계로 지원하지 않으므로, 그러한 샌드박스에서의 탈출은 Python의 취약점이 아니며 대신 해당 샌드박스의 개발자에게 보고해야 합니다.
취약점은 명령줄 인자, 환경 변수 또는 대상 시스템의 파일 수정 등을 포함하되 이에 국한되지 않는 Python 실행 조건의 악의적인 제어에 의존해서는 안 됩니다. Python이 실행되는 시점의 환경은 적법한 사용자가 의도한 상태이며, 이와 다른 악의적인 변형은 Python 자체에서 완화할 수 없다고 가정합니다.
가용성에 영향을 미치는 취약점(DoS, ReDoS, 충돌, 교착 상태, 리소스 고갈 등)은 해당 사용 사례에 적합한 합리적인 크기의 데이터 입력으로 유발할 수 있어야 합니다. 또한 가용성 취약점은 공격자의 입지가 “수평적”으로 변하는 것이 아니라 “상향”되었음을 입증해야 합니다. 이는 성능 개선을 보안 취약점으로 처리하지 않기 위한 것입니다.
예외는 입력을 처리할 때 예상되는 제어 흐름의 일부입니다. 처리되지 않은 예외는 충돌로 간주되지 않으며 그 자체로 보안 취약점이 아닙니다.
Python의 의존성(zlib, Tcl/Tk, OpenSSL 등)에 있는 취약점은 Python이 해당 의존성을 사용하는 방식이 의존성의 안전한 사용을 방해하지 않는 한 Python의 취약점이 아닙니다. 예를 들어 Python에 번들로 포함된 zlib 사본의 취약점은 Python이 아니라 zlib의 취약점입니다.
어떤 Python 버전에서 보고를 접수합니까?¶
Python은 상태가 “bugfix” 또는 “security”인 지원되는 Python 버전에 대한 취약점 보고를 접수하고 CVE ID를 할당합니다. 아직 안정화되지 않은 버전(상태가 “feature” 또는 “prerelease”인 버전)에는 CVE ID가 부여되지 않습니다. 취약점이 사전 릴리스 버전(알파, 베타, 릴리스 후보)에만 존재한다면 해당 이슈를 일반 버그로 보고해야 합니다. 보고서를 제출하기 전에 해당 이슈가 main 브랜치에서 이미 해결되어 백포트만 필요한지 확인하십시오.
안정적인 Python 버전에서도 기능이 “실험적”으로 표시되는 경우가 있습니다. 이러한 기능은 보안 취약점으로 인정되지 않습니다. 대신 공개 GitHub 이슈를 개설하십시오.
취약점이 플랫폼에 따라 달라지는 경우, 해당 플랫폼이 PEP 11에 따라 지원되는지 확인하십시오. 지원되지 않는 플랫폼에만 영향을 미치는 취약점은 Python의 취약점으로 취급되지 않습니다.
관련 Unsupported Platforms section of PEP 11에 따라, Python을 지원되지 않는 플랫폼으로 포팅하는 작업은 서드 파티 프로젝트로 취급됩니다. PSRT는 이러한 보고서를 Python 취약점이 아니라 서드 파티 포트에 대한 취약점 보고서로 취급합니다. 이러한 문제를 Python에 보고하기로 했다면 이 가이드의 요구 사항을 따르고 관련 플랫폼과 유지관리자에 관한 맥락을 포함하십시오. PSRT는 이러한 보고서를 플랫폼 유지관리자(또는 기타 이해관계자)에게 전달하며, 일반적으로 관련 유지관리자의 보안 정책에 따라 처리됩니다. 유지관리자를 알 수 없거나 유지관리자가 응답하지 않으면 이러한 보고서는 종결됩니다.
취약점 보고서에는 무엇을 포함하고 어떻게 구성해야 합니까?¶
취약점 보고서가 PSRT에서 효율적으로 처리되려면 보고서에 특정 정보를 포함하고 올바른 형식을 사용해야 합니다:
최초 보고와 후속 소통에서는 지나치게 긴 내용, 장황한 표현 또는 과도한 구조(예: 제목이나 표)를 피하십시오. 보고서는 취약점을 설명하는 몇 개의 문장으로 작성해야 합니다. 가능하다면 문제를 재현하고 취약점이 여전히 존재하는지를 명확히 보여 주는 개념 증명 스크립트(예: 취약한 경우
1로 종료하고 취약하지 않은 경우0으로 종료)를 포함하십시오.다수 또는 “일괄 묶음”의 취약점을 보고하거나 LLM을 사용하여 잠재적인 취약점을 검색하는 경우, 보고자는 PSRT에 제출하기 전에 모든 보고서 내용의 사실적 타당성(API가 환각으로 생성되었는지 여부 등)을 검증해야 합니다.
최초 보고서에 심각도나 CVSS 정보를 포함하지 마십시오. 이 정보는 PSRT에서 결정합니다.
가능하다면 보고된 문제의 완화책을 담은 최소한의 패치를 포함하십시오.
테스트한 Python 버전을 항상 포함하고, 그중 취약한 것으로 확인된 버전을 명시하십시오.
첨부 파일을 포함한 보고서는 일반 텍스트로만 제출하십시오. PDF, 바이너리, 노트북 또는 안전하게 검토할 수 없는 기타 파일은 제출하지 마십시오. 개념 증명이 특수하게 구성된 바이너리 파일에 의존하는 경우, 파일 자체 대신 해당 파일을 생성하는 스크립트를 포함하십시오.
몇 줄보다 긴 개념 증명 스크립트는 가독성을 높이기 위해
<details></details>를 사용하는 collapsed section으로 감싸야 합니다.잠재적인 보안 취약점을 포함하지 않은 보고서(예: 스팸 또는 규정 준수나 실사 작업 요청)는 답변 없이 폐기됩니다.
취약점 보고서는 어떻게 제출해야 합니까?¶
CPython의 모든 잠재적인 보안 취약점 보고서는 opening a new ticket 방식으로 제출하십시오. 보안 취약점을 보고하기 위해 공개 GitHub 이슈를 열지 마십시오. 그 밖의 모든 프로젝트(예: pip, python.org 및 도구)에 관한 보고서이거나 보고서를 어디로 보내야 할지 확실하지 않은 경우 security@python.org로 이메일을 보내십시오.
취약점 보고서가 처리되는 방식은 다음과 같습니다:
보고자는 취약점을 PSRT에 비공개로 보고합니다.
PSRT가 보고된 내용을 취약점이 아니라고 판단하면 보고자는 공개 이슈를 열 수 있습니다.
PSRT가 보고된 내용을 취약점이라고 판단하면 PSRT는 보고서를 수락하고 PSF CNA가 CVE ID를 할당합니다. 보고서와 ID는 임시 상태로 여전히 변경될 수 있으므로, 해당 레코드가 공개되기 전에는 할당된 CVE ID를 공개적으로 언급하지 마십시오.
수정 사항이 포함된 공개 풀 리퀘스트가 CPython에 병합되면 기여자 명시와 함께 보안 권고 및 CVE 레코드가 공개됩니다.
PSRT가 취약점을 처리하는 방식에 대한 자세한 내용은 취약점 보고서 트리아지를 참조하십시오.
보안 수정 사항은 언제 릴리스되거나 백포트됩니까?¶
권고문과 CVE 레코드는 보안 수정 사항이 처음 병합된 후 공개됩니다. CVE 레코드에는 패치에 관한 정보가 포함되며, 패치가 Python 버전에 백포트되고 릴리스됨에 따라 최신 상태로 유지됩니다.
관련 PEP 602에 따르면 Python 버전은 새로운 Python 버전이 릴리스된 후 5년 동안 보안 업데이트를 받습니다. 그러나 이러한 보안 업데이트는 정해진 일정에 따라 공개되지 않으며, 보안 수정 사항이 제공된다고 해서 공개되는 것도 아닙니다. 보안 업데이트 일정은 릴리스 관리자가 결정합니다. 필요한 경우 패치가 병합되고 릴리스되기 전에 사용자가 직접 패치를 적용할 것을 권장합니다.
바이너리 설치 프로그램(예: macOS 및 Windows)에만 영향을 미치는 보안 수정 사항은 소스 전용 Python 릴리스 스트림에 공개되지 않습니다.
일부 보안 수정 사항에는 하위 호환되지 않는 동작 변경이 필요할 수 있습니다. 이러한 상황에서는 Python 운영 위원회가 관련 릴리스 관리자들과 함께 안정 버전의 보안 취약점을 수정하기 위해 하위 호환되지 않는 변경을 도입할지 결정합니다. 이는 보안 수정 사항을 모든 Python 버전에 백포트할지 또는 기본적으로 활성화할지에 영향을 줄 수 있습니다. 자세한 내용은 CVE 레코드를 참조하십시오.
행동 강령¶
Python 보안 대응 팀 구성원의 안녕과 안전은 취약점 보고서의 기술적 가치보다 우선시됩니다. 의사소통은 비공개로 이루어지지만, 취약점 보고에는 PSF Code of Conduct가 적용됩니다. 위반 사항은 해당하는 경우 미공개 취약점 정보를 제거한 후 행동 강령 팀에 보고됩니다.
CVE 번호 지정 기관(CNA)¶
Python 및 pip 프로젝트는 Python Software Foundation CVE Numbering Authority (CNA)의 관할 범위에 속합니다. 이는 Python 또는 pip에 대한 CVE ID를 발급받으려면 모든 보안 취약점 보고서를 PSRT에 제출해야 한다는 의미입니다. PSF CNA 담당자에게 직접 연락하려면 cna@python.org로 이메일을 보내십시오.