Code Injection in mobiele apps — wat is het, soorten aanvallen en bescherming

Auteur: IT Sectr Gepubliceerd: 2026-04-04 Leestijd: 10 min

Code Injection (code-injectie) — een type aanval waarbij een aanvaller kwaadaardige code via de invoergegevens van de app verzendt om ongeautoriseerde handelingen uit te voeren. Volgens gegevens van OWASP, 2024, behoren injecties tot de drie meest kritieke kwetsbaarheden. Inzicht in de mechanismen van code-injectie stelt ontwikkelaars in staat om vanaf de eerste dag van de ontwikkeling beveiligde systemen te ontwerpen.

Belangrijkste punten

  • Code Injection — een aanval waarbij kwaadaardige code via gebruikersinvoer wordt verzonden en uitgevoerd in de context van de app of server.
  • SQL Injection — het injecteren van SQL-code in databasequery's, waarmee gegevens zonder autorisatie kunnen worden gelezen, gewijzigd of verwijderd.
  • Cross-Site Scripting — het injecteren van JavaScript-code in WebView, die wordt uitgevoerd in de browsercontext van andere gebruikers.
  • Command Injection — het uitvoeren van systeemopdrachten via onbeschermde shell-aanroepen vanuit de mobiele app.
  • Input Validation — de fundamentele beschermingsmethode: validatie, sanitizatie en parametrisatie van alle invoergegevens.

Wat is Code Injection?

Code Injection — een klasse van aanvallen waarbij een aanvaller uitvoerbare code in de app injecteert via onbetrouwbare invoergegevens. In mobiele apps is de aanval mogelijk via invoervelden, deep links, pushmeldingen, QR-codes en bestandsuitwisseling.

In tegenstelling tot aanvallen op OS-niveau, maakt Code Injection gebruik van logische fouten in de code van de app zelf: gebrek aan escaping, onveilige stringconcatenatie of vertrouwen op externe gegevensbronnen. Volgens het rapport van Positive Technologies (2025) vormen injecties 23% van alle kwetsbaarheden in mobiele apps in de financiële sector.

Het grootste gevaar van Code Injection — volledige compromittering van gegevens: een aanvaller kan toegang krijgen tot de database, het bestandssysteem van het apparaat of de accounts van andere gebruikers. Voor mobiele apps die met betalingsgegevens of medische informatie werken, kunnen de gevolgen kritiek zijn.

Een ontwikkelaar moet de soorten injecties begrijpen en beschermingsmechanismen op alle niveaus toepassen — van gegevensinvoer tot weergave en opslag. Moderne frameworks bieden ingebouwde beschermingsmiddelen, maar het gebruik ervan vereist een bewuste aanpak.

Belangrijkste soorten Code Injection in mobiele apps

De classificatie van Code Injection omvat drie hoofdtypen aanvallen in de context van mobiele ontwikkeling. Elk type maakt gebruik van verschillende componenten van de app en vereist specifieke beschermingsmethoden.

SQL Injection in mobiele apps

SQL Injection (SQLi) — het injecteren van kwaadaardige SQL-code via queryparameters naar een lokale of externe database. In mobiele apps ontstaat de kwetsbaarheid bij onveilig werken met SQLite op het apparaat of bij het opbouwen van HTTP-verzoeken naar REST API met stringconcatenatie.

Een typische aanvalsvector — een zoek- of filterveld waarvan de waarde direct in de SQL-query wordt ingevoegd. Als een ontwikkelaar ruwe concatenatie gebruikt in plaats van geparametriseerde queries, kan een aanvaller een string zoals 1' OR '1'='1 verzenden. Volgens OWASP Mobile Top 10 (2024) blijft SQL Injection de tweede meest voorkomende kritieke kwetsbaarheid in mobiele apps in de categorie onveilige gegevensopslag.

Bescherming tegen SQLi is gebaseerd op drie niveaus: het gebruik van geparametriseerde queries (PreparedStatement in Java, rawQuery met bindArgs in Android), validatie van invoergegevens aan client- en serverzijde en minimale databaseprivileges.

Cross-Site Scripting (XSS) in WebView

XSS-aanvallen in mobiele apps zijn gericht op de WebView-component — de ingebouwde browser die HTML-inhoud weergeeft. Als de app gegevens uit externe bronnen in WebView laadt zonder sanitizatie, kan een aanvaller JavaScript-code injecteren die wordt uitgevoerd in de context van de app.

Er worden twee subtypes van XSS onderscheiden: Stored XSS — het kwaadaardige script wordt op de server opgeslagen en uitgevoerd bij elke paginaweergave; Reflected XSS — de code wordt via URL of POST-parameters verzonden en eenmalig uitgevoerd. In mobiele apps is Stored XSS via opmerkingen, recensies of gebruikersinhoud die in WebView aan andere gebruikers wordt getoond bijzonder gevaarlijk.

Bescherming omvat het uitschakelen van JavaScript in WebView indien niet nodig, het gebruik van Content Security Policy (CSP) en sanitizatie van HTML-inhoud via bibliotheken zoals Jsoup voor Android of SwiftSoup voor iOS.

Command Injection via Intent en Shell

Command Injection — het uitvoeren van systeemopdrachten op het apparaat via onbeschermde aanroepen van Runtime.exec(), ProcessBuilder of NSTask. In mobiele apps is de aanval mogelijk als de app gebruikersgegevens doorgeeft aan shell-opdrachten of Intents met acties.

De meest kwetsbare plekken zijn bestandsconversiefuncties, het werken met media (ffmpeg, ImageMagick) en het installeren van externe bibliotheken. Een aanvaller kan een opdracht met een pijp- of omleidingsteken verzenden die willekeurige code op het apparaat uitvoert. Android beperkt shell-toegang gedeeltelijk via sandbox, maar apps met root-toegang of PrivEsc-exploits kunnen worden gecompromitteerd.

Aanbevolen bescherming — volledig afzien van Runtime.exec() voor het verwerken van gebruikersgegevens, het gebruik van bibliotheken met een veilige API en strikte isolatie van externe processen.

Hoe werkt code-injectie op Android en iOS

Het mechanisme van Code Injection verschilt op Android en iOS vanwege architectuurverschillen. Op Android zijn injecties vaak gerelateerd aan Intent — een systeembericht dat tussen app-componenten wordt verzonden. Een aanvaller kan een kwaadaardige Intent met extra gegevens met SQL-code of shell-opdrachten verzenden.

Op iOS vinden aanvallen vaker plaats via het Interprocess Communication (XPC)-mechanisme, Universal Links en de verwerking van URL Scheme. Een app die gegevens uit externe bronnen ontvangt zonder controle, wordt kwetsbaar voor injecties. Volgens Apple Security Research (2025) is ongeveer 12% van de kwetsbaarheden in iOS-apps gerelateerd aan onvoldoende sanitizatie van invoergegevens.

Een gemeenschappelijke vector voor beide platforms — aanvallen via lokale opslag (SQLite, Realm, UserDefaults). Als een kwaadaardige app gegevens naar een gedeelde map kan schrijven, kan deze code injecteren die wordt uitgevoerd door de doelapp bij het lezen.

Het proces van een typische aanval omvat drie fasen: verkenning — analyse van de invoerpunten van de app (formulieren, deep links, bestanden), injectie — het verzenden van de kwaadaardige lading via het gevonden invoerpunt en exploitatie — het uitvoeren van de injectie met toegang tot gegevens of functionaliteit. Inzicht in deze cyclus helpt de ontwikkelaar om op elke fase bescherming te ontwerpen.

Codevoorbeelden: kwetsbare en beveiligde implementaties

Laten we concrete voorbeelden van Code Injection in Kotlin voor Android en Swift voor iOS bekijken. Elk voorbeeld toont een kwetsbaar patroon en het veilige alternatief.

SQL Injection: kwetsbare code in Kotlin

Het eerste voorbeeld — directe concatenatie van de querystring met gebruikersinvoer. Bij de waarde userInput = "1' OR '1'='1" retourneert de query alle rijen van de tabel in plaats van één.

kotlin
// KWETSBAAR: stringconcatenatie
fun getUserById(userInput: String): List<User> {
    val db = openOrCreateDatabase()
    val query = "SELECT * FROM users WHERE id = " + userInput
    return db.rawQuery(query, null)
}

// VEILIG: geparametriseerde query
fun getUserByIdSafe(userInput: String): List<User> {
    val db = openOrCreateDatabase()
    val query = "SELECT * FROM users WHERE id = ?"
    return db.rawQuery(query, arrayOf(userInput))
}

XSS-bescherming in WebView: Swift voor iOS

Het tweede voorbeeld toont het onjuist en correct laden van gebruikers-HTML-inhoud in WKWebView. Het gebruik van SwiftSoup maakt het mogelijk om kwaadaardige scripts te verwijderen voordat ze worden weergegeven.

swift
// KWETSBAAR: direct HTML laden
let webView = WKWebView()
let html = "<div>\(userComment)</div>"
webView.loadHTMLString(html, baseURL: nil)

// VEILIG: sanitizatie via SwiftSoup
import SwiftSoup
let cleanHtml = try SwiftSoup.clean(
    userComment,
    Whitelist.basic()
)
webView.loadHTMLString(cleanHtml, baseURL: nil)

Command Injection: bescherming tegen shell-aanvallen in Kotlin

Het derde voorbeeld — het gevaar van het aanroepen van Runtime.exec() met gebruikersargumenten en het veilige alternatief via een bibliotheek met een vaste API.

kotlin
// KWETSBAAR: shell-commando met gebruikersinvoer
fun convertVideo(inputPath: String) {
    val cmd = "ffmpeg -i $inputPath -vcodec libx264 output.mp4"
    Runtime.getRuntime().exec(cmd)
}

// VEILIG: isolatie van argumenten
fun convertVideoSafe(inputPath: String) {
    val cmd = listOf(
        "ffmpeg", "-i", inputPath,
        "-vcodec", "libx264", "output.mp4"
    )
    ProcessBuilder(cmd).start()
}

Methoden om mobiele apps te beschermen tegen injecties

Bescherming tegen Code Injection vereist een systematische aanpak die code, infrastructuur en ontwikkelprocessen omvat. Geen enkele individuele methode garandeert volledige beveiliging — een combinatie van praktijken is noodzakelijk.

Eerste niveau — preventie: strikte validatie van alle invoergegevens. Elk veld dat de app ontvangt van de gebruiker, een andere app of het netwerk moet worden gecontroleerd op type, lengte en formaat. Bibliotheken zoals OWASP ESAPI bieden kant-en-klare validators voor gangbare scenario's.

Tweede niveau — sanitizatie en escaping: het transformeren van gegevens voordat ze worden gebruikt in SQL-queries, HTML-sjablonen of shell-opdrachten. Geparametriseerde queries elimineren SQL Injection volledig en HTML-escaping voorkomt XSS. Gebruik op Android voor het werken met SQLite Room — een ORM die automatisch bind-parameters toepast.

Derde niveau — minimalisatie van privileges: de app moet werken met de minimaal noodzakelijke rechten. Pas het principe van最小 privilege toe voor de database, het bestandssysteem en interprocescommunicatie. iOS implementeert dit principe via de app-sandbox en Android via het machtigingenmodel en procesisolatie.

Vierde niveau — monitoring en respons: het loggen van verdachte operaties, detectie van afwijkingen en automatische blokkering bij herhaalde aanvallen. Tools zoals Firebase App Check helpen bij het detecteren van valse verzoeken aan de backend van gecompromitteerde clients. Integratie van RASP (Runtime Application Self-Protection) maakt het mogelijk om injecties tijdens runtime te blokkeren.

Volgens onderzoek van Google Project Zero (2025) vermindert de combinatie van deze vier niveaus het risico op een succesvolle aanval via Code Injection met 94%. Ontwikkelaars wordt aangeraden om beschermingsmechanismen in de ontwerpfase van de architectuur te implementeren, niet na het ontdekken van een kwetsbaarheid.

Veelgestelde vragen

Wat is Code Injection in eenvoudige woorden?

Code Injection — is wanneer een aanvaller de app geen gegevens maar code stuurt. In plaats van een gebruikersnaam stuurt hij bijvoorbeeld een SQL-query die de app in zijn database uitvoert, waardoor hij toegang krijgt tot andermans gegevens.

Wat is het verschil tussen SQL Injection en XSS?

SQL Injection valt de database aan via SQL-queries, waardoor records kunnen worden gelezen en gewijzigd. XSS injecteert JavaScript-code in WebView voor uitvoering in de browser van de gebruiker. Verschillende doelen, maar een gemeenschappelijk mechanisme — onvoldoende validatie van invoergegevens.

Hoe bescherm ik een Android-app tegen Code Injection?

Gebruik Room met geparametriseerde queries voor SQLite, schakel JavaScript in WebView uit, pas ProGuard/R8 toe voor code-obfuscatie en geef nooit gebruikersgegevens door aan Runtime.exec(). Werk afhankelijkheden regelmatig bij met beveiligingspatches.

Kan een iOS-app kwetsbaar zijn voor injecties?

Ja, iOS-apps zijn kwetsbaar voor SQL Injection via Core Data (ruwe queries), XSS via WKWebView en Command Injection via Process. De iOS-sandbox beperkt de omvang van de aanval, maar voorkomt deze niet volledig. Sanitiseer altijd gegevens voor gebruik.

Hoe detecteer ik Code Injection-kwetsbaarheden in een app?

Gebruik SAST (Static Analysis) — tools zoals SonarQube, MobSF of QARK voor het scannen van broncode. Pas daarnaast DAST-scanners toe voor het testen van de actieve app: voer speciaal geformatteerde strings in (', OR 1=1, <script>) in alle invoervelden.

Samenvatting

  • Code Injection — een klasse van kritieke kwetsbaarheden waarbij kwaadaardige code wordt geïnjecteerd via onbetrouwbare invoergegevens van de app.
  • SQL Injection — het meest voorkomende type injectie, voorkomen door geparametriseerde queries en ORM-bibliotheken.
  • XSS in WebView — injectie van JavaScript-code in HTML-inhoud, geblokkeerd door sanitizatie via SwiftSoup of Jsoup.
  • Command Injection — uitvoeren van shell-opdrachten via onbeschermde aanroepen, beschermd door argumentisolatie en afzien van Runtime.exec().
  • Vier beschermingsniveaus — validatie, sanitizatie, privilege-minimalisatie en monitoring — verminderen het aanvalsrisico met 94%.
  • Android en iOS hebben gemeenschappelijke injectievectoren, maar verschillende beschermingsmechanismen: iOS-sandbox vs Android-machtigingenmodel.
  • Regelmatig testen met SAST- en DAST-tools is verplicht voor het behoud van de app-beveiliging.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook