19.9.26

Linux VXLAN in lab 使用 Scapy 模擬VTEP 注入攻擊的攻防腳本 CVE2026-92542

 在Linux 或 WSL 環境中,透過建立兩個模擬主機node1與node2來建立底層的路由網路,在上面建立 VXLAN 介面 掛載至Bridge,實現跨主機的 Layer 2 Overlay ,就是兩個L2的Bridge打隧道串起來,VXLAN 是一種MAC-in-UDP的隧道機制,開一條UDP隧道,跟L2一樣IP對MAC

很疑惑,九月寫十月就被開採,是有人看了這篇那個模擬注入的腳本去開採了CVE2026-92542




更新到Docker Engine 29.8.2 透過引入 Linux iptables 的 socket 模組(xt_socket)來修補此漏洞,藉此精準區分「Kernel 原生封裝的流量」與「User-space 應用程式偽造的流量」。

在 Linux 網路堆疊中,由使用者空間(如 Python 腳本或本地 Socket 行程)發出的封包,在核心中會帶有明確的 Socket 結構關聯;而由 Kernel 內部的虛擬網路介面(如 Docker Swarm 建立的 vxlan 介面)進行 L2 二次封裝後發出的底層封包,則不屬於任何特定的 User-space Socket。

以下是修補前後在 iptables mangle 表 OUTPUT 鏈中的具體規則差異:

修補前(受影響版本)的寬鬆規則

在存在漏洞的舊版 Docker Engine 中,防火牆規則僅單純匹配協定與連接埠:

# 只要是送往 UDP 4789 埠的封包,一律打上 IPsec 加密標記 (fwmark)
iptables -t mangle -A OUTPUT -p udp --dport 4789 -j MARK --set-xmark 0x1234

這種「無差別標記」導致主機上的非特權行程只要向外送出特製的 UDP 封包,就會被該規則捕捉,隨後被本機的 XFRM 子系統無條件套用 ESP 加密。

修補後(29.8.2)的嚴格規則

修補後的版本利用 -m socket(或 ! -m socket 反向匹配)來修補來源身分的驗證缺口。Docker 會加入排除條件,確保只有核心本身發出的 VXLAN 流量才會被加密:

# 做法 1:新增前置規則,若封包有關聯的本地 User-space Socket,則直接跳出(RETURN),不予標記
iptables -t mangle -A OUTPUT -p udp --dport 4789 -m socket -j RETURN


# 做法 2:直接在加密標記規則中,排除帶有 Socket Context 的來源
iptables -t mangle -A OUTPUT -p udp --dport 4789 ! -m socket -j MARK --set-xmark 0x1234

防禦生效的底層機制

加入 ! -m socket 條件後,當攻擊者執行稍早討論的 Socket 注入腳本時,核心防火牆會比對出該封包源自一個活躍的本地 Socket 行程。因為不符合標記條件,該封包無法獲得觸發加密所需的 fwmark。

失去這個標記後,偽造的 VXLAN 封包就會以「明文 UDP」的型態離開主機網卡。當它抵達目標節點時,接收端的 IPsec 策略資料庫(Security Policy Database, SPD)預期該網段的 VXLAN 流量必須受到 ESP 加密保護;面對這個未加密的明文 UDP 4789 封包,接收端的核心會直接將其丟棄(Drop),從而徹底粉碎了這條注入攻擊鏈。

22.8.26

Proxmox virtio-win-pkg

 最近在測試Proxmox

測試windows的虛擬機,要裝virtio.ISO周邊的驅動才會掛起來,但奇怪都找不到載點

後來找到fedora有提供,各個版本的

https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

Ubuntu系列有整合進去,所以不用下載

Red Hat系列的需要下載,載點一樣


16.8.26

Linux Bridge VLAN SVI nftables in labs

測試環境 wsl + ubuntu22.04 實驗軟體式網路橋接,VLAN,SVI功能

[ Host A (ns-a) ]           [ Linux Bridge (br0) ]           [ Host B (ns-b) ]

veth-a (10.0.0.1) <======> veth-a-br <======> veth-b (10.0.0.2)