中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

北安市| 同江市| 穆棱市| 高邮市| 灯塔市| 常熟市| 侯马市| 楚雄市| 株洲县| 花垣县| 肥乡县| 文昌市| 平乡县| 长岛县| 清远市| 玛曲县| 东至县| 灵宝市| 左贡县| 双鸭山市| 尉氏县| 巴青县| 庆元县| 临朐县| 博乐市| 融水| 台州市| 武鸣县| 梅州市| 九龙坡区| 昂仁县| 酒泉市| 郧西县| 红安县| 虹口区| 莎车县| 师宗县| 都昌县| 逊克县| 平江县| 裕民县|