
레거시 Spring/JSP를 위한 오프라인 jQuery CVE-2020-11023 수정 키트 - Node.js 내장 모듈만 사용 (npm 미사용, 인터넷 미연결)
폐쇄망 로컬 PC에서 Node.js 하나만으로 동작하는 레거시 Java/Spring/JSP 프론트엔드 취약점 조치 도구입니다. npm install 불필요, 인터넷 불필요, 외부 모듈 0개(Node 내장 모듈만 사용).
WebContent/src/main/webapp 등 웹루트 자동 감지 및 전체 구조 분석 (JSP/JS/CSS/리소스 인벤토리)WEB-INF/views + WEB-INF/layouts JSP의 script/css/include 호출관계 분석.bind .live .size .attr(bool) .success 등).html(response) 등) 위험도 분류 (XssHigh / Review / StaticHtmlLow)id/class/name/버튼 텍스트와 JS selector를 매칭해 Runtime 검증 시나리오 생성 (1망 code-only/static, 2망 Chrome smoke, Edge IE mode final sample)LOCAL_LAB_OK / CHROME_SMOKE_REQUIRED / IE_FINAL_SAMPLE_REQUIRED)voyager_packet.txt) 생성ai_verdict_packet.txt, verdict_evidence.html/json) 생성@RequestMapping/XML 설정만 읽어 AJAX와 Controller 후보를 연결runtime-lab/ 템플릿 제공. Docker/JDK/Tomcat/WAR는 포함하지 않음rules/*.json, 폐쇄망 증빙은 airgap_manifest.*, 배포 ZIP은 release-zipS1~S11 단계 실행, Pipeline, Local Lab 시작/중지, 기존 HTML 보고서 열기를 처리patch-jquery가 assets/jquery/jquery-3.5.1.min.js와 jquery-migrate-3.6.0.min.js를 TO-BE에 자동 배치하므로, 기본 조합은 별도 파일 준비 없이 교체 가능. jquery-migrate-3.6.0.js 비압축본은 Tracing/debug 프로필용으로만 포함--target TO-BE 폴더에만 기록됩니다..text()/escapeHtml/신뢰경계 검토를 해야 합니다.runtime-lab/은 선택형 실험 템플릿입니다. Docker image, JDK, Tomcat, Maven, 업무 WAR를 배포본에 넣지 않고, Edge IE mode 렌더링도 재현하지 않습니다.C:\tools\jquery35-local-agent-v5).project-profile.public.sample.json을 복사해 project-profile.json으로 만들고, 필요하면 rules/*.json만 수정합니다.기본 예시 경로:
| 용도 | 경로 |
|---|---|
| 원본(source) | C:\work\legacy-app |
| TO-BE(target) | C:\work\legacy-app_jquery35_tobe |
| 보고서(report) | C:\work\jquery35_report_v5 |
--source에는 프로젝트 루트(C:\work\legacy-app)를 줘도 되고 C:\work\legacy-app\WebContent를 직접 줘도 됩니다. WebContent는 자동 감지됩니다.
명령어를 매번 치기 싫으면 먼저 아래 중 하나로 로컬 웹 콘솔을 띄우세요.
실행0_웹대시보드.bat
node run-jquery35-v5.js --mode ui --port 18088
접속 주소는 http://127.0.0.1:18088/ 입니다.
source, target, report, profile, rulepack, server-source를 Browse로 지정하거나 직접 입력한 뒤 버튼으로 plan, autofix, patch-jquery, probe, review-pack, hermes-pack, ai-verdict-packet, verify-clean, pr-report, airgap-manifest, release-zip을 실행합니다.Auto setup은 같은 자동 산정을 다시 강제 적용합니다. 웹 콘솔 단계명은 S1 분석부터 S11 배포 ZIP까지 고정합니다. Run Pipeline은 S1→S2→S3→S6→S7→S8→S9→S10→Lab 순서로 실행하며, S3 이후의 검수팩/AI판정팩/검증/보고서/Local Lab은 verify-source(기본값 TO-BE target)를 기준으로 실행합니다.autofix, patch-jquery, probe는 여전히 target이 필요합니다. 콘솔은 명령을 대신 만들어 실행해주는 껍데기이고, 안전 규칙은 CLI와 동일합니다.기존 산출물 영역에서 index.html, hermes_testbench.html, airgap_manifest.txt, pr_description.md, verify_clean_result.txt 등 report 폴더의 결과물을 바로 엽니다.http://127.0.0.1:<lab-port>/_report/index.html 로 연결됩니다.127.0.0.1에만 바인딩하고 외부 통신을 하지 않습니다. 실행 명령은 shell 문자열이 아니라 Node 인자 배열로 호출합니다.v5.4부터 코드에 박혀 있던 현장 지식을 rules/와 profile로 분리했습니다.
rules/public-defaults.json — 웹루트 후보(WebContent, src/main/webapp 등), Probe 삽입 후보, 경로 변수, 벤더 패턴.rules/vendor-compat.json — jqGrid, jQuery UI, select2 등 벤더별 권고 문구. 새 플러그인은 여기만 늘리면 됩니다.rules/mock-defaults.json — Local Lab/mock route의 기본 JSON/HTML/TEXT 응답.project-profile.public.sample.json — 배포받은 사용자가 자기 프로젝트에 맞춰 복사해 쓰는 일반형 profile.특정 현장용 rulepack을 따로 둘 때:
node run-jquery35-v5.js --source "C:\work\legacy-app" --report "C:\work\jquery35_report_v5" --mode plan --rulepack "C:\work\my-rulepack"
폐쇄망 반입용 증빙/배포 ZIP:
node run-jquery35-v5.js --source "C:\work\legacy-app" --report "C:\work\jquery35_report_v5" --mode airgap-manifest
node run-jquery35-v5.js --report ".\release" --mode release-zip
| 모드 | 하는 일 | 원본 수정 | TO-BE 생성 |
|---|---|---|---|
plan | 분석만. 처음엔 반드시 이것부터 | X | X |
autofix | 안전 자동수정만 TO-BE에 적용 | X | O |
patch-jquery | autofix + 구버전 jQuery script 태그를 3.5.1 + Migrate로 교체 | X | O |
probe | autofix + Runtime Probe 생성/삽입 | X | O |
lab | 로컬 mock 서버 기동 (기본 포트 18080) | X | X |
verify-clean | 운영 반영 전 게이트 검사 (FAIL 시 exit 2) | X | X |
pr-report | PR 설명/CI 체크리스트/커밋 그룹 생성 | X | X |
packet | assistant_packet.txt / voyager_packet.txt / chat_summary.txt 생성 | X | X |
ai-verdict-packet | ai_verdict_packet.txt(1000자 이하) + verdict_evidence.html/json 생성 | X | X |
review-pack | plan + ai_review_pack.txt/json + Hermes 로컬 검수팩 생성 (7절 참고) | X | X |
hermes-pack | review-pack과 동일하지만 로컬 검수팩 의도를 명확히 한 별칭 | X | X |
airgap-manifest | 폐쇄망 반입 증빙(airgap_manifest.json/txt)만 생성 | X | X |
release-zip | 공개 배포용 ZIP + release manifest 생성 (--source 불필요) | X | X |
ui | 브라우저 웹 콘솔 기동. 경로 Browse/자동 산정, 모드 실행, Pipeline, Local Lab 제어, 기존 HTML 산출물 열기 | X | X |
self-test | 회사 코드 없이 도구 자체 정상동작 검증 (임시 샘플 생성 후 전체 체크) | X | X |