32.4.3 Várakozási sor (queue) manipulációs támadások

2025.10.06.
AI Biztonság Blog

A felhasználói felület gyorsasága és reszponzivitása mögött az aszinkron rendszerekben gyakran egy rejtett, de kritikus komponens húzódik meg: a várakozási sor. Ez a digitális „előszoba” felel a feladatok (pl. képanalízis, adatfeldolgozás, modell-inferencia) rendezett ütemezéséért. Egy red teamer számára ez a sor nem csupán egy technikai részlet, hanem egy potenciális támadási felület, ahol a rendszer logikáját és erőforrásait a háttérben, észrevétlenül lehet manipulálni.

Kapcsolati űrlap

AI Biztonság kérdésed van? Itt elérsz minket:

A várakozási sor mint támadási felület

Amikor egy feladat bekerül egy sorba, általában több attribútummal rendelkezik: egyedi azonosító, a végrehajtandó művelet, a hozzá tartozó adatok és esetleg egy prioritási szint. A támadások célja ezen attribútumok vagy a feladatok sorrendjének illegitim megváltoztatása a sorba kerülés után, de a feldolgozás előtt. A sikeres manipulációval elérhető célok:

  • Erőforrás-kimerítés (Denial of Service): A rendszert alacsony prioritású, de erőforrás-igényes feladatokkal árasztjuk el, megakadályozva a legitim, magas prioritású kérések feldolgozását.
  • Jogosultság-kiterjesztés: Egy alacsony jogosultságú felhasználó feladatának prioritását magasra emelve olyan erőforrásokhoz vagy gyorsabb végrehajtáshoz juthat, amihez nem lenne joga.
  • Logikai hibák kihasználása: A feladatok végrehajtási sorrendjének felcserélésével a rendszer üzleti logikájában rejlő sebezhetőségeket aknázhatunk ki.
  • Adatmanipuláció: A sorban várakozó feladat adatainak módosításával kikerülhetők a bemeneti validációs lépések, mivel azok jellemzően a sorba helyezés előtt történnek meg.

Főbb támadási technikák

A várakozási sorok elleni támadások több formát ölthetnek, attól függően, hogy a rendszer architektúrája milyen gyengeségeket rejt.

Prioritás-manipuláció és eszkaláció

Sok rendszer lehetővé teszi, hogy a felhasználók (vagy a rendszer különböző komponensei) prioritást rendeljenek a beküldött feladatokhoz. Ha a szerver vakon megbízik a kliens által küldött prioritási értékben, egy támadó könnyedén eszkalálhatja saját feladatainak sürgősségét.

{
 "taskId": "user-generated-uuid-123",
 "taskType": "image_analysis",
 "dataUrl": "https://example.com/image.jpg",
 // A támadó egy magasabb értéket (pl. 'CRITICAL') ad meg,
 // mint amit a jogosultsága (pl. 'NORMAL') engedne.
 "priority": "CRITICAL", 
 "userId": "user-free-tier"
}

Ezzel a triviális módosítással a támadó feladatai megelőzhetik a fizetős vagy adminisztrátori felhasználók kéréseit, ami egy célzott DoS támadáshoz vezethet a prémium szolgáltatások ellen.

Feladat-mérgezés (Task Poisoning)

Ez a technika a TOCTOU sebezhetőségek egy speciális esete. A támadó először egy ártalmatlan, validáción átmenő feladatot küld be a sornak. Azonban a feladat adatai nem magában a feladat-üzenetben, hanem egy külső referencián (pl. egy S3 bucket URL-jén) keresztül vannak megadva. A támadó, kihasználva a sorba kerülés és a feldolgozás közötti időablakot, kicseréli a referencia mögötti tartalmat egy kártékonyra.

1. Beküldés Ártalmatlan Adat 2. Sorban várakozás 3. Adatcsere Támadó 4. Feldolgozás Mérgezett Adat Eredmény

Sor-elárasztás (Queue Flooding)

Ez egy alkalmazás-szintű DoS támadás. A cél nem a hálózat, hanem a feldolgozó kapacitás leterhelése. A támadó nagy mennyiségű, triviálisan sorba helyezhető, de a feldolgozó (worker) számára idő- vagy számításigényes feladatot küld. Például egy MI-alapú videófeldolgozó szolgáltatás esetén ez lehet több ezer kérés egy-egy hosszú, nagy felbontású videó transzkódolására.

import requests
import time

# A támadó egy API végpontot céloz, ami feladatokat vesz fel
API_ENDPOINT = "https://api.service.com/v1/process_video"
HEADERS = {"Authorization": "Bearer cheap_user_token"}

for i in range(10000):
 # Minden kérés egy új, erőforrás-igényes feladatot indít
 payload = {"source_url": f"https://storage.com/long_video_{i}.mp4"}
 try:
 requests.post(API_ENDPOINT, json=payload, headers=HEADERS, timeout=0.5)
 print(f"Feladat {i} sorba helyezve.")
 except requests.exceptions.ReadTimeout:
 # Nem is érdekel a válasz, csak hogy a feladat bekerüljön
 pass
 time.sleep(0.05) # Lassú küldés a hálózati szintű védelem elkerülésére

Szekvencia-manipuláció

Bizonyos rendszerekben a feladatok végrehajtási sorrendje kritikus. Gondolj egy kereskedési platformra, ahol az „eladás” és „vétel” parancsok sorrendje pénzt jelent. Ha a támadó képes befolyásolni, hogy a feldolgozó melyik feladatot vegye ki előbb a sorból (pl. egy nem kellően egyedi feladat-azonosító manipulálásával vagy a rendszer belső logikájának ismeretével), akkor az üzleti logikát sértheti.

Szándékolt sorrend Manipulált sorrend Eredmény
1. Feladat: ‘SELL’ 100db @ 50$ 1. Feladat: ‘BUY’ 100db @ 49$ A támadó alacsonyabb áron vásárol, mielőtt a saját eladási megbízása felhajtaná az árat.
2. Feladat: ‘BUY’ 100db @ 49$ 2. Feladat: ‘SELL’ 100db @ 50$

Azonosítás és Kihasználás Red Teaming Szemszögből

Ezeknek a sebezhetőségeknek a felderítése türelmet és a rendszer mélyebb megértését igényli. A folyamat lépései:

  1. Felület feltérképezése: Azonosítsd azokat az API végpontokat, amelyek aszinkron feladatokat indítanak. Keress olyan paramétereket a kérésekben, mint `priority`, `jobId`, `callbackUrl`, vagy külső adatforrásokra mutató hivatkozások.
  2. Időzítés elemzése: Mérd a feladat beküldése és a tényleges végrehajtás (pl. egy email megérkezése, egy fájl létrejötte) között eltelt időt. A hosszabb késleltetés nagyobb támadási ablakot jelent.
  3. Paraméter-fuzzing: Manipuláld a feltételezett prioritás- vagy sorrend-befolyásoló paramétereket. Küldj be két feladatot gyors egymásutánban, de eltérő prioritással, és figyeld a végrehajtás sorrendjét.
  4. Versenyhelyzetek provokálása: A feladat-mérgezés teszteléséhez automatizált szkriptekkel próbáld meg a referencia-adatot a beküldés utáni pillanatokban felülírni.
  5. Erőforrás-monitorozás: A sor-elárasztás hatékonyságának méréséhez figyeld a szolgáltatás válaszidejének növekedését vagy a hibák megjelenését egy kontrollált terheléses teszt során.

A sikeres kihasználáshoz gyakran több sebezhetőséget kell láncba fűzni. Egy gyengén implementált azonosító (pl. egy egyszerűen növekvő sorszám) felfedése például utat nyithat a szekvencia-manipuláció előtt.