hacking/web
Node.js - prototype pollution
hogbal
2023. 4. 24. 20:29
prototype?
javascript는 java와 달리 Class라는 개념이 없다. Class가 없으면 상속이 불가능하기에 prototype을 이용해 상속과 비슷한 기능을 할 수 있다.
let file = {};
file.__proto__.test = "test"
let read = {};
console.log(read.test)
위와 같은 코드를 실행하면 "read.test"의 출력 값으로 "test"가 출력되게 된다. 이는 오브젝트 file이라는 변수에서 __proto__라는 변수 아래에 test라는 속성을 정의했는데 이렇게하면 모든 오브젝트에서 해당 값을 참조할 수 있다.
prototype pollution
javascript의 prototype을 이용한 공격방법이 바로 prototype pollution이다.
말 그대로 prototype을 오염시키는 기법이다. 위의 예시로 들었던 코드처럼 어떤 obj 변수의 속성을 수정할 수 있다면 __proto__ 속성을 오염해서 다른 obj의 속성 값을 우리가 원하는 값으로 변경하는 것이다.