日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux提权CVE-2022-0847分析

發布時間:2025/3/21 linux 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux提权CVE-2022-0847分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

漏洞利用原理:

通過pipe生成一個管道,然后使用write調用pip_write將管道填滿flag為PIPE_BUF_FLAG_CAN_MERGE,然后用read將緩沖區全部釋放,但是根據splice進行零拷貝時copy_page_to_iter_pipe沒有將flag初始化,導致緩沖區仍然留存PIPE_BUF_FLAG_CAN_MERGE。進而在write上檢測flag存在PIPE_BUF_FLAG_CAN_MERGE來達成越權寫入操作。

什么是零拷貝?

零拷貝是作用于兩個文件間移動,正常文件拷貝流程一般為cpu對內存空間進行多次讀寫操作將拷貝數據從用戶態到內核態再返回用戶態,而零拷貝讓數據不需要經過用戶態,而是將內核緩沖區與用戶程序進行共享,這樣就不需要把內核緩沖區的內容往用戶空間拷貝。應用程序再調用write(),操作系統直接將內核緩沖區的內容傳輸到指定輸出端了。
具體的文件通過管道傳輸流程:
in端 == write == pipe == splice == out端
out端通過splice與內核緩沖區進行共享,然后in端調用write將內容拷貝到內核緩沖區進而寫入到out端。

【→所有資源關注我,私信回復“資料”獲取←】
1、網絡安全學習路線
2、電子書籍(白帽子)
3、安全大廠內部視頻
4、100份src文檔
5、常見安全面試題
6、ctf大賽經典題目解析
7、全套工具包
8、應急響應筆記

設置緩沖區flag為PIPE_BUF_FLAG_CAN_MERGE

分析pipe_write函數源碼


當我們給pipe->tmp_pipe = NULL下斷點后,可以看到當我們執行exp后的flags設置為0x10(PIPE_BUF_FLAG_CAN_MERGE)


這里的page = 0xffffea00001b09c0,是我們write申請的頁,然后用于與內核緩沖區進行數據傳輸
根據堆棧回溯可以看到,這個只是調用write時會將flags設置為PIPE_BUF_FLAG_CAN_MERGE

static void prepare_pipe(int p[2]) {if (pipe(p)) abort(); //這里要查看一下pipe的棧回溯調用鏈const unsigned pipe_size = fcntl(p[1], F_GETPIPE_SZ); //調用pipe.c *1392static char buffer[4096];/* fill the pipe completely; each pipe_buffer will now havethe PIPE_BUF_FLAG_CAN_MERGE flag */for (unsigned r = pipe_size; r > 0;) {unsigned n = r > sizeof(buffer) ? sizeof(buffer) : r;write(p[1], buffer, n);r -= n;}/* drain the pipe, freeing all pipe_buffer instances (butleaving the flags initialized) */for (unsigned r = pipe_size; r > 0;) {unsigned n = r > sizeof(buffer) ? sizeof(buffer) : r;read(p[0], buffer, n);r -= n;}/* the pipe is now empty, and if somebody adds a newpipe_buffer without initializing its "flags", the bufferwill be mergeable */ }

上述代碼實質就是將pipe緩沖區所以flag設置為PIPE_BUF_FLAG_CAN_MERGE,然后調用read是釋放pipe緩沖區來讓緩沖區變為閑置等待調用狀態,進而讓flag為PIPE_BUF_FLAG_CAN_MERGE執行下一次exp中的write。
但是我們只關注flag上的PIPE_BUF_FLAG_CAN_MERGE,那么調用read后會不會將flags上的PIPE_BUF_FLAG_CAN_MERGE呢?

splice實現零拷貝傳輸

在調用splice時會調用到__copy_page_to_iter
下面是splice的調用鏈:(查看copy_page_to_iter_pipe堆棧平衡得出)

sys_splice __do_splice ==> do_splice ===> splice_file_to_pipe ====> generic_file_splice_read =====> call_read_iter ======> copy_folio_to_iter =======> flimap_read ========> copy_folio_to_iter =========> copy_page_to_iter ==========> __copy_page_to_iter ===========> copy_page_to_iter_pipe

在splice_file_to_pipe上存在3種調用情況:

  • in/out都是pipe類型
  • in是pipe類型
  • out是pipe類型(這是exp調用類型)

如下即為exp使用的第三種splice零拷貝的源碼:


上面只校驗了out端是否為pipe類型,然后檢測執行程序用戶是否對root權限文件具有讀寫操作,然后就調用splice_file_to_pipe來進行下一步漏洞利用。

注意下面這個判斷:

if (off_in) { //這里限制了只能從偏移值1開始if (!(in->f_mode & FMODE_PREAD)) //判斷輸入是否有讀權限,所以exp只需要對輸出到的root權限文件具有可讀權限return -EINVAL;offset = *off_in;} else { .....

if (off_in) {判斷是導致進行越權寫入偏移值必須為0的原因。

分析copy_page_to_iter_pipe


上述即為splice零拷貝過程中“out端與內核緩沖區共享”的調用源碼
可以看到,由于是頁引用行為,所以我們傳輸的數據大小不能大于原文件大小。
補丁上也是在這個文件上對緩沖區的flag進行了初始化操作。
那么我們可以得知,只要在這里對flag進行初始化,就不可能導致越權讀寫產生,那么說明了判定flag存在PIPE_BUF_FLAG_CAN_MERGE進而達到下一步利用這個過程是不在splice上的。
下面是利用代碼:

ssize_t nbytes = splice(fd, &offset, p[1], NULL, 1, 0); //將指定文件的內容從指定offset開始copy到p[1]上,長度為1字節

調用write連接pipe進行splice零拷貝時的檢測手段

分析零拷貝中所有涉及函數可知,只有在調用pipe_write時存在檢測操作。
分析pipe_write:
當緩沖區上的flag為PIPE_BUF_FLAG_CAN_MERGE則直接調用copy_page_from_iter對數據進行管道寫入操作,進而達成越權寫。


所以可以知道read釋放緩沖區時沒有對flag進行初始化操作。
下面是利用代碼:

nbytes = write(p[1], data, data_size); //這里開始觸發任意文件寫入,將我們指定的內容copy到p[1]上

關于參數測試


經案例上使用的"root"可以使用,而""root"可以使用,而""root"使"root"無輸出

總結

以上是生活随笔為你收集整理的Linux提权CVE-2022-0847分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本一区二区视频在线 | 欧美成人精品欧美一级 | 天天综合天天添夜夜添狠狠添 | 国产日韩成人内射视频 | 人妻一区二区三区四区五区 | 欧美精品久久久久性色 | 亚洲综合精品视频 | 激情小视频在线观看 | 国产视频你懂的 | 沟厕沟厕近拍高清视频 | 在线观看亚洲av每日更新 | 黄色小视频在线观看 | 人妻少妇偷人精品久久性色 | 日本大奶少妇 | 欧美无砖专区免费 | 伊人影院在线播放 | 狠狠五月天 | av在线在线 | 嫩草视频在线观看免费 | 超碰人人草人人干 | 国产午夜影院 | 欧美超逼视频 | 久久免费精品视频 | 亚洲国产一区在线观看 | 91无毒不卡 | 一级在线免费观看 | 亲女禁h啪啪宫交 | 成人精品三级av在线看 | 轻点好疼好大好爽视频 | 色婷婷激情五月 | 亚洲欧美日韩一区 | 毛片视频软件 | 亚洲AV无码精品久久一区二区 | 人人夜| 全黄一级男人和女人 | 影音先锋中文字幕在线视频 | 欧美精品久久96人妻无码 | 一区三区视频在线观看 | 最近中文字幕mv免费高清在线 | 2021国产精品 | 91在线无精精品入口 | 亚洲国产精品久久久久久6q | 亚洲人视频 | www.色日本 | 国产sm调教视频 | 美女屁股无遮挡 | 91蝌蚪在线观看 | 男人添女人下部高潮全视频 | 久久久久久国 | 成年人免费av | 国产美女免费视频 | 18久久久 | 五月天久久综合 | 青青视频在线播放 | 一级免费在线观看 | 色综合av综合无码综合网站 | www.久色 | 精品久久成人 | 国产日韩视频 | 少妇婷婷| 亚洲黄色小说网 | 国产免费专区 | 久久精品一二三区 | 五月在线 | 国产不卡av在线 | 亚洲高清免费观看 | 色妇av| 久久99精品国产91久久来源 | 妖精视频污| 国产精品久久久久不卡 | caoporen超碰 | 黄色小说在线视频 | 国产肥白大熟妇bbbb视频 | 精品国产av一区二区 | 一本综合久久 | 国产男女自拍 | 色呦呦影院 | 337p粉嫩大胆噜噜噜噜69影视 | 国产一区二区视频免费观看 | 五月天丁香婷 | 色老头在线视频 | 免费国产成人 | 久久国产传媒 | 午夜久| 欧洲亚洲女同hd | 国产r级在线 | 久久久视频在线观看 | 深夜福利成人 | 麻豆精品一区 | 国产高清www | 免费国产黄色 | 女厕厕露p撒尿八个少妇 | 日韩经典av | 第一章豪妇荡乳黄淑珍 | 久久精品免费 | 欧美黄色激情视频 | 亚洲av成人精品毛片 | 伊人春色视频 | 亚洲天堂中文字幕在线观看 |