CVE-2025-55182 (React2Shell) 취약점을 탐지하는 Chrome 확장 프로그램입니다.
React2Shell은 React Server Components (RSC)의 안전하지 않은 역직렬화 취약점(CVE-2025-55182)을 탐지하는 보안 도구입니다. 이 취약점은 CVSS 10.0 점수를 받은 치명적인 원격 코드 실행(RCE) 취약점입니다.
- React 19.0, 19.1.0, 19.1.1, 19.2.0
- Next.js 15.x, 16.x (App Router 사용 시)
npm install먼저 확장 프로그램에 필요한 아이콘을 생성해야 합니다:
# 브라우저에서 generate-icons.html 열기
open generate-icons.html- "모든 아이콘 생성 및 다운로드" 버튼 클릭
- 다운로드된 12개의 PNG 파일을
icons/폴더로 이동
TypeScript 코드를 컴파일하고 확장 프로그램을 빌드합니다:
npm run build빌드가 완료되면 dist/ 폴더에 실행 가능한 확장 프로그램이 생성됩니다.
- Chrome 브라우저를 엽니다
- 주소창에
chrome://extensions/입력 - 우측 상단의 "개발자 모드" 활성화
- "압축해제된 확장 프로그램을 로드합니다" 클릭
dist폴더 선택
확장 프로그램이 설치되면 모든 웹사이트에서 자동으로 React Server Components 사용 여부를 탐지합니다.
배지 색상:
- 🔴 빨강 (!): 고위험 - RSC 사용 감지됨
- 🟡 노랑 (?): 중위험 - Next.js 감지됨 (RSC 불확실)
- 🟢 초록 (✓): 저위험 - React만 감지됨
- ⚪ 회색: 위험 없음 - React 미감지
- 확장 프로그램 아이콘 클릭
- 팝업에서 "취약점 테스트 실행" 버튼 클릭
- 경고 메시지 확인 후 진행
- 결과 확인
확장 프로그램은 다음 지표들을 확인합니다:
__NEXT_DATA__객체: Next.js 사용 여부- App Router DOM 요소:
[data-nextjs-scroll-focus-boundary]속성 /_next/static/리소스: Next.js 정적 파일- RSC 관련 속성:
[data-rsc],[data-next-rsc]등
react2shell-scanner-plugin/
├── src/ # TypeScript 소스 코드
│ ├── types.ts # 타입 정의
│ ├── scanner.ts # 핵심 탐지 로직
│ ├── content-script.ts # 페이지 스크립트
│ ├── background.ts # 백그라운드 서비스 워커
│ └── popup.ts # 팝업 로직
├── dist/ # 빌드 결과물 (Chrome 로드용)
│ ├── manifest.json
│ ├── *.js
│ ├── popup.html
│ ├── popup.css
│ └── icons/
├── icons/ # 확장 프로그램 아이콘
│ ├── icon-red-*.png
│ ├── icon-yellow-*.png
│ ├── icon-green-*.png
│ └── icon-gray-*.png
├── popup.html # 팝업 UI
├── popup.css # 팝업 스타일
├── package.json # 프로젝트 의존성
├── tsconfig.json # TypeScript 설정
├── build.sh # 빌드 스크립트
├── generate-icons.html # 아이콘 생성 도구
└── README.md # 이 파일
- Manifest Version: V3
- 언어: TypeScript 5.3+
- 빌드 도구: TypeScript Compiler
- 의존성: @types/chrome (개발 의존성만)
# 의존성 설치
npm install
# TypeScript 컴파일만 실행
npm run compile
# 전체 빌드 (컴파일 + 파일 복사)
npm run build
# Watch 모드 (자동 재컴파일)
npm run watch
# dist 폴더 정리
npm run clean
# 전체 재빌드
npm run packagechrome://extensions/에서 확장 프로그램의 "상세정보" 클릭- "백그라운드 페이지 검사" 또는 "팝업 검사" 클릭
- 개발자 도구에서 콘솔 로그 확인
코드 수정 후:
- TypeScript 파일 수정 (
src/*.ts) npm run build실행chrome://extensions/에서 새로고침 버튼 클릭- 페이지 새로고침하여 테스트
Tip: Watch 모드 사용 시
npm run watchTypeScript 파일이 자동으로 재컴파일되며, Chrome에서 확장 프로그램만 새로고침하면 됩니다.
이 도구는 다음 목적으로만 사용해야 합니다:
- ✅ 자신이 소유한 웹사이트 테스트
- ✅ 권한을 받은 침투 테스트
- ✅ 보안 연구 및 교육
- ✅ 버그 바운티 프로그램
- ❌ 무단 시스템 테스트
- ❌ 악의적인 목적의 사용
- ❌ 법적 권한 없는 침투 테스트
이 도구의 사용으로 인한 모든 책임은 사용자에게 있습니다. 개발자는 부적절한 사용에 대해 책임지지 않습니다.
# 배포용 패키지 생성
npm run package이 명령은 다음을 수행합니다:
- 이전 빌드 정리
- 전체 재빌드
- 필수 파일 검증
react2shell-scanner-v1.0.0.zip생성
ZIP 파일에는 다음만 포함됩니다:
react2shell-scanner-v1.0.0.zip
├── manifest.json
├── background.js
├── scanner.js
├── content-script.js
├── popup.js
├── popup.html
├── popup.css
└── icons/
├── icon-red-16.png
├── icon-red-48.png
├── icon-red-128.png
├── (기타 아이콘들...)
포함되지 않는 것:
- ❌ TypeScript 소스 코드 (
src/) - ❌
node_modules/ - ❌ 개발 설정 파일 (
tsconfig.json,package.json등) - ❌ 소스맵 파일 (
*.map)
- Chrome Developer Dashboard 접속
- "새 항목" 클릭
- 생성된 ZIP 파일 업로드
- 스토어 정보 입력
- 검토 제출
개발 목적이나 테스트를 위해:
# dist 폴더를 직접 사용
npm run build
# Chrome에서 chrome://extensions/ 열기
# "압축해제된 확장 프로그램을 로드합니다"로 dist/ 폴더 선택또는 ZIP 압축 해제 후 사용:
npm run package
unzip react2shell-scanner-v1.0.0.zip -d extracted/
# Chrome에서 extracted/ 폴더 로드- 확장 프로그램 구조
- RSC 수동 탐지
- 배지 아이콘 업데이트
- 기본 팝업 UI
- 버전 자동 탐지 개선
- 스캔 히스토리
- 설정 페이지
- 알림 기능 개선
- 성능 최적화
- 오류 처리 개선
- 다국어 지원
- 내보내기 기능
이 프로젝트는 교육 및 보안 연구 목적으로 제공됩니다.
버그 리포트, 기능 제안, Pull Request를 환영합니다!
이 도구는 보안 연구 및 방어 목적으로만 제공됩니다. 사용자는 모든 관련 법률과 규정을 준수할 책임이 있습니다.