
Amikor az emoji XSS-t okoz
2025-09-21Sebezhetőség leírása
Egy bug bounty vizsgálat során olyan XSS sebezhetőséget fedeztünk fel, amely meglepő módon emojik segítségével volt kihasználható. A bemeneti paraméterek elsőre biztonságosnak tűntek: a legtöbb rosszindulatú karaktert eltávolította a rendszer, ezért a sérülékenység nem volt nyilvánvaló.
Egy, a közösségben megosztott technika adott inspirációt, amely unicode karakterekre épített. Újrateszteltük az adott domaint, és bár a módszer közvetlenül nem működött, néhány emoji kipróbálásakor váratlan eredményt kaptunk: a válaszban speciális idézőjelek és aposztrófok jelentek meg. Egy karakterlánc például így nézett ki: d"Y'"
Egy nyílt forráskódú emoji adatbázis segítségével kiderült, hogy bizonyos emojik olyan karaktereket eredményezhetnek, amelyek a feldolgozás során HTML nyitó és záró jelekké alakulnak. Így született meg a működő payload:
💋img src=x onerror=alert(document.domain)//💛
Miért működött?
Készítettünk egy egyszerű tesztoldalt, hogy jobban megértsük a háttérben zajló folyamatot. Kiderült, hogy a szerver a rosszindulatú karakterek eltávolítása után hibás kódolási átalakítást végzett. A bemenetet először Windows-1252 kódolásúnak tekintette, majd UTF-8-ra konvertálta, noha valójában már UTF-8 volt. Ez nem egy valódi < jelet adott, hanem egy furcsa unicode karaktert: ‹.
Ezután a rendszer újabb konverziót hajtott végre, UTF-8-ról ASCII-ra. A második átalakítás során a ‹ karakterből tényleges < lett, és pontosan ez nyitotta meg az utat az exploit előtt.
A reprodukcióhoz használt egyszerű PHP példa a tesztkörnyezetből:
<?php
$str = isset($_GET["str"]) ? htmlspecialchars($_GET["str"]) : "";
$str = iconv('Windows-1252', "UTF-8", $str);
$str = iconv('UTF-8', "ASCII//TRANSLIT", $str);
echo "String: " . $str;
Tanulságok
- A kódolási konverziók és normalizációk láncolata könnyen váratlan karakterátalakulásokhoz vezethet, amelyek megkerülik a bemeneti szűrést
- Egy emoji vagy más unicode karakter is képes olyan byte sorozatot létrehozni, amely a feldolgozás során HTML speciális jelekké válik
- A teljes feldolgozási láncban konzisztens input kódolására és a normalizáció következetes ellenőrzésére van szükség
- A kimeneti escapinget mindig a konkrét kontextushoz kell igazítani
Az eset rávilágít arra, hogy a biztonsági problémák nem mindig a klasszikus hibákból fakadnak, néha egyetlen emoji is elegendő lehet egy sikeres XSS támadáshoz.
Források
Abusing unicode characters to PWN Intigriti XSS challenge
