Øvelse 33 – Exception som angrebsvektor
Fremtvunget exception
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'near "test": syntax error'.
at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db)
at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements(Stopwatch timer)+MoveNext()
at Microsoft.Data.Sqlite.SqliteCommand.GetStatements(Stopwatch timer)+MoveNext()
at Microsoft.Data.Sqlite.SqliteDataReader.NextResult()
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior)
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReader(CommandBehavior behavior)
at WebGoatCore.Data.OrderRepository.CreateOrder(Order order) in /sources/sources/WebGoat.NET/Data/OrderRepository.cs:line 52
at WebGoatCore.Controllers.CheckoutController.Checkout(CheckoutViewModel model) in /sources/sources/WebGoat.NET/Controllers/CheckoutController.cs:line 151
at lambda_method830(Closure, Object, Object[])
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|7_0(Endpoint endpoint, Task requestTask, ILogger logger)
at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)
Reflekterende spørgsmål
-
Hvorfor er det farligt at vise en stack trace til slutbrugeren?
- Fordi det kan indeholde sensitive oplysninger, både om koden, teknologier og potentielt brugere.
-
Hvordan kan manglende håndtering af exceptions føre til større angreb som SQL Injection?
- Ved at stacktracen kan fortælle en aktør hvilken database man bruger og hvordan metoderne fungerer, dette kan hjælpe til at bekræfte eller gøre SQL injection angreb nemmere at udføre.
-
Hvordan kan brugen af parameterized queries og ORM forhindre SQL Injection?
- Fordi data så indsættes som rene data og ikke sql. Dermed vil f.eks. en udkommentering af resten af sql koden ikke virke.
-
Hvordan hænger inputvalidering og håndhævelse af invarians sammen med sikker kodning?
- I dette tilfælde kunne inputvalidering sikre at specifikke tegn ikke ville kunne være gyldige som "name to ship" og invarians kunne sikre at det ikke ved en fejl kunne blive ændret efter valideringen.
-
Hvilke andre angrebsvektorer kan opstå ved uhensigtsmæssig fejl- og undtagelseshåndtering?
- Et eksempel kunne være data som uhensigtsmæssigt gemmes i logs lokalt på serveren. Det kan også være at fejlen giver et hint om hvilken teknologi og version man kører som en aktør så kan forsøge at udnytte ved at søge efter kendte sårbarheder.
Kobling til relevante standarder og principper
| Element i øvelsen | Relateret standard / princip | Kommentar |
|---|---|---|
| Håndtering af exceptions | ISO/IEC 27002:2022, afsnit 8.28 (Secure coding) | Anbefaler anvendelse af sikre kodningsprincipper, herunder korrekt håndtering af input, output og potentielle fejl, som en del af en sikker udviklingspraksis. |
| OWASP ASVS 5.0.0, kontrol 16.5 (Error Handling) | Krav om korrekt håndtering af undtagelser for at undgå informationslækager og uventet adfærd. Fail secure nævnes direkte her. | |
| Secure by Design (Johnsson et al.) | Understreger vigtigheden af at undgå at exception flows kompromitterer systemets integritet. |