A watchTowr Labs biztonsági kutatói egy friss Citrix NetScaler ADC és NetScaler Gateway, csendben kijavított “heap overflow” hibából egy teljesen működő, hitelesítés nélküli, root jogosultsággal futó, távoli kódfuttatásig (RCE) eszkalálódó exploitot építettek. A Citrix NetScaler egy vállalati forgalomkezelő és terheléselosztó platform, amely szinte minden nagyvállalati hálózatban megtalálható a világon. Feladatai közé tartozik a terheléselosztás, az SSL tehermentesítés, a hitelesítés kezelése és a távoli hozzáférés biztosítása.
A kutatás egy SAML-t használó, sebezhető NetScaler 13.1-es kiadású eszközre épült. A kutatók tesztjei alapján a hiba akkor érhető el, ha a NetScaler-eszköz SAML-t Service Providerként (szolgáltatóként, SP) vagy Identity Providerként (azonosítás-szolgáltatóként, IdP) használja. A Citrix az alábbi verziókat sorolta fel érintettként:
- NetScaler ADC és NetScaler Gateway 14.1, a 14.1-72.61-es kiadás előtt
- NetScaler ADC és NetScaler Gateway 13.1, a 13.1-63.18-as kiadás előtt
A probléma a SAML-aláírás kanonizációja (canonicalization) során lép fel. A NetScaler korábbi verziói a támadó által kontrollált adatot a SAML üzenet ds:SignedInfo eleméből egy fix méretű, globális memóriapufferbe másolják, anélkül, hogy ellenőriznék, valójában befér-e. Ha valaki egy túlméretezett SignedInfo elemet küld, a másolási művelet átcsordul a puffer végén, megrongálja a szomszédos csomagfeldolgozó motor állapotát, és végül összeomlasztja az nsppe folyamatot, amely a root jogosultsággal futó csomagfeldolgozó motor.
A blogbejegyzés szemléletes hasonlattal él. Amikor valaki aláírt SAML üzenetet küld a NetScalernek, a rendszernek ellenőriznie kell, hogy az aláírás valódi. Az egyszerűség kedvéért azonban nem a teljes üzenetet írják alá, csak egy <SignedInfo> nevű kis blokkot.
A gond az, hogy ugyanaz az XML tartalom sokféleképpen leírható (extra szóközök, más sorrendű attribútumok, sortörések), és ez problémát okoz az aláírásoknál, mert az aláírás matematikailag pontos byte-okra épül. Ezért mindkét fél (a küldő és a NetScaler) egy szabványos, “kitisztított” formára hozza a SignedInfo blokkot (ezt hívják kanonizációnak), mielőtt a hash-elés megtörténne. Pontosan ebben a lépésben másolja a NetScaler a kitisztított szöveget a hibás, fix méretű pufferbe, itt keletkezik a túlcsordulás. A kutatók ebből a memóriahibából jutottak el a teljes kompromittálásig. A túlcsorduló adatokkal pontosan irányítható memóriaírást (write-what-where primitívet) alakítottak ki, amivel átvették a folyamat vezérlését, saját kódot futtattak, és végül root jogosultságra emelték a hozzáférésüket.
Az eset jól szemlélteti, hogyan válhat egy hivatalosan mindössze „memóriatúlcsordulásként” dokumentált sérülékenység alapos elemzés, megfelelő szakértelem és kitartó kutatómunka eredményeként teljes értékű, hitelesítés nélkül kihasználható, root jogosultságú távoli kódfuttatást lehetővé tevő exploittá:
- Nincs szükség hitelesítésre – a sebezhető funkció (SAML-aláírás-ellenőrzés) a bejelentkezés előtt érhető el
- A memóriakorrupció egy pontosan irányítható write-what-where primitívvé fejleszthető
- Az ASLR és egyéb védelmi mechanizmusok hiánya (nincs címvéletlenszerűsítés, futtatható heap) drasztikusan megkönnyíti a kihasználást
- A webshell-alapú perzisztencia megkerülhető technikákkal (szignálkezelők letiltása) túlélheti a folyamat-újraindításokat
- A jogosultság-emelés egy egyszerű SUID-bit beállítással teljessé teszi a kompromittálást
A NetScaler eszközök a vállalati hálózatok “bejárati ajtajaként” működnek, ezért egy ilyen, internetről elérhető, hitelesítés nélküli RCE komoly kockázatot jelent minden szervezet számára, amely SAML-alapú hitelesítést használ a NetScaler Gateway-en vagy AAA virtuális szervereken keresztül. A watchTowr Labs kutatása nem csupán a hiba létét bizonyítja, hanem részletesen megmutatja azt az elemzési folyamatot is, amellyel a védők jobban megérthetik, milyen mélységű technikai munka áll egy ilyen exploit mögött.