CSP-ontwijkingsbestendige bescherming verwijst naar beveiligingscontroles die kwaadaardige JavaScript detecteren en blokkeren, zelfs wanneer die code obfuscatie, dynamisch laden of injectie via vertrouwde hosts gebruikt om de Content Security Policy te omzeilen. CSP handhaaft een toestemmingslijst van goedgekeurde scriptbronnen, maar kan niet inspecteren wat die goedgekeurde bronnen uitvoeren. Ontwijkingsbestendige controles observeren het runtime-gedrag van elk script in de browsersessie en detecteren bedreigingen die door brontoestemmingslijsten komen zonder één beleidsinbreuk te veroorzaken.
De Polyfill[.]io supply chain-aanval in juni 2024 toonde deze kloof. Meer dan 490.000 websites hadden cdn.polyfill[.]io op hun CSP-toestemmingslijst. Toen het domein van eigenaar wisselde en de nieuwe beheerder de legitieme bibliotheek verving door geobfusceerde malware, laadde elk getroffen site de kwaadaardige payload en voerde deze uit terwijl CSP geen inbreuk rapporteerde. (Sansec-onderzoek, juni 2024)
Drie routes die geobfusceerde code gebruikt om CSP te omzeilen
CSP controleert bronnen, niet payloads. Drie aanvalspatronen maken gebruik van dit gat:
Compromittering van een vertrouwde CDN of externe host. Het script wordt geladen van een domein dat al op de toestemmingslijst staat. Een gewijzigde payload activeert CSP niet omdat de bron-URL ongewijzigd is. Polyfill[.]io, Magecart-aanvallen via web skimming en recente compromitteringen van analytics-CDN's volgen deze route.
Injectie in eigen bestanden. Een aanvaller met servertoegang injecteert geobfusceerde code in een bestaand eigen JavaScript-bestand. Dat bestand wordt geladen vanaf het domein van de site, dat altijd is toegestaan.
Dynamische code-opbouw tijdens uitvoering. Een goedgekeurd script laadt en stelt een kwaadaardige functie samen uit stringfragmenten tijdens uitvoering, met behulp van eval(), Function() of indirecte equivalenten. De gevaarlijke payload bestaat nooit in een geladen resource; het wordt gebouwd in de browser na een schone paginaopbouw.
Geen van deze routes schendt een brontoestemmingslijst. CSP rapporteert schoon terwijl geobfusceerde malware wordt uitgevoerd.
Hoe geobfusceerde scripts ook geautomatiseerde scanners omzeilen
Obfuscatie verwijdert de leesbare signalen waar zowel menselijke revisoren als geautomatiseerde scanners naar zoeken:
| Techniek | Wat het doet | Waarom scanners het missen |
|---|---|---|
| String-splitsing en -samenvoeging | Verdeelt URL's en sleutelwoorden in fragmenten die tijdens uitvoering worden samengevoegd | Geen volledige string verschijnt in de statische bron |
| Base64-codering met dynamische decodering | Slaat de payload op als een blob die alleen bij uitvoering wordt gedecodeerd | Lijkt op data, niet op uitvoerbare code, voor een statische analyser |
| Hexadecimale of Unicode-escape-reeksen | Codeert tekens als \x61 of A | Statische tools moeten de code uitvoeren om de echte waarde te herleiden |
| Willekeurige variabelenamen | Vervangt leesbare identifiers door willekeurige korte namen | Verwijdert het sleutelwoordsignaal waarop patroondetectoren vertrouwen |
| Dynamisch laden op laat tijdstip | Haalt de echte payload van een C2-server nadat een goedgekeurd script wordt uitgevoerd | De geladen resource verschilt bij elke scan |
Subresource Integrity (SRI)-hashes beschermen tegen stille payload-vervangingen van bekende bronnen, maar alleen wanneer een hash voor elk bestand kan worden vastgelegd. Scripts van derden die frequent worden bijgewerkt maken SRI in productie onpraktisch, wat de kern vormt van de uitdaging rond scriptintegriteitsbeheer voor dynamische scripts. SRI kan ook niet beschermen tegen payloads die dynamisch worden opgehaald van een C2-endpoint, omdat die payload niet aanwezig was toen een hash werd berekend.
Benaderingen voor bescherming tegen geobfusceerde JavaScript
| Benadering | Broncontrole | Payload-inspectie | Handelt vertrouwde host-compromittering af | Detecteert runtime dynamische injectie |
|---|---|---|---|---|
| CSP | Ja | Nee | Nee | Nee |
| Subresource Integrity (SRI) | Gedeeltelijk | Alleen hash | Gedeeltelijk | Nee |
| WAF of netwerklaagfiltering | Gedeeltelijk | Nee | Nee | Nee |
| Statische JavaScript-analyse | Nee | Gedeeltelijk | Gedeeltelijk | Nee |
| Gedragsmonitoring op browserlaag | Optioneel per beleid | Ja | Ja | Ja |
Gedragsmonitoring op browserlaag is de enige controle in deze tabel die alle drie de omzeilingsroutes overleeft. Het werkt naast CSP en dekt de zichtbaarheidslacune voor payloads die CSP openlaat.
Wat te eisen van een CSP-ontwijkingsbestendig hulpmiddel
Vier vragen voordat een leverancier op de shortlist wordt gezet:
Runtime payload-observatie. Analyseert het hulpmiddel wat scripts uitvoeren in de browser, niet alleen de URL's waarvan ze worden geladen? Vraag de leverancier om detectie te demonstreren van een script dat wordt geladen van een vertrouwd domein en een ongeautoriseerd exfiltratie-endpoint aanroept. Als de demo een kwaadaardige bron-URL nodig heeft om te activeren, is het hulpmiddel bronafhankelijk.
Detectie van geobfusceerde codepatronen. Stel specifieke vragen over string-splitsing, eval()-equivalenten en dynamische Base64-decodering. Hulpmiddelen die alleen letterlijk eval() markeren, zullen de meeste echte obfuscatie missen.
Gedragsmonitoring na het laden. Veel aanvallen halen hun echte payload van een C2-server op na het initiële laden van de pagina. Het hulpmiddel moet blijven monitoren na DOMContentLoaded, niet alleen bij de initiële verwerking.
Verklaarbare meldingen. Een melding die alleen "verdacht script gedetecteerd" zegt, is niet bruikbaar. Elke bevinding moet het script identificeren, het gedrag dat detectie activeerde en de netwerkoproep die werd geprobeerd, zodat een analist kan triageren zonder te raden.
Hoe cside past in dit plaatje
cside instrumenteert de browser via een script dat in elke bezoekersessie wordt uitgevoerd. Het observeert wat elk script van derden en elk eigen script doet tijdens uitvoering: gedane netwerkoproepen, toegepaste DOM-wijzigingen, benaderde gevoelige datavelden en gedetecteerde geobfusceerde uitvoeringspatronen.
Wanneer een gecompromitteerde CDN een geobfusceerde payload serveert aan een pagina die door cside is geïnstrumenteerd, activeert detectie op wat de payload doet tijdens uitvoering (ongeautoriseerde netwerkoproep, geobfusceerde eval-keten, data-exfiltratiepatroon) in plaats van op waar het vandaan is geladen. Een mislukking van de brontoestemmingslijst kan geen vals negatief produceren in een op gedrag gebaseerd systeem.
PCI DSS v4.0.1-vereisten 6.4.3 en 11.6.1 (verplicht sinds maart 2025) vereisen dat handelaren alle scripts op betaalpagina's autoriseren en ongeautoriseerde wijzigingen in scriptinhoud of HTTP-headers detecteren. Gedragsmonitoring op browserlaag levert het uitvoeringsgerichte bewijs dat die controles verwachten van een monitoringlaag die tot in de browser reikt in plaats van te stoppen bij de netwerkrand.
Voor meer informatie over de praktische beperkingen van CSP, zie waarom CSP niet werkt. Voor een technische analyse van obfuscatiemethoden die in echte aanvallen worden gebruikt, zie de gids voor het deobfusceren van JavaScript van derden.






