Express Prototype Pollution Gadgets
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
자세한 내용은 원본 연구를 참조하세요
JSON 콘텐츠 유형 응답을 사용하고 JSON을 반영하는 Express 앱에서:
이 경우 JSON 콘텐츠 유형으로 XSS는 일반적으로 불가능합니다. 그러나 프로토타입 오염을 통해 Express가 HTML 응답을 제공하도록 혼란을 줄 수 있습니다. 이 취약점은 애플리케이션이 **res.send(obj)
**를 사용하고 application/json 콘텐츠 유형으로 본문 파서를 사용하는 데 의존합니다.
body
및 _body
속성을 오염시킴으로써, Express가 HTML 콘텐츠 유형을 제공하고 _body
속성을 반영하게 할 수 있으며, 이로 인해 저장된 XSS가 발생할 수 있습니다.
Express가 UTF-7 콘텐츠를 렌더링하도록 만들 수 있습니다:
다음 PP는 JSON 내부의 속성에 추가 공백을 만들어 기능이 중단되지 않도록 합니다:
그럼 반사된 JSON은 다음과 같이 보입니다:
다음 PP 가젯은 서버가 HTTP 헤더를 반환하도록 합니다: Access-Control-Expose_headers: foo
It requires the CORS 모듈이 설치되어야 합니다
다음 페이로드를 사용하면 OPTIONS 응답에서 메서드를 숨길 수 있습니다:
다음 PP 페이로드를 사용하여 반환된 상태 코드를 변경할 수 있습니다:
원시값(예: 문자열)으로 프로토타입에 할당하면 프로토타입은 객체여야 하므로 no-op 작업이 발생합니다. Object.prototype
자체에 프로토타입 객체를 할당하려고 하면 예외가 발생합니다. 우리는 이 두 가지 동작을 사용하여 프로토타입 오염이 성공했는지 감지할 수 있습니다:
응용 프로그램이 응답에 객체를 포함할 때, __proto__
와 함께 비정상적인 이름의 속성을 생성하는 것은 유용할 수 있습니다. 특히, 응답에 비정상적인 속성만 반환되는 경우 이는 응용 프로그램의 취약점을 나타낼 수 있습니다:
또한 Lodash와 같은 라이브러리가 사용되는 시나리오에서는 프로토타입 오염(PP)을 통해 속성을 설정하고 객체 내부에서 직접 설정하는 것이 또 다른 진단 접근 방식을 제공합니다. 만약 이러한 속성이 응답에서 생략된다면, 이는 Lodash가 병합하기 전에 대상 객체에서 속성의 존재를 확인하고 있음을 시사합니다:
Express에는 쿼리 문자열 매개변수로부터 객체를 생성할 수 있는 옵션이 있습니다. 이것은 프로토타입 오염 취약점을 악용하기 위한 버그 체인에서 확실히 사용할 수 있습니다.
?foo.bar=baz
는 Node에서 객체를 생성합니다.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)