Scopes op Exact Online beperken datatoegang via de REST API, maar momenteel niet via de XML API (situatie oktober 2024). Dit kan leiden tot datalekken. Zorg daarom ook voor een strikt toegangsbeheer op gebruikersniveau om beveiligingsrisico’s van externe applicaties te beperken.
Inleiding
In een tijd waarin databeveiliging steeds belangrijker wordt, is het cruciaal om goed na te denken over de manier waarop externe applicaties toegang hebben tot gevoelige bedrijfsgegevens. Veel gebruikers koppelen externe applicaties (“apps”) via de Exact Online API’s met Exact Online om naadloos data te integreren in hun workflows. Echter, bij het gebruik van deze API’s kunnen er onverwachte beveiligingsrisico’s optreden, bijvoorbeeld wanneer het aankomt op de manier waarop de REST- en XML-API’s omgaan met zogenoemde “scopes”.
Wat zijn scopes in Exact Online?
Een “scope” bepaalt welke data-elementen een externe applicatie mag opvragen of schrijven via de API’s van Exact Online. Dit is een belangrijke beveiligingsmaatregel, omdat hiermee wordt gecontroleerd of een applicatie specifieke toegang heeft tot bepaalde datasets, zoals klanten, facturen of offertes.
Met OAuth-authenticatie kan een applicatie via API’s toegang krijgen tot Exact Online-data, en deze toegang wordt dan beperkt op basis van de ingestelde scopes.
Scopes zijn een verdere inperking van de rechten van een Exact Online-gebruiker. Ook als een gebruiker wel offertes kan opvragen of muteren, dan is te verwachten dat offertes niet kunnen worden opgevraagd of gemuteerd als de bijbehorende scope niet is goedgekeurd voor de externe applicatie door Exact Online.
Zie voor meer informatie ook Wat is "data scoping" op Exact Online?. Naast data scoping bestaat er ook nog scoping op administraties; dit is een geheel ander onderwerp waar meer over te lezen is in Wat is "division scoping"?.
Datalek via XML API’s
Bij scopes komt een potentieel probleem naar voren. Terwijl de REST API’s scopes gebruiken om de toegang tot data-elementen te beperken, geldt dit niet voor de oudere XML API’s van Exact Online. Via de XML API worden scopes simpelweg genegeerd (situatie oktober 2024). Neem bijvoorbeeld een gebruiker die offertes kan zien en/of wijzigen. Een externe applicatie die namens deze gebruiker via de REST API geen toegang heeft tot offertes, kan deze ophalen via de XML API. Dit introduceert een datalek, vooral als je vertrouwt op scopes om de datatoegang te beheren.
Een praktijkvoorbeeld: stel je hebt een OAuth-gebaseerde applicatie die geen scope heeft voor het opvragen van offertes. Via de REST API krijg je keurig een foutmelding als je probeert deze data te benaderen (HTTP 403). Echter, als dezelfde applicatie de XML API gebruikt, kan diezelfde data wél worden opgevraagd, zonder enige beperking op basis van de scope.
Praktijkvoorbeeld
Het probleem kan geillustreerd worden via een externe (gepubliceerde) applicatie die geen toegang heeft tot offertes volgens de scopes in het Exact Online App Center:
Een opvraging via Invantive UniversalSQL van de tabellen op basis van de REST API geeft dan geen rijen terug:
select QuotationNumber
from ExactOnlineREST..Quotations
limit 10
Via de query op de XML API komen de eerste 10 offertes terug:
select QUOTATIONNUMBER_ATTR
from ExactOnlineXML..Quotations
limit 10
Het feit dat via REST API’s de scopes wel in acht genomen worden, maar via de XML API’s niet, blijkt ook uit deze opvraging van de daadwerkelijke API-calls met de query:
select DATA_CONTAINER_ALIAS
, SUCCESSFUL
, BYTES_RECEIVED
, ERROR_MESSAGE_CODE
, ERROR_MESSAGE
, URL
from SessionIOs@DataDictionary
where lower(url) like '%quot%'
In deze tabel als plaatje hierboven of hieronder als tekst is zichtbaar dat de REST API-call niet geslaagd is, en de XML API-call circa 40 MB aan data heeft kunnen ophalen:
Datacontainer Alias | Geslaagd | Bytes Ontvangen | Foutmeldingcode | Foutmelding | URL |
---|---|---|---|---|---|
ExactOnlineRest | 0 | itgenclr217 | Forbidden - Application Scope Violated. Cannot read ‘crm.quotes’ scope… | https://start.exactonline.nl/api/v1/.../crm/Quotations?$select=* | |
ExactOnline | 40.039.948 | https://start.exactonline.nl/Docs/XMLDownload.aspx?Topic=quotations&Params_details=1&_Division_=… |
Gebruikersrechten als Belangrijkste Verdediging
Het bovenstaande voorbeeld benadrukt dat scopes geen afdoende beveiligingsmaatregel zijn om ongewenste toegang tot gegevens te voorkomen. In plaats van te vertrouwen op de scopes van de REST API, is het essentieel om de gebruikersrechten in Exact Online correct en restrictief in te stellen. De rechten die aan gebruikers in Exact Online worden toegekend, zijn namelijk zowel van kracht bij het gebruik van de REST als de XML API’s. Ook kan het verstandig zijn om een aparte gebruiker aan te maken voor een externe applicatie om zo de toegangsrechten te borgen.
Daarom is het van groot belang dat gebruikers alleen de noodzakelijke rechten krijgen voor de data die ze nodig hebben. Dit betekent bijvoorbeeld dat een gebruiker die geen toegang hoeft te hebben tot offertes, deze rechten ook daadwerkelijk niet krijgt in Exact Online. Zo wordt voorkomen dat een zwak punt in de XML API toch leidt tot ongewenste datatoegang.
Conclusie: Vertrouw Niet Alleen op Scopes
Hoewel scopes een nuttige toevoeging zijn om toegang tot data te controleren via de REST API’s, bieden ze geen volledige bescherming. Zoals we hebben gezien, kunnen externe applicaties zonder de juiste scope via de XML API toch nog steeds toegang krijgen tot de gegevens. Het is daarom van groot belang om niet te vertrouwen op scopes als enige vorm van beveiliging. Zorg ervoor dat de rechten van de gebruikers in Exact Online zorgvuldig zijn ingesteld, zodat alleen de benodigde data toegankelijk is. Hiermee houd je de controle over je data en voldoe je makkelijker aan de eisen van beveiligingsstandaarden zoals ISO 27001.
Aanbeveling: Geef gebruikers in Exact Online alleen de toegang die ze echt nodig hebben en blijf altijd waakzaam voor beveiligingszwakheden in de verschillende API’s die je gebruikt. Zo minimaliseer je het risico op datalekken en voldoe je eerder aan de vereisten van moderne beveiligingsstandaarden.