Prototype Pollution
객체 오염
프로토타입 오염(Prototype Pollution)은 JavaScript와 같은 언어에서 발생할 수 있는 보안 취약점 중 하나이다.
이 취약점은 프로토타입이라는 객체의 기본 속성을 악용하여 객체의 프로퍼티를 비정상적으로 변경하는 공격을 나타낸다.
JavaScript에서는 모든 객체가 프로토타입(Prototype)이라는 속성을 가지고 있다.
프로토타입은 해당 객체를 생성한 원본 객체로, 원본 객체의 프로퍼티와 메서드를 상속받아 사용할 수 있도록 한다. 프로토타입은 객체 지향 프로그래밍에서 상속 개념을 구현하는데 사용된다.
프로토타입 오염은 이러한 프로토타입 체인이 공격자에 의해 조작되어 발생한다.
일반적으로는 사용자 입력 또는 외부에서 받은 데이터를 통해 발생할 수 있다.
공격자는 웹 애플리케이션에서 사용되는 객체의 프로토타입을 조작하여 애플리케이션의 동작을 변경하거나 비정상적인 동작을 유발할 수 있다.
프로토타입 오염의 예시 중 하나는 다음과 같다.
javascriptCopy code
// 간단한 객체 생성
var originalObject = { key: 'value' };
// 사용자 입력을 통해 프로토타입 오염이 발생할 수 있음
var userInput = '__proto__';
// 프로토타입 오염 발생
userInput[key] = 'modified_value';
// originalObject의 프로토타입이 오염되었음
console.log(originalObject.key); // 'modified_value'
이 예시에서 **userInput**이라는 사용자 입력이 프로토타입을 나타내는 **__proto__**에 할당되어, **originalObject**의 프로토타입이 오염되어 key 프로퍼티가 변경되었다.
프로토타입 오염을 방지하기 위해서는 다음과 같은 사항에 주의해야 한다
- 사용자 입력의 적절한 검증: 외부에서 받은 입력값을 사용할 때는 적절한 검증을 수행하여 안전한 값을 사용해야 한다.
- 객체의 프로퍼티에 대한 안전한 접근: 객체의 프로퍼티에 접근할 때는 안전한 방법으로 접근하도록 유의해야 한다. 직접적인 프로토타입 체인 조작을 허용하지 않도록 코드를 작성해야 한다.
프로토타입 오염에 대한 방어책을 갖추면 웹 애플리케이션에서의 보안 측면을 강화할 수 있다.
'사이버보안공부' 카테고리의 다른 글
SQL Injection? (0) | 2024.02.01 |
---|---|
NOP sled 공격기법에 대해 알아보자 (0) | 2023.09.28 |
DNS Spoofing? (0) | 2023.08.06 |
Cookie wargame (0) | 2023.07.28 |
3-Way Handshake & 4-Way Handshake 실습 (1) | 2023.07.26 |