FixVibe
Covered by FixVibecritical

SQL Injection: Zabránění neoprávněnému přístupu k databázi

SQL injection (SQLi) je kritická chyba zabezpečení, při které útočníci zasahují do databázových dotazů aplikace. Vložením škodlivé syntaxe SQL mohou útočníci obejít ověřování, zobrazit citlivá data, jako jsou hesla a podrobnosti o kreditních kartách, nebo dokonce ohrozit základní server.

CWE-89

Dopad SQL Injection

SQL injection (SQLi) umožňuje útočníkovi zasahovat do dotazů, které aplikace zadává do své databáze [S1]. Primární dopad zahrnuje neoprávněný přístup k citlivým údajům, jako jsou uživatelská hesla, údaje o kreditních kartách a osobní údaje [S1].

Kromě krádeže dat mohou útočníci často upravovat nebo mazat databázové záznamy, což vede k trvalým změnám v chování aplikací nebo ztrátě dat [S1]. Ve vysoce závažných případech lze SQLi eskalovat, aby ohrozila back-endovou infrastrukturu, umožnila útoky typu denial-of-service nebo poskytla trvalá zadní vrátka do systémů organizace [S1][S2].

Hlavní příčina: Nebezpečná manipulace se vstupy

Hlavní příčinou SQL injection je nesprávná neutralizace speciálních prvků použitých v SQL příkazu [S2]. K tomu dochází, když aplikace konstruuje dotazy SQL zřetězením externě ovlivněného vstupu přímo do řetězce dotazu [S1][S2].

Protože vstup není správně izolován od struktury dotazu, může databázový interpret provádět části uživatelského vstupu jako kód SQL namísto toho, aby s nimi zacházel jako s doslovnými daty [S2]. Tato chyba zabezpečení se může projevit v různých částech dotazu, včetně příkazů SELECT, hodnot INSERT nebo příkazů UPDATE [S1].

Konkrétní opravy a zmírnění

Použijte parametrizované dotazy

Nejúčinnějším způsobem, jak zabránit vkládání SQL, je použití parametrizovaných dotazů, známých také jako připravené příkazy [S1]. Namísto zřetězení řetězců by vývojáři měli používat strukturované mechanismy, které vynucují oddělení dat a kódu [S2].

Princip nejmenšího privilegia

Aplikace by se měly k databázi připojit pomocí nejnižších oprávnění požadovaných pro jejich úkoly [S2]. Účet webové aplikace by neměl mít administrátorská oprávnění a měl by být omezen na konkrétní tabulky nebo operace nezbytné pro jeho funkci [S2].

Ověření a kódování vstupu

I když nenahrazuje parametrizaci, ověření vstupu poskytuje hloubkovou ochranu [S2]. Aplikace by měly používat strategii přijmout-známe-dobře, ověřující, že vstup odpovídá očekávaným typům, délkám a formátům [S2].

Jak to testuje FixVibe

FixVibe již pokrývá vkládání SQL prostřednictvím hradlového modulu skeneru active.sqli. Aktivní kontroly se spouští pouze po ověření vlastnictví domény a atestaci. Kontrola prochází koncové body GET stejného původu s parametry dotazu, vytváří základní odpověď, hledá booleovské anomálie specifické pro SQL a hlásí nález až po potvrzení načasování přes více délek zpoždění. Prohledávání úložiště také pomáhá dříve zachytit hlavní příčinu pomocí code.web-app-risk-checklist-backfill, která označuje nezpracovaná volání SQL vytvořená pomocí interpolace šablony.