sudoedit 堆溢位本地提權漏洞(CVE-2021-3156)
- 最早出處
- 漏洞成因
- POC1
- POC2
- 寫在最后
最早出處
漏洞最早由Qualys研究小組發現的,博客地址:
https://blog.qualys.com/vulnerabilities-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit
漏洞成因
上面博客中寫道是基于堆溢位產生的漏洞,但是細節是觸發漏洞需要這樣做
- either through the
-soption, which sets Sudo’sMODE_SHELLflag;- OR through the
-ioption, which sets Sudo’sMODE_SHELLand MODE_LOGIN_SHELL flags;
要么-s 要么-i,設定flag為MODE_SHELL
sudoedit -s命令含義:
執行環境變數中所指定的 shell ,或是 /etc/passwd 里所指定的shell
正常MODE_SHELL的flag情況下,會轉義字符,但是文章中表示如果以非sudo的身份執行sudoedit,flag會|=MODE_EDIT,并且MODE_EDIT不會被重置,此時就會擁有MODE_EDIT|MODE_SHELL的flag,繞過了轉義,
POC1
https://github.com/blasty/CVE-2021-3156
這個poc它只寫了ubuntu和debian的復現,代碼看起來也很容易理解,
target_t targets[] = {
{
// Yes, same values as 20.04.1, but also confirmed.
.target_name = "Ubuntu 18.04.5 (Bionic Beaver) - sudo 1.8.21, libc-2.27",
.sudoedit_path = SUDOEDIT_PATH,
.smash_len_a = 56,
.smash_len_b = 54,
.null_stomp_len = 63,
.lc_all_len = 212
},
{
.target_name = "Ubuntu 20.04.1 (Focal Fossa) - sudo 1.8.31, libc-2.31",
.sudoedit_path = SUDOEDIT_PATH,
.smash_len_a = 56,
.smash_len_b = 54,
.null_stomp_len = 63,
.lc_all_len = 212
},
{
.target_name = "Debian 10.0 (Buster) - sudo 1.8.27, libc-2.28",
.sudoedit_path = SUDOEDIT_PATH,
.smash_len_a = 64,
.smash_len_b = 49,
.null_stomp_len = 60,
.lc_all_len = 214
}
};
其中包含3個已經寫好的目標系統,當然它也支持手動的設定這些,看圖:

漏洞觸發關鍵點,我圈出來了

POC2
https://github.com/stong/CVE-2021-3156
分析思路:
思路很秀,它是加了一個-A選項
sudoedit -A:通常情況下,如果需要密碼,它會從用戶終端讀取, 當設定了-A選項,讀取用戶的密碼和輸出密碼到標準輸出
你可以理解為它會將一個假的/etc/passwd覆寫到原檔案的效果,這樣你當前的賬戶可以被你自己偽造成任意uid,
寫在最后
很多公眾號都在蹭熱度啊,明寫centos不會中招,只有ubuntu會中招,拿到poc起碼看看再下結論吧,漏洞起因是sudoedit,直接下個只有ubuntu會中招的結論是不是有點草率,公眾號這么寫坑的可不是少部分人,所謂的復現就是單純下載POC,編譯,執行,結束????
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256309.html
標籤:其他
下一篇:ubuntu安裝Go1.9.2
