
오픈소스 패키지가 tough-cookie 2.5.0을 사용하는 문제 수정 - CVE-2023-26136,
tough-cookie 패키지 4.1.3 이전 버전은 rejectPublicSuffixes=false 모드에서 CookieJar를 사용할 때 쿠키를 잘못 처리하여 Prototype Pollution에 취약합니다. 이 문제는 객체가 초기화되는 방식 때문에 발생합니다.
https://nvd.nist.gov/vuln/detail/CVE-2023-26136
Prototype Pollution은 JavaScript에 영향을 미치는 취약점입니다. Prototype Pollution은 객체와 같은 기존 JavaScript 언어 구조의 프로토타입에 속성을 주입할 수 있는 능력을 말합니다. JavaScript는 proto, constructor, prototype과 같은 마법 속성을 포함한 모든 Object 속성을 변경할 수 있게 합니다. 공격자는 이러한 속성을 조작하여 다른 값을 주입함으로써 기본 객체의 JavaScript 애플리케이션 객체 프로토타입을 덮어쓰거나 오염시킵니다. 그런 다음 Object.prototype의 속성은 프로토타입 체인을 통해 모든 JavaScript 객체에 상속됩니다. 이런 일이 발생하면 JavaScript 예외를 유발하여 서비스 거부를 일으키거나, 애플리케이션 소스 코드를 변조하여 공격자가 주입한 코드 경로를 강제함으로써 원격 코드 실행으로 이어질 수 있습니다.
프로토타입 오염이 발생하는 두 가지 주요 방식은 다음과 같습니다.
중요 사항: https://github.com/salesforce/tough-cookie/issues/282 https://security.snyk.io/package/npm/tough-cookie/2.5.0
=> MemoryCookieStore 클래스의 취약점을 수정하려면 cookie.domain이 __proto__로 설정될 때 프로토타입 오염을 방지하도록 putCookie 메서드를 수정해야 합니다.
https://github.com/salesforce/tough-cookie/pull/283
a. tough_cookie_2.5.0\node_modules\tough-cookie\lib\memstore.js 변경
memstore.js에서 새 객체 생성의 모든 발생 지점이 {} Object.create(Object.prototype)에서 Object.create(null)로 변경되었습니다.
이렇게 하면 오염될 수 있는 프로토타입 속성이 없는 객체 인스턴스를 사용하게 됩니다.
b. 새 파일 생성, /node_modules/tough-cookie/lib/test-unit.js vanilla JS에서 사용하며, tests 폴더의 cookie_jar_test.js 파일에 있는 "Issue #282 - Prototype pollution" 테스트를 위한 것입니다.
명령어: node test-unit.js
c. 새 파일 생성, /node_modules/tough-cookie/lib/testVerifyVulnerable.js 취약한 동작이 수정되었는지 검증합니다.
명령어: node testVerifyVulnerable.js
change.diff : https://github.com/ronmadar/Open-Source-Seal-Security/blob/cf768f1932f087c30ebec7fe60c3fca323b4e54b/change.diff
a. 일반 패키지 tough-cookie V 2.5.0
명령어: npm install [email protected] && node index.js
b. 변경 사항이 포함된 압축 패키지 tough-cookie V 2.5.0 tgz 형식
명령어: npm install ./tough-cookie-2.5.0-PATCHED.tgz && node index.js
c.
Prototype Pollution: Object.prototype에 직접 속성을 추가하면 전체 프로토타입 체인을 오염시킬 위험이 있습니다. 이로 인해 프로토타입 체인을 탐색하는 모든 객체가 영향을 받을 수 있으므로 애플리케이션 전반에서 예기치 않은 동작이 발생할 수 있습니다.
보안 위험: 웹 애플리케이션 환경에서 공격자는 프로토타입 오염을 악용하여 객체와 속성을 조작할 수 있으며, 이는 권한 상승, 정보 유출과 같은 보안 취약점으로 이어질 수 있습니다.
호환성 문제: Object.prototype과 같은 핵심 프로토타입을 수정하면 표준 동작에 의존하는 다른 라이브러리나 프레임워크와의 호환성 문제가 발생할 수 있습니다. 이는 종속성을 통합하거나 업데이트할 때 오류나 예기치 않은 동작을 유발할 수 있습니다. d. 위에 작성함.
이 프로젝트 설치 방법