漏洞預警|Linux 內核中TCP SACK機制遠程DoS漏洞(CVE-2019-11477)

2021-02-15 山石網科安全技術研究院

漏洞描述

近日,RedHat官方發布公告,研究人員在Linux內核處理TCP網絡時發現了三個重大漏洞。最嚴重的一個漏洞允許遠程攻擊者在受影響軟體的系統中觸發漏洞造成內核崩潰,從而影響系統的可用性。

三個漏洞的CVE編號為CVE-2019-11477(高危)、CVE-2019-11478和CVE-2019-11479。

前兩個漏洞與選擇性確認(SACK)數據包和最大段大小(MSS)有關,第三個僅與最大段大小(MSS)有關。

漏洞分析

TCP選擇性確認(SACK)機制

數據接收方可以通知發送方已成功接受的所有段。這允許發送方重新傳輸從其已知集中丟失的段。當禁用TCP SACK時,需要更大的重傳集來重新傳輸完整的數據流。

最大段大小(MSS)

是在分組的TCP報頭中設置的參數,其指定重構的TCP段中包含的數據總量。
由於數據包在跨不同路由傳輸時可能會被碎片化,因此主機必須將MSS指定為等於主機可以處理的最大IP數據報有效負載大小。非常大的MSS大小會導致數據包在到達目的地的路上被碎片化,而較小的數據包可以確保較少的碎片但最終會導致未使用的開銷。

作業系統和傳輸類型可以默認為指定的MSS大小。具有特權訪問權限的攻擊者可以在數據包中創建具有精心設計的MSS選項的原始數據包,來進行攻擊。

TCP是面向連接的協議

當雙方希望通過TCP連接進行通信時,他們通過交換信息建立連接,例如請求發起(SYN)連接,初始序列號,確認號,通過此連接使用的最大段大小(MSS),權限發送和處理選擇性確認(SACK)等。此連接建立過程稱為3次握手。

TCP通過稱為Segment的單元發送和接收用戶數據。一個TCP段包括TCP報頭,選項和用戶數據的。

每個TCP段具有序列號(SEQ)和確認號(ACK)。

這些SEQ和ACK號用於跟蹤接收器成功接收哪些段。ACK號表示接收器的下一個預期段。

示例:上面的用戶'A'通過13個100位元組的段發送1千字節的數據,13是因為每個段具有20位元組的TCP頭。在接收端,用戶'B'接收段1,2,4,6,8-13,段3,5和7丟失,不會被用戶'B'接收。

通過使用ACK號碼,用戶'B'將指示它正在期望段號3,用戶'A'讀取為用戶'B'接收到2之後沒有段,並且用戶'A'將重新發送全部即使用戶'B'成功接收到第4,6和8-13段,從3開始的段也是如此。用戶'B'無法向用戶'A'表明。這會導致網絡的低效使用。

選擇性確認:SACK

為了克服上述問題,選擇性確認(SACK)機制由RFC-2018設計和定義。通過選擇性確認(SACK),上面的用戶'B'使用其TCP選項欄位向用戶'A'通知它已成功接收的所有段(1,2,4,6,8-13),因此用戶'A'需要僅重傳段3,5和7,從而大大節省了網絡帶寬並避免了進一步的擁塞。

CVE-2019-11477 SACK Panic
套接字緩衝區(SKB)是Linux TCP / IP實現中使用的最核心的數據結構。它是緩衝區的連結列表,用於保存網絡數據包。這樣的列表可以充當傳輸隊列,接收隊列,SACK'd隊列,重傳隊列等.SKB可以將分組數據保存成片段。Linux SKB最多可以容納17個片段。

linux / include / linux / skbuff.h 
定義MAX_SKB_FRAGS(65536 / PAGE_SIZE + 1)=> 17

每個片段在x86(PowerPC上為64KB)的數據中最多可容納32KB。當數據包將被發送時,它被放置在發送隊列中,它的詳細信息保存在控制緩衝區結構中

    linux / include / linux / skbuff.h 
struct tcp_skb_cb { 
    __ u32 seq; / *起始序列號* / 
    __u32 end_seq; / * SEQ + FIN + SYN + 
    datalen * / __u32 tcp_tw_isn; 
        struct { 
                u16 tcp_gso_segs; 
                u16 tcp_gso_size; 
        }; 
    __u8 tcp_flags; / 2 * TCP標頭標誌。(tcp [13])* / 
    ... 
}

其中,' tcp_gso_segs '和' tcp_gso_size '欄位用於告知設備驅動程序有關分段卸載的信息。

當Segmentation offload打開並且SACK機制也被啟用時,由於數據包丟失和某些數據包的選擇性重傳,SKB可能最終持有多個數據包,由' tcp_gso_segs ' 計數。列表中的多個這樣的SKB被合併為一個以有效地處理不同的SACK塊。它涉及將數據從一個SKB移動到列表中的另一個SKB。在此數據移動期間,SKB結構可以達到其最大限制為17個片段,並且' tcp_gso_segs '參數可以溢出並觸發下面的BUG_ON()調用,從而導致所述內核崩潰問題。

static bool tcp_shifted_skb(struct sock * sk,...,unsigned int pcount,...)

... 
tcp_skb_pcount_add(prev,pcount); 
BUG_ON(tcp_skb_pcount(skb)<pcount); <= SACK panic 
tcp_skb_pcount_add(skb,-pcount); 
... 
}

遠程用戶可以通過將TCP連接的最大段大小(MSS)設置為48位元組的最低限制並發送一系列特製的SACK數據包來觸發此問題。最低MSS每段僅留下8位元組數據,因此增加了發送所有數據所需的TCP段數。

漏洞危害

高危


影響版本

影響Linux 內核2.6.29及以上版本

安全建議

1.請儘快更新補丁

https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_1_4.patch

Linux內核版本>=4.14需要打第二個補丁

https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_1a.patch


2.以下腳本檢查系統是否存在漏洞

https://access.redhat.com/sites/default/files/cve-2019-11477--2019-06-17-1629.sh


參考信息

https://access.redhat.com/security/vulnerabilities/tcpsack

如需幫助請諮詢 hscert@hillstonenet.com

相關焦點

  • CVE-2019-11477:Linux 內核中TCP SACK機制遠程Dos預警分析
    ,CVE編號為CVE-2019-11477、CVE-2019-11478和CVE-2019-11479,其中CVE-2019-11477漏洞能夠降低系統運行效率,並可能被遠程攻擊者用於拒絕服務攻擊,影響程度嚴重。
  • 預警 | Linux 爆 TCP 「SACK Panic」 漏洞!N 家中招:AWS、阿里雲、騰訊雲、華為雲、RedHat等
    CVE-2019-11477 是最嚴重的四個缺陷,被稱作 「SACK panic」,即Linux內核的TCP選擇性確認(TCP SelectiveAcknowledgement 簡稱SACK)功能。遠程攻擊者可以利用這個漏洞來觸發可能導致計算機崩潰的內核錯誤(Kernel panic),進而引起拒絕服務。波及Linux內核版本2.6.29以及高於2.6.29以上版本。
  • Linux 內核 TCP MSS 機制詳細分析
    作者:Hcamael@知道創宇404實驗室上周Linux內核修復了4個CVE漏洞[1],其中的CVE-2019-11477
  • CNNVD漏洞月報(2019年6月)
    重大漏洞預警1、Linux和FreeBSD內核多個安全漏洞(CNNVD-201906-681、CVE-2019-11477)(CNNVD-201906-682、CVE-2019-11478)(CNNVD-201906-683、CVE-2019-11479)(CNNVD-201906-703、CVE-2019-5599):攻擊者可以遠程利用這些漏洞
  • 【漏洞預警】CVE-2021-33909 Linux內核權限提升漏洞
    描述近日,可信安全團隊監測到 Linux 內核文件系統層中存在本地提權的漏洞 (CVE
  • 【漏洞預警】CVE-2019-0708微軟遠程桌面服務遠程代碼執行漏洞(BlueKeep)復現
    ,其作業系統遠程桌面(Remote Desktop Services),俗稱的3389服務存在嚴重安全漏洞(編號CVE-2019-0708):攻擊者在沒有任何授權的情況下,可以遠程直接攻擊作業系統開放的3389服務,在受害主機上執行惡意攻擊行為,包括安裝後門,查看、篡改隱私數據,創建擁有完全用戶權限的新帳戶,影響範圍從Windows XP到Windows 2008 R2。
  • 【漏洞通告】Linux Kernel 本地權限提升漏洞(CVE-2021-33909)
    0x00 漏洞概述CVE     IDCVE-2021-33909時
  • 漏洞預警 I Windows遠程桌面服務的遠程代碼執行漏洞【CVE-2019-0708】
    5月14日,微軟官方發布安全補丁,修復了Windows遠程桌面服務的遠程代碼執行漏洞,攻擊者可以利用此漏洞遠程無需用戶驗證通過發送構造特殊的惡意數據在目標系統上執行惡意代碼
  • CVE-2019-0708 漏洞分析及相關測試
    漏洞背景CVE-2019-0708 | 遠程桌面服務遠程執行代碼漏洞安全漏洞發布時間: 2019-05-14MITRE CVE-2019-0708當未經身份驗證的攻擊者使用 RDP 連接到目標系統並發送經特殊設計的請求時,遠程桌面服務(以前稱為「終端服務」)中存在遠程執行代碼漏洞。此漏洞是預身份驗證,無需用戶交互。
  • 漏洞預警|Linux內核本地提權漏洞分析(CVE-2019-13272)
    監測發現Linux修復了一個本地內核提權漏洞,利用此漏洞,攻擊者可將普通用戶權限提升為Root權限。HSCERT研判此漏洞為嚴重漏洞,攻擊者拿到本地權限可以直接提權至root。:╭─birdpwn@ubuntu ~/CVE-2019-13272 ╰─$ iduid=1000(birdpwn) gid=1000(birdpwn) groups=1000(birdpwn)╭─birdpwn@ubuntu ~/CVE-2019-13272 ╰─$ gcc -s poc.c -o ptrace_traceme_root
  • 關於這些年來Windows遠程代碼執行漏洞CVE
    >永恆之藍MS17-010  通過445和139埠來利用SMBv1和NBT中的遠程代碼執行漏洞溢出,惡意代碼會掃描開放445文件共享埠的windows。漏洞出現在Windows SMB v1中的內核態函數srv!SrvOs2FeaListToNt在處理FEA(File Extended Attributes)轉換時,在大非分頁池(內核的數據結構,Large Non-Paged Kernel Pool)上存在緩衝區溢出。
  • 漏洞預警|Jackson遠程代碼執行高危漏洞分析(CVE-2019-12384)
    我們分析復現如何利用此反序列化漏洞來觸發伺服器端請求偽造(SSRF)漏洞和遠程代碼執行漏洞(RCE)。漏洞對應的編號為CVE-2019-12384,RedHat的多個分支受該漏洞影響,如下所示:漏洞利用過程中需要用到能夠配合Jackson的一個類;4、目標應用使用的Jackson並沒有阻止這個特定的「gadget」類。在此次研究過程中,我們假設利用場景已滿足條件1及條件2。實際上,我們重點尋找的是能夠滿足條件3及條件4的gadget。
  • Windows遠程桌面服務漏洞預警(CVE-2019-0708)
    一、漏洞概述5月15日,微軟發布了針對遠程桌面服務(Remote Desktop Services ,以前稱為終端服務)的關鍵遠程執行代碼漏洞CVE-2019-0708的修復程序,該漏洞影響某些舊版本的Windows。攻擊者一旦成功觸發該漏洞,便可以在目標系統上執行任意代碼,該漏洞的觸發無需任何用戶交互操作。
  • 【漏洞預警】Firefox CVE-2019-11707遠程代碼執行漏洞安全預警通告
    尊敬的客戶:近日,Firefox官方發布安全更新,修復了一個存在於 Firefox 全平臺所有版本中的遠程代碼執行漏洞,並稱此漏洞已經被在野利用。奇安信安全監測與響應中心將持續關注該漏洞進展,並第一時間為您更新該漏洞信息。
  • 不斷發酵的windows RDP遠程代碼執行漏洞CVE-2019-0708
    >360在第一時間發布了預警通告https://cert.360.cn/warning/detail?id=73c70eef5c23ee70f6ca64d1a0592fd62019年5月19日github出現能到達漏洞點的POChttps://github.com/digital-missiles/CVE-2019-0708-PoC-Hitting-Path2019年5月20日360全球獨家推出RDP遠程漏洞無損掃描
  • 【漏洞預警】Linux內核ipv4/udp.c 遠程任意代碼執行(CVE-2016-10229)
    漏洞描述Linux kernel是美國Linux基金會發布的作業系統Linux所使用的內核。
  • Webmin遠程命令執行漏洞預警(CVE-2019-15107)
    長按二維碼關注御見威脅情報中心背景近日,Webmin被爆出1.920版本之前存在一個遠程命令執行漏洞(CVE-2019-15107),當用戶開啟Webmin密碼重置功能後,攻擊者利用該漏洞可在易受損系統中執行任意命令,進而獲取系統Shell。
  • 漏洞預警|Firefox遠程代碼執行漏洞(CVE-2019-11707)
    該漏洞是由 Google Project Zero 安全研究團隊的 Samuel Groß 和Coinbase安全團隊共同發現並報告的,漏洞編號為 CVE-2019-11707,安全等級被劃分為「嚴重」。以注重安全和隱私著稱的 Firefox 出現 0day 漏洞是非常罕見的,Mozilla 團隊最後一次修補Firefox 0day 還是在 2016 年 12 月。
  • CVE-2019-5786:chrome在野利用0day漏洞預警
    該漏洞危害較為嚴重,影響較大。0x01 漏洞詳情CVE-2019-5786是位於FileReader中的UAF漏洞,由Google's Threat Analysis Group的Clement Lecigne於2019-02-27報告,目前沒有公布其它細節。
  • 漏洞分析|CVE-2019-0708遠程桌面高危漏洞分析
    微軟發布了最新的安全公告,修復了Windows遠程桌面服務的遠程代碼執行漏洞,該漏洞會影響大部分舊版本的windows系統,漏洞編號:CVE-2019-0708。遠程桌面協議(RDP)本身是不容易受到攻擊的,此漏洞是預身份驗證,並且無需用戶交互。這意味著利用此漏洞的任何惡意軟體都可能以與 2017年WannaCry惡意軟體遍布全球的類似方式在網絡中進行蠕蟲傳播  。