Ivanti Connect Secure 零時差遭利用
CISA · 2026-10-13
Ivanti Connect Secure 的 welcome.cgi 以 URL 判斷要不要驗證,卻以另一個 HTTP 標頭決定請求實際送到哪支 CGI,這個落差讓未經驗證的人可以直接呼叫受保護的腳本。漏洞編號 CVE-2026-104935,已被攻擊者用來竊取憑證與外傳資料。
CISA 在 2026-10-13 把它列入 KEV 目錄,同日 Volexity 公開了完整利用鏈。Volexity 稱活動從 2026-10-03 開始,目標是一台已修補到 22.8R2.4 的設備。
漏洞機制
利用鏈有三段。第一段是驗證繞過:攻擊者請求公開路徑 /dana-na/auth/url_default/welcome.cgi,並在 X-DSCGI-PATH 標頭指定一支受保護的 CGI。授權檢查只看 URL,實際的目的地卻由標頭決定。
GET /dana-na/auth/url_default/welcome.cgi
X-DSCGI-PATH: /home/webserver/htdocs/dana/fb/smb/wu.cgi第二段是遠端程式碼執行:上傳處理程式 wu.cgi 先把檔案寫到 /home/runtime/tmp/<MD5(filename)>,之後才檢查是不是合法的 ZIP。不合法的檔案會被刪除,但會短暫存在,攻擊者平行送出執行請求,在這個 race window 內跑上傳的 Perl 腳本。
第三段是提權到 root:特權服務 dsinvoked 依 DSCache 設定以 root 執行維護工作。攻擊者在 cgi-server 行程的記憶體中修改 /home/lib/libdsplibs.so,把任務導向 Perl 直譯器,磁碟上的檔案不會被改動,事後再還原記憶體狀態。
原本的問題與偵測盲區
這條鏈每下一個指令就完整重跑一次,結果從 HTTP 回應帶回,Volexity 未發現後門或 web shell。沒有常駐檔案,傳統的檔案完整性檢查就沒有東西可比對。CISA 與 Volexity 都指出 Ivanti Integrity Checker Tool 可能偵測不到,因為指令在記憶體中執行,需要網路與記憶體鑑識。
攻擊者還清理痕跡:選擇性刪除 /home/runtime/dlogs/debuglog 與 /var/log/audit/audit.log 的條目,並把改名的 tcpdump 偽裝成 /data/.icscap/dsstatmond。Volexity 表示各項清理成功到什麼程度尚未完全確認。
Volexity 將這個尚未歸類的攻擊者稱為 UTA0576,以低信心判斷其動機為犯罪,以高信心判斷其正在為橫向移動做準備,並以中信心判斷其以大型語言模型輔助開發利用程式與後續操作。這些是 Volexity 的評估,並非 CISA 的結論。入侵後的活動包含查詢 Active Directory、Kerberoast 與密碼噴灑,意味著 VPN 設備被攻破後,下一步目標就是內網的網域帳號。
受影響版本
25.1.1.1及更早25.1.2.2及更早22.8R2.4及更早
CISA 同時提醒 Connect Secure 22.8 將在 2027-01-31 終止支援。CISA 警示未列出修補後的具體版本號,Volexity 則稱驗證繞過與 RCE 的修補已於 2026-10-13 釋出,提權的修補「預計在後續版本」發布。Ivanti 公告頁無法抓取,CVSS 分數本文不引用。
影響範圍與該檢查的東西
負責 VPN 閘道的網管與資安團隊,應先升級,再假設曾被入侵來檢查。Volexity 觀察到攻擊者使用設備上儲存的 AD 服務帳號查詢 LDAP,搜尋 LAPS 密碼與 BitLocker 復原金鑰,並從封包擷取檔 /data/.icscap/cap* 中擷取明文 LDAP 與 HTTP Basic 憑證及 NTLM 雜湊。因此設備上存放過的憑證都要視為外洩。
- 在反向代理或 WAF 日誌找對
welcome.cgi的大量請求,以及 URL 路徑與X-DSCGI-PATH不一致的請求。 - 檢查
/tmp/是否有ml.py、rq5.py、mk.py、rr.py、h.py、sp_run.py,以及隱藏目錄/data/.icscap/。 - Volexity 列出的攻擊基礎設施為
108.165.147[.]64。
若懷疑已遭入侵,CISA 建議的順序是:備份設定、原廠重設並升級(雲端與虛擬設備則重建實例)、還原設定,最後重設所有網域、管理員與本機帳號密碼,並撤銷重發憑證、重設儲存的 API 金鑰與授權伺服器憑證。只升級不重設,不會清掉已被拿走的憑證。
原始來源:CISA 警示、Volexity 技術分析