CPython용 OSS-Fuzz

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

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 이슈 추적기에서 공개적으로 볼 수 있습니다.

커버리지 및 타깃 통계는 cpython3 및 python3-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 집합을 참조하십시오.