Go1.16.4 發(fā)布
Go 官方發(fā)布了 Go1.16.4 和 Go1.15.12,這是兩個(gè)小版本,修復(fù)一個(gè)安全問題,這是根據(jù)新的安全策略而發(fā)布的:https://github.com/golang/go/issues/44918。
這個(gè)完全漏洞如下:
在讀取一個(gè)非常大的 header(64 位架構(gòu)上超過 7MB 或 32 位架構(gòu)超過 4MB)時(shí),net/http 中的 ReadRequest 和 ReadResponse 會(huì)導(dǎo)致不可恢復(fù) panic。Transport 和 Client 易受攻擊,并且可以通過惡意服務(wù)器導(dǎo)致程序崩潰。默認(rèn)情況下,服務(wù)器不容易受到攻擊,但如果通過將 Server.MaxheaderBytes 設(shè)置為更高的值,比如超過默認(rèn)的 1M ,在這種情況下,惡意客戶端會(huì)導(dǎo)致服務(wù)端崩潰。
這個(gè)問題也會(huì)影響到 golang.org/x/net/http2/h2c 包和 golang.org/x/net/http/httpguts 包中的 HeaderValuesContainsToken。因此,這也進(jìn)行了修復(fù),升級(jí)到 golang.org/x/[email protected]。
該問題對(duì)應(yīng)的 issue 在這里:https://github.com/golang/go/issues/45710。
發(fā)現(xiàn)這個(gè) Bug 是因?yàn)?Ethereum 2.0 bounty program[1] 出現(xiàn)了 crash。
因?yàn)?Go 只維護(hù)最近的兩個(gè)版本,如果你的項(xiàng)目有此風(fēng)險(xiǎn),建議升級(jí)到 1.15.12 或 1.16.4。
你可以按照下圖的方式升級(jí):

也可以通過 「Go語言中文網(wǎng)」下載:https://studygolang.com/dl,源碼和預(yù)編譯包都為你準(zhǔn)備好了。閱讀原文可以直達(dá)下載頁。
參考資料
Ethereum 2.0 bounty program: https://ethereum.org/en/eth2/get-involved/bug-bounty
推薦閱讀
