Pri použití `whenloaded ()` v GraphQL, čo je zvyčajne metóda podmienečne načítania súvisiacich údajov alebo asociácií (napr. V ORM založených na GraphQL Resolvers) môže vzniknúť niekoľko bežných bezpečnostných úskalí. Tieto úskalia sa väčšinou týkajú širších problémov s bezpečnosťou GraphQL, ale sú obzvlášť relevantné, pretože „pri načítaní ()“ často zahŕňa načítanie ďalších vnorených alebo súvisiacich údajov, čo zvyšuje zložitosť a riziko.
Common Security Pithfalls s `whenloaded ()` v GraphQl
** 1. Nekonzistentné alebo chýbajúce kontroly autorizácie
`Pri načítaní ()„ často spúšťa načítanie vnorených alebo súvisiacich údajov po spustení počiatočného riešenia. Ak sa logika autorizácie neustále neuplatňuje na každom rozlíškovom alebo načítavanom bode načítania údajov (vrátane tých, ktoré vyvolali „pri načítaní ()`), neoprávnení používatelia môžu získať prístup k citlivým údajom. Toto je bežný problém, v ktorom sú chránené niektoré cesty k rovnakým údajom, ale iné (podobne ako tie, ktoré sú pri načítaní () `), umožňujú útočníkom obísť ovládacie prvky prístupu [4] [6]. Autorizácia sa musí presadzovať tak na úrovni dotazov, ako aj na všetkých vnorených rozlíšiteľoch alebo nakladačoch údajov.
** 2. Pritiahnutie a zložité otázky vedúce k odmietnutiu služby (DOS)
Použitie `pri načítaní ()` môže spôsobiť hlboko vnorené dotazy, ktoré načíta veľké množstvo súvisiacich údajov. Útočníci to môžu využiť tým, že vypracujú otázky, ktoré spôsobujú nadmerné načítavanie a spracovanie údajov, čo vedie k vyčerpaniu zdrojov a DOS. Schopnosť spoločnosti GraphQL načítať viacero súvisiacich objektov v jednom dotaze robí náročné predpovedať využitie zdrojov a „pri načítaní ()` to môže zhoršiť tým, že to podmienečne načítava ďalšie údaje [4] [5]. Zmiernenie zahŕňajú obmedzenie hĺbky dopytu, hodnotenie zložitosti a obmedzenie rýchlosti.
** 3. Vystavenie citlivých údajov prostredníctvom nesprávneho výberu poľa
Ak `pri načítaní ()` načíta súvisiace údaje bez starostlivej kontroly nad tým, ktoré polia sú vystavené, citlivé informácie, ako sú heslá, tokeny alebo súkromné podrobnosti používateľa, sa môžu neúmyselne vrátiť v odpovedi GraphQL [5]. Toto riziko sa zvýši, ak chýbajú kontroly autorizácie alebo ak chybové správy unikajú Informácie o citlivosti na citlivé na úniky. Vývojári musia zabezpečiť, aby boli citlivé polia nikdy vystavené, aj keď sa načítajú vnorené údaje.
** 4. Injekčné útoky prostredníctvom nesprávneho overenia vstupu
Keď sa „pri načítaní ()` používa s dynamickými argumentmi alebo filtrami, nesprávne validácia vstupu môže viesť k zraniteľnostiam v injekcii, ako je napríklad vstrekovanie dotazov GraphQL alebo dokonca vstrekovanie SQL, ak načítanie základných údajov nie je správne parametrizované [6]. Útočníci môžu vložiť škodlivé dotazy alebo príkazy, ktoré manipulujú s logikou načítania údajov. Je nevyhnutné správne overovanie vstupu a použitie parametrizovaných dopytov.
** 5. Obchádzanie obmedzenia rýchlosti a ochrana hrubej sily
Pretože `pri načítaní ()` môže spôsobiť viaceré vnorené údaje v rámci jedného dotazu, útočníci to môžu využiť, aby obišli tradičné obmedzenie rýchlosti. Môžu napríklad vyslať jediný komplexný dotaz, ktorý spúšťa mnoho načítaní údajov alebo mutácií, čím účinne vykonáva brutálnu silu alebo útoky na vyčlenenie bez spustenia limitov na požiadavky [4] [7]. Stratégie obmedzujúce sadzby musia zvážiť zložitosť dotazov a vnorené operácie.
** 6. Zvýšený povrch útoku v dôsledku introspekcie a náradia schémy
Použitie „pri načítaní ()“ často odráža komplexnú schému s viacerými vnorenými vzťahmi. Útočníci môžu použiť introspekciu GraphQL a nástroje, ako je GrapIQL na objavenie týchto vzťahov a remeselníckych dopytov, ktoré využívajú „pri načítaní ()“ na prístup k nezamýšľaným údajom [1] [8]. Zakázanie introspekcie vo výrobe alebo jeho obmedzení na autorizovaných používateľov môže toto riziko znížiť.
Zhrnutie
Hlavné bezpečnostné úskalia pri používaní `whenloaded ()` v grafeQL sa otáčajú okolo:
- Nepodarilo sa presadzovať konzistentné povolenie na všetkých vnorených cestách načítania údajov.
- umožnenie príliš zložitých alebo hlbokých otázok, ktoré spôsobujú DOS.
- Vystavenie citlivých údajov prostredníctvom vnorených polí.
- Nedostatočná validácia vstupov vedúca k injekčným útokom.
- Obtokové limity rýchlosti v dôsledku komplexných vnorených dotazov.
- Zvýšená expozícia v dôsledku introspekcie a náradia schémy.
Zmiernenie zahŕňajú prísne kontroly autorizácie pri každom riešení, zložitosť dotazov a obmedzenie hĺbky, prísna validácia vstupov, starostlivo návrh schémy, deaktivácia introspekcie vo výrobe a komplexné obmedzenie rýchlosti prispôsobené štruktúre dotazov GraphQL [3] [4] [6] [8].
Citácie:
[1] https://portswigger.net/web-security/graphql
[2] https://www.imperva.com/blog/graphql-vulnurabilities-common-attacks/
[3] https://tyk.io/blog/graphql-security-7-common-vulnerabilities-mow-to-mitigate-the------ risks/
[4] https://www.brightsec.com/blog/graphql-security/
[5] https://blog.convisoappsec.com/en/security-in-graphql/
Https://wundergraph.com/blog/the_complete_graphql_security_Guide_fixing_the_13_most_common_graphql_Vulnarabilities_to_Make_your_API_PRODUCY_RODUCE_READE
[7] https://beaglesecurity.com/blog/article/Graphql-attacks-vulnerabilities.html
[8] https://www.fastly.com/blog/explortoring-the-security-implications-of-graphql