
tough-cookie 2.5.0의 CVE-2023-26136 보안 패치 - 하위 호환성을 유지하는 프로토타입 오염 취약점 수정
이 프로젝트는 tough-cookie 4.1.3 이전 버전에서 발생하는 심각한 프로토타입 오염(Prototype Pollution) 취약점인 CVE-2023-26136을 해결합니다. 이 취약점은 쿠키 처리에 [email protected]을 사용하는 Penguin Software Inc.의 웹 애플리케이션에 영향을 미칩니다.
CVE-2023-26136은 CookieJar를 rejectPublicSuffixes=false와 함께 사용할 때 발생하는 프로토타입 오염 취약점입니다. 이 문제는 MemoryCookieStore 클래스의 부적절한 객체 초기화에서 비롯되며, 공격자가 악의적으로 조작된 쿠키 도메인을 통해 Object.prototype에 속성을 주입할 수 있게 합니다.
취약점은 lib/memstore.js에 존재하며, 여기서 쿠키는 일반 JavaScript 객체({})를 사용하여 저장됩니다. 이 객체들은 Object.prototype을 상속받기 때문에, 공격자는 __proto__, constructor, 또는 prototype과 같은 도메인으로 쿠키를 설정하여 이를 악용할 수 있으며, 이는 프로토타입 오염으로 이어집니다.
수정 사항은 MemoryCookieStore 클래스에서 모든 {} 인스턴스를 Object.create(null)로 대체합니다:
// Before (vulnerable)
this.idx = {};
// After (fixed)
this.idx = Object.create(null);
이 변경은 프로토타입 체인이 없는 객체를 생성하여 의도하지 않은 상속으로부터 쿠키 저장소를 효과적으로 격리함으로써 프로토타입 오염을 방지합니다.
lib/memstore.js: 객체 초기화를 Object.create(null)을 사용하도록 업데이트├── README.md # This file
├── changes.diff # Git-compatible diff file
├── test-cve-2023-26136.js # Unit test for the fix
├── tough-cookie/
│ ├── index.js # Exploit demonstration
│ ├── Original v2.5.0/ # Original vulnerable version
│ ├── v2.5.0-PATCHED/ # Patched version
│ │ └── tough-cookie-2.5.0.tgz # Packed version
│ └── package.json
└── mission.txt # Original mission requirements
패치된 버전은 tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz로 제공됩니다.
설치 방법:
npm install ./tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz
원본 tough-cookie 테스트 스위트가 통과해야 합니다. 테스트 실행:
cd tough-cookie/v2.5.0-PATCHED
npm install
npm test
참고: 원본 tough-cookie 2.5.0은 이 배포판에 테스트 디렉토리를 포함하지 않지만, 패치된 버전은 원본 API와 완전한 호환성을 유지합니다.
사용자 정의 단위 테스트를 실행하여 수정 사항을 검증:
node test-cve-2023-26136.js
예상 출력:
Testing CVE-2023-26136 fix...
✅ CVE-2023-26136 fix verified: No prototype pollution detected
✅ Test passed: The vulnerability has been successfully patched
프로젝트에는 tough-cookie/index.js에 익스플로잇 데모가 포함되어 있습니다:
cd tough-cookie
node index.js
이 명령은 원본 취약 버전과 패치된 버전을 모두 테스트하며, 다음을 표시합니다:
EXPLOITED SUCCESSFULLYEXPLOIT FAILEDchanges.diff 파일은 Git 호환 diff 파일이며, 다음 명령으로 적용할 수 있습니다:
git apply changes.diff
이 diff는 의도하지 않은 수정 없이 취약점을 해결하는 데 필요한 변경 사항만 포함합니다.
익스플로잇은 다음 방식으로 작동합니다:
rejectPublicSuffixes: false로 CookieJar 생성__proto__인 악성 쿠키 설정Object.prototype 체인을 오염시킴잠재적 피해:
✅ Node.js 20 (LTS) 에서 테스트 및 검증 완료
GitHub 저장소: Forked tough-cookie repository
Git 태그: v2.5.0-patched-cve-2023-26136-fix
GitHub Actions - 전문가 수준
Jenkins - 고급 수준
Travis CI - 중급 수준
CircleCI - 중급 수준
GitLab CI/CD - 고급 수준
이 프로젝트는 보안 수정을 추가하면서 원본 tough-cookie 라이선스(BSD-3-Clause)를 유지합니다.
참고: 이는 CVE-2023-26136 취약점을 제거하면서 완전한 하위 호환성을 유지하는 보안 중심 패치입니다.