亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

CVE-2020-7468:FreeBSD ftpd chroot本地提權漏洞的實例分析

發布時間:2021-11-20 10:43:19 來源:億速云 閱讀:256 作者:柒染 欄目:安全技術

CVE-2020-7468:FreeBSD ftpd chroot本地提權漏洞的實例分析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

漏洞概述

在今年7月,我們從一位匿名研究員那里收到了FreeBSD中的一個本地權限提升漏洞的相關信息,即一個存在于FreeBSD的文件傳輸協議守護進程(ftpd)中的漏洞。ftpd提供了一個名為ftpchroot的功能,旨在限制經過身份驗證的用戶對文件系統的訪問。這個特性是使用“chroot”系統調用實現的,這是一種通常稱為“chroot jail”的安全技術,chroot jail可以將進程限制在文件系統的受限部分來運行。但是,在該漏洞的幫助下,攻擊者實際上可以利用這種被“囚禁”的狀態來進行各種非法操作,將其權限從受限制的FTP帳戶提升為“root”權限,并允許攻擊者能夠在目標系統上執行任意代碼。此漏洞在FreeBSD FTP守護程序中存在了很長時間,最早可以追溯到FreeBSD 6.3版本。目前,這個漏洞被標記為了CVE-2020-7468/ZDI-20-1431,相關漏洞補丁已于今年9月份正式發布。

漏洞分析

這個漏洞存在的根本原因是freebsd/libexec/ftpd/ftpd.c的chroot()函數在進行業務處理時存在設計缺陷。下面給出的是存在漏洞的函數簡化版本:

void pass(char *passwd)

{

// ...

        if (guest || dochroot) {

// ...

                /*

                 * Finally, do chroot()

                 */

                if (chroot(chrootdir) < 0) {

                        reply(550, "Can't change root.");

                        goto bad;

                }

                __FreeBSD_libc_enter_restricted_mode();

        } else  /* real user w/o chroot */

                homedir = pw->pw_dir;

// ...

        if (chdir(homedir) < 0) {

                if (guest || dochroot) {

                        reply(550, "Can't change to base directory.");

                        goto bad;

                } else {

// ...

                }

// ...

bad:

        /* Forget all about it... */

#ifdef  LOGIN_CAP

        login_close(lc);

#endif

        if (residue)

                free(residue);

        end_login();

}

如果 FTP 用戶試圖登錄并被配置為限制在/etc/ftpchroot中的chroot jail,那么ftpd將調用chroot和chdir系統調用)。如果chdir系統調用失敗,則代碼將跳轉到標簽bad處。在這種情況下,ftpd仍然會等待新的登錄,但連接已鎖定在chroot jail內。此時,將導致連接上的下次登錄嘗試會引發錯誤行為。

漏洞利用

為了強制chdir系統調用在登錄過程中失效,攻擊者可使用命令 chmod 0 在主目錄上更改權限。另外,攻擊者將會上傳和主頁目錄相關的文件“etc/spwd.db”。該文件是修改過的常規 FreeBSD 系統(包含root用戶的已知密碼)的密碼數據庫。chdir調用失敗后,ftpd會被鎖定在chroot jail中,以便所有后續的文件系統訪問都會跟用戶主目錄相關,而不是真實的文件系統root路徑。這樣一來,當對后續登錄進行認證時,ftpd讀取攻擊者的spwd.db而不是存儲在文件系統真實root目錄下的/etc/spwd.db。此時,攻擊者就可以通過已知密碼以root身份進行登錄了。

下一步,攻擊者需要上傳/etc/pam.d/ftpd和/usr/lib/pam_opie.so.5。第一個文件可以讓ftpd在登錄過程中加載多個動態庫,其中就包括這第二個文件。第二個文件旨在通過已獲得的root權限來突破chroot jail并執行反向Shell。接下來,攻擊者就能夠以root權限來執行任意代碼了。

漏洞利用步驟大致如下:

  • 通過受限的 FTP 賬戶登錄。

  • 上傳包含已知root密碼的etc/spwd.db。

  • 執行“chmod 0”。

  • 再次以受限的 FTP 賬戶登錄。在登錄過程中,chdir執行失敗,導致ftpd進程在chroot jail中被鎖定。

  • 通過已知密碼以 root 身份登錄。

  • 上傳/etc/pam.d/ftpd和/usr/lib/pam_opie.so.5,后者包含一個反向Shell。

  • 再次以受限 FTP 賬戶身份登錄。和之前一樣,chdir執行失敗,導致ftpd進程在chroot jail中被鎖定。

  • 通過已知密碼以 root 身份登錄。ftpd執行該反向Shell。

漏洞修復

為解決這個問題,FreeBSD對其功能實現代碼進行了修改,如果chdir系統調用失敗的話,則ftpd將會立刻斷開連接:

void fatalerror(char *s)

{

        reply(451, "Error in server: %s", s);

        reply(221, "Closing connection due to server error.");

        dologout(0);

        /* NOTREACHED */

}

 

void pass(char *passwd)

{

// ...

        if (chdir(homedir) < 0) {

                if (guest || dochroot) {

                        fatalerror("Can't change to base directory.");

                } else {

//...

}

總結

這個漏洞是一個邏輯提權漏洞,因此它的穩定性非常強,這個漏洞跟九月份發布的FreeBSD 內核提權漏洞(CVE-2020-7460)也是不一樣的。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

茂名市| 平遥县| 聂拉木县| 商洛市| 多伦县| 定结县| 甘孜| 宜黄县| 洛川县| 兴安盟| 丽水市| 邵武市| 松江区| 铜山县| 新邵县| 宝丰县| 吴江市| 包头市| 蒲城县| 兰考县| 沂水县| 漾濞| 凤山县| 松溪县| 湟中县| 蒙阴县| 定边县| 新巴尔虎左旗| 厦门市| 桃园市| 浮山县| 韶山市| 北海市| 堆龙德庆县| 庆元县| 连平县| 射洪县| 镇坪县| 永德县| 台中市| 中江县|