iT邦幫忙

2026 iThome 鐵人賽

DAY 14
0

今天要說的是 Anthropic 發布的:Universal ECDSA certificate forgery for arbitrary hosts

是針對 wolfssl client 在驗證 CA 時的一個檢查 Bypass 漏洞!
請原諒今天篇幅會很短,忙忙碌碌中,之後補充細節

Make confusion attack great again.

WolfSSL 在用橢圓曲線驗證憑證時有兩種方法!
一種是 EdDSA,它在內部計算時會把一部分私鑰與訊息放在一起取 Hash 後再做後續的 Scalar 乘法,跟我們採用隨機數的 ECDSA 是不同的,它屬於確定性簽章(附上 ECDSA 流程簡報來幫大家復習)

另一種則是我們知道的 ECDSA

image

wolfSSL 在處理橢圓曲線簽章時前面的分支以及變數是共享的。
在憑證中有兩個欄位,一個是 sigOID 一個則是 keyOID
keyOID 代表的是公鑰是使用什麼演算法
sidOID 代表的則是這張憑證(這個訊息)是用什麼演算法千張的。

然而 wolfSSL 沒去檢查是否有對不上的情況,並且 wolfSSL 會發生以下情況:

  1. 看到 sigOID 是 Ed25519(mod 是 2^255 - 19 的 EdDSA),好,我不做 Hash,digestSz = 0
  2. 準備驗證簽章,往下走到 dispatch 階段,看到 CA 的 keyOID 是 ECDSA,好,我把剛才的結果丟給 ECDSA 驗證器。

問題就出在這了,回想一下 ECDSA 的流程,因為前面的 Hash 已經 digestSz = 0 定義了大小為 0,所以後面在計算 u1 值的時候將變成 0,導致最後計算時只剩下 u2 * Q = (r * w) * Q ,最後去驗證 x 座標是否跟 r 等值,其中 w 也是我們可控的(因為是 s^-1,在 mod p 下)。

對於攻擊者而言在可控所有條件的情況下要偽造這個值十分容易,跟簽章過程相似:

  • 先選一個隨機數 k,計算 k * Q 的 X 座標作為 r
  • 接著要找 (r * s^-1) * Q = k * Q,移項一下得到 s = r * k^-1
  • 最後把 (r, s) 作為簽章 Pair 送回即可!

一些 MurMur

這個漏洞害我想到 JWT Key Confusion Attack xDDDD
一個簽章同時允許非對稱 和 對稱式時,利用把非對稱式公鑰當作對稱式唯一鑰匙(私鑰)做簽章繞過的攻擊!
可以看 Burp Suite:

References


上一篇
Day 13. ECDSA: 基於橢圓曲線的數位簽章!
系列文
Agentic Era,一年來 LLM 到底都挖了些什麼洞!14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言