Fedezze fel a legfrissebb kiberbiztonsági híreket

Blog / A Burp Suite beállítása Vaadin-alapú alkalmazások teszteléséhez
A Vaadin-alapú alkalmazások Burp Suite-tal végzett biztonsági teszteléséről szóló cikk borítóképe.

A Burp Suite beállítása Vaadin-alapú alkalmazások teszteléséhez

Norbert Bajko
2025. február 7.
vaadinburp suitepentest

Bevezetés

A modern webalkalmazások gyakran keretrendszerekre épülnek, ami időnként váratlan viselkedést eredményez a biztonsági tesztelés során. Ennek egyik leggyakoribb oka, hogy a keretrendszer valamilyen szinkronizációs vagy viewstate-szerű működést valósít meg. A felhasználói felület minden változása — például szöveg beírása egy mezőbe — kérést generál, amelyben a böngésző elküldi a változás adatait. Egyes alkalmazások működéséhez ezek nem létfontosságúak: akkor is megfelelően működhetnek, ha elveszik egy kérés, vagy a kérésekben nem szerepelnek növekvő azonosítók.

A Vaadin keretrendszerben viszont ezek a szinkronizációs értékek kulcsfontosságúak. Ha nem megfelelőek, a felület újratöltődik, és elveszíti az állapotát. Ha a szerver nem a várt azonosítókat kapja, megszünteti az aktuális UIDL-munkamenetet, és a felület újratöltését kéri, a szinkronizációs azonosítók alaphelyzetbe állításával együtt. Ez megnehezíti a biztonsági tesztelést, mert minden kérésnél frissíteni kell az azonosítókat. Ha a tesztelő ezt figyelmen kívül hagyva indít vizsgálatot, az hatástalan lesz: a kérések már megszüntetett munkamenettel mennek ki.

Műszaki részletek

A kommunikáció megfigyeléséből kiderült, hogy az alkalmazás Vaadint használ. A forgalom több ponton eltért a webalkalmazások „szokásos” kommunikációjától. További részletek: https://mvysny.github.io/Vaadin8-communication-explained/

  • UIDL használata: folyamatos kommunikáció a kliens és a szerver között, amely nyomon követi a felület minden változását. Akár a keresőmezőbe írunk, akár egy gombra kattintunk, a kliens kérést küld a változásokat követő szervernek.
  • clientId és syncId használata: növekvő egész számok, amelyek az üzenetek sorrendjéért felelnek.

Ez azt jelenti, hogy például a Burp Repeaterrel nem küldhetünk el egyszerűen újra egy kérést. Az alkalmazás elveszítené az üzenetsorrendet, és újra kellene töltenünk a böngészőben.

Hogyan ismerhető fel ez a viselkedés? Egy keresőfunkciónál az x-pentest felhasználó keresésekor a helyes válasz Content-Length értéke körülbelül 1800. Ha nem a megfelelő syncId és clientId értékeket küldjük, nagyobb, általános választ kapunk. Az alábbi kérésben ezek a paraméterek nem megfelelően frissültek.

POST /appname/UIDL/?v-uiId=4 HTTP/1.1
Host: redactedhost.com
***TRUNCATED***
Connection: close

{"csrfToken":"c2516794-1ec7-4f33-95c4-208494e9cfdc","rpc":[["817","v","v",["positionx",["i",1473]]],["817","v","v",["positiony",["i",47]]],["820","v","v",["c",["i",9]]],["820","v","v",["curText",["s","x-pentest"]]]],"syncId":3,"clientId":3}

Válasz:

HTTP/1.1 200 OK
Connection: close
Content-Type: application/json;charset=utf-8
Cache-Control: no-cache
Content-Length: 18956

for(;;);[{"syncId": 6, "resynchronize": true, "clientId": 4, "changes" : [["change",{"pid":"744"},["0",{"id":"744","location":"https:\/\/redactedhost.com\/appname\/#\/index\/index"}]],["change",{"pid":"817"},["35",{"id":"817","v":{"action":""}},["actions",{},["action",{"key":"1","kc":27,"mk":[]}]]]],["change",{"pid":"820"},["36",{"id":"820","iem":"LAZY","iet":400,"nvc":true}]],["change",{"pid":"773"},["1",{"id":"773","ormoh":false,"usehtml":true},["options",{}],["items",{},["item",{"id":2,"text":"Admin PenTest (pentest)","command":true,"icon":"https:\/\/redactedhost.com\/profilepic?id=4"}]],["itemIds",{},["item",{"id":"2","componentId":""}]]]],["change",{"pid":"760"},["1",{"id":"760","ormoh":true,"usehtml":true},["options",{}],["items",{},["item",{"id":2,"text":"Admin PenTest","command":true,"icon":"https:\/\/redactedhost.com\/profilepic?id=4"},["item",{"id":3,"text":"My profile","command":true,"icon":"fonticon:\/\/FontAwesome\/f182"}],["item",{"id":4,"separator":true}],["item",{"id":5,"text":"Substituted persons","disabled":true}],["item",{"id":6,"style":"substitution","text":"Admin ","command":true,"icon":***TRUNCATED****

A következő kérésben már az előző válaszból kapott helyes azonosítók szerepeltek.

Kérés:

POST /appname/UIDL/?v-uiId=4 HTTP/1.1
Host: redactedhost.com
***TRUNCATED***
Connection: close

{"csrfToken":"c2516794-1ec7-4f33-95c4-208494e9cfdc","rpc":[["817","v","v",["positionx",["i",1473]]],["817","v","v",["positiony",["i",47]]],["820","v","v",["c",["i",9]]],["820","v","v",["curText",["s","pentest"]]]],"syncId":6,"clientId":4}

Válasz:

HTTP/1.1 200 OK
Connection: close
Content-Type: application/json;charset=utf-8
Cache-Control: no-cache
Content-Length: 1889

for(;;);[{"syncId": 8, "clientId": 5, "changes" : [], "state":{"821":{"childData":{"835":{"alignmentBitmask":5,"expandRatio":0}}},"835":{"styles":["i2-quicksearch-result-block"]},"836":{"childData":{"837":{"alignmentBitmask":5,"expandRatio":0},"838":{"alignmentBitmask":5,"expandRatio":1}},"width":"280.0px","styles":["i2-cursor-pointer"],"registeredEventListeners":["lClick"]},"837":{"description":"Assistant PenTest","styles":["i2-profile-picture-compact","i2-margin-vertical-small"],"resources":{"source":{"uRL":"https://redactedhost.com/profilepic?id=4"}}},"838":{"childData":{"839":{"alignmentBitmask":5,"expandRatio":0},"840":

A helyes syncId és clientId használatával az alkalmazás a megfelelő adatokat adta vissza. Az értékek automatikusan frissíthetők a TokenJar Burp-bővítménnyel, amely kiolvassa őket a válaszból: https://portswigger.net/bappstore/d9e05bf81c8f4bae8a5b0b01955c5578

A syncId és clientId értékek kinyerése a TokenJar bővítménnyel

A következő reguláris kifejezéseket használhatjuk:

  • "syncId"\s*:\s*(\d+)
  • "clientId"\s*:\s*(\d+)

Bár a Scannerhez nincs külön jelölőnégyzet, ezekkel a beállításokkal a Burp a vizsgálat során is automatikusan frissíti az értékeket:

A TokenJar beállításai a Burp Suite automatizált vizsgálatához

Így a Burp szkennelési funkciója Vaadin-alkalmazásoknál is használható.

Összegzés

A penetrációs tesztelőknek és hibavadászoknak figyelniük kell az ilyen viselkedésekre, nehogy fontos hibákat és problémákat hagyjanak észrevétlenül.

Néhány javaslat:

  • Kövessük az elindított vizsgálatot, és ellenőrizzük, nem szakad-e meg a munkamenet.
  • Nézzük meg, van-e a feladathoz használható Burp-bővítmény.
  • A Hackvertor sok esetben hasznos eszköz.
  • Különleges helyzetben a Burp Extender API-val saját bővítményt is írhatunk.

Fedezze fel a legfrissebb kiberbiztonsági híreket

Maradjon egy lépéssel a kiberveszélyek előtt a Naunet szakértői blogbejegyzéseivel! Ismerje meg a legújabb védelmi trendeket, technikákat és technológiákat, hogy növelhesse vállalkozása biztonságát. Csatlakozzon közösségünkhöz, és fejlődjön minden bejegyzéssel!