Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
SealSecurityAssignment — CVE-2023-26136 취약점 연구 중 | Kitploit
도구/GitHubGitHub/cucumberanorsncompany/sealsecurityassignment
Static AnalysisVulnerability AnalysisCode AnalysisExploitationWeb SecurityLearning & Education
GitHubcucumberanorsncompany/sealsecurityassignment

SealSecurityAssignment

CVE-2023-26136 취약점 연구 중

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
12년 전아직 검토되지 않음

SealSecurityAssignment

CVE-2023-26136 취약점 연구

취약점 연구: 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는 객체(object)라는 개념을 가지고 있으며, 이는 사전(dictionary)과 유사합니다. 객체는 다양한 유형(예: 문자열, Boolean, int 등)의 변수 집합을 보유할 수 있으며, 변수 이름은 키(key)이고 그 값은 값(value)입니다(사전과 객체의 비유를 계속하자면). 더 정확히 말하면, 객체는 사전 데이터 구조 자체와 유사하고, 각 변수는 키-값 쌍과 유사합니다. 객체는 또한 proto 키워드를 가지고 있어, 프로토타입을 수정하여 객체에 추가 변수를 추가할 수 있습니다. 프로토타입 오염은 공격자가 proto 키워드를 통해 객체에 추가 변수를 추가하여 객체를 오염시키는 공격입니다. 아래 브라우저 콘솔과의 상호작용은 이 공격을 보여줍니다.

image

보시다시피, admin1과 user1이라는 두 사용자가 있습니다. admin1 객체에는 "isAdmin"이라는 Boolean 변수가 있으며 true로 설정되어 있습니다. User1에는 이 변수가 전혀 없습니다. 7번째 줄에서 user1의 프로토타입에 isAdmin 변수를 추가합니다. 10번째 줄에서 이 변수가 user1 객체 자체에 추가되지 않은 것이 분명함에도 불구하고, 이번에는 user1.isAdmin의 값을 확인할 때 콘솔이 긍정적으로 응답합니다. 그 이유는 user1이 자신의 프로토타입의 속성을 상속받고 있기 때문입니다.

image

또한 프로토타입은 그 자체로 객체이며, 이는 다시 자신의 프로토타입으로부터 속성과 메서드를 상속받아 프로토타입 체인을 형성합니다. 이 체인은 null 프로토타입으로 끝나므로, 프로토타입 오염을 방지하는 합리적인 접근 방식은 작업 중인 객체가 명시적으로 null 프로토타입을 상속하도록 하는 것입니다.

쿠키(Cookies)란 무엇인가요?

쿠키(종종 인터넷 쿠키로 알려짐)는 사용자 이름과 비밀번호 같은 작은 데이터 조각이 포함된 텍스트 파일로, 네트워크를 사용할 때 컴퓨터를 식별하는 데 사용됩니다. 특정 쿠키는 특정 사용자를 식별하고 웹 탐색 경험을 개선하는 데 사용됩니다.

출처: Kaspersky - https://www.kaspersky.com/resource-center/definitions/cookies

CookieJar란 무엇인가요?

CookieJar는 쿠키를 저장하기 위한 객체입니다.

과제:

취약점:

취약점 설명에 따르면, 이는 Tough-Cookie가 쿠키를 초기화하는 방식에서 발생합니다. 쿠키는 객체이므로, 이론적으로는 적어도 프로토타입 오염에 취약합니다.

위험:

객체의 프로토타입을 통해 객체, 특히 쿠키를 조작할 수 있게 되면 공격자는 잠재적으로 인가되지 않은 데이터에 접근하고, 원격 코드를 실행하며, 서비스 거부를 유발하고, 웹사이트가 세션 관리에 쿠키를 사용하는 경우 세션을 가로채고, 쿠키 자체에서 민감한 데이터를 추출할 수 있습니다.

패치:

패치는 파일 memstore.js에 적용되었습니다. 이슈 추적과 버전 4.1.3에서 도입된 패치에 따르면, 취약점을 패치하기 위해 쿠키를 맵에 저장하거나 this.idx 객체를 생성해야 합니다. this.idx = {} 대신 this.idx = Object.create(null);을 사용하여 this.idx를 생성함으로써, 소개 부분에서 제안한 대로 null 프로토타입을 상속받아 프로토타입 오염을 방지하고 프로토타입 체인을 끊습니다.

취약점 테스트 (index.js):

Snyk는 논의된 취약점에 대한 개념 증명(PoC)을 게시했습니다. 그를 바탕으로 index.js를 작성했습니다. 예외 발생 시 포착하기 위해 try-catch 로직으로 감싸고, 테스트 진행 상황을 추적하기 위해 추가 출력을 추가하여 요구된 출력(예: "EXPLOITED SUCCESSFULLY" 또는 "EXPLOITED FAILED")을 얻었습니다. 다음 명령을 실행할 때: npm install [email protected] && node index.js 다음과 같은 출력을 얻습니다:

image

다음 명령을 실행할 때: npm install ./tough-cookie-2.5.0-PATCHED.tgz && node index.js 다음과 같은 출력을 얻습니다:

image

두 시나리오 모두(게시된 2.5.0 버전 실행 및 패치된 버전 실행)에서 일반 쿠키와 악용된 쿠키를 모두 설정하는 데 성공했지만, 패치된 버전에서는 악용된 쿠키에 접근하지 못했습니다.

요약:

이번 과제를 통해 프로토타입 오염 공격에 대해 배우고, JavaScript 객체에 대해 학습했으며, Tough-Cookie 패키지를 소개받았습니다.

도구 다운로드