CPython용 OSS-Fuzz

CPython은 다양한 API에 준무작위 데이터를 입력하여 버그와 보안 취약점을 찾기 위해 Google의 오픈 소스 프로젝트용 지속적 퍼징 서비스인 OSS-Fuzz를 사용합니다.

CPython에는 두 개의 OSS-Fuzz 프로젝트가 있습니다:

  • cpython3: 퍼즈 대상, 시드 코퍼스, 딕셔너리는 CPython의 Modules/_xxtestfuzz/ 디렉터리에서 찾을 수 있습니다. 이 프로젝트는 기존 퍼즈 대상을 위해 유지 관리되며, 새 대상은 python3-libraries에 추가하십시오.

  • python3-libraries: 퍼즈 대상, 시드 코퍼스, 딕셔너리는 python/library-fuzzers 저장소에서 찾을 수 있습니다. 저장소 접근 권한은 GitHub의 @python/fuzzers 팀을 통해 관리됩니다.

OSS-Fuzz 버그 보고서는 제출될 때 비공개이므로, 충돌 세부 정보와 재현 테스트 사례에 대한 접근 권한은 OSS-Fuzz 프로젝트 구성 파일의 auto_ccs 필드에 명시된 사람으로 제한됩니다. 명시된 사람은 Google 계정으로 https://oss-fuzz.com/ 사이트에 로그인하여 충돌 세부 정보, 재현 테스트 사례, 프로젝트 통계를 볼 수 있습니다. 접근 권한이 필요하면 @python/fuzzers 팀에 문의하십시오. 완료된 이슈와 90일 후에도 해결되지 않은 이슈는 OSS-Fuzz 이슈 추적기에서 공개적으로 볼 수 있습니다.

커버리지와 대상 통계는 cpython3python3-libraries OSS-Fuzz Introspector 프로젝트 프로필에서 확인할 수 있습니다.

또한 CIFuzz는 관련 파일을 변경하는 main 브랜치 대상 PR에 대해 GitHub Actions에서 퍼즈 대상을 실행합니다.

더 보기

OSS-Fuzz에서 사용하는 퍼징 엔진에 대한 자세한 내용은 libFuzzer 문서를 참조하십시오.

새 대상 추가하기

새 대상은 python3-libraries 프로젝트에 추가하십시오. 자세한 내용은 python/library-fuzzers 저장소의 문서를 참조하십시오.

새 대상이 표준 라이브러리 모듈을 포함한다면, 해당 모듈을 변경하는 풀 리퀘스트가 퍼징을 실행하도록 관련 CIFuzz 경로 구성을 업데이트하십시오. 관련 Tools/build/compute-changes.py에 있는 LIBRARY_FUZZER_PATHS 집합을 참조하십시오.